This document provides an introduction and overview of the networking code in the Linux kernel source tree. It discusses the different layers including link (L2), network (L3), and transport (L4) layers. It describes the input and output processing, device interfaces, traffic directions, and major developers for each layer. Config and benchmark tools are also mentioned. Resources for further learning about the Linux kernel networking code are provided at the end.
1 of 16
Downloaded 1,172 times
More Related Content
introduction to linux kernel tcp/ip ptocotol stack
1. Introduction to Linux Kernel
TCP/IP procotol stack
µñÁº
ºËÐÄϵͳ·þÎñÆ÷ƽ̨×é
diaoliang@taobao.com
simohayha.bobo@gmail.com
http://www.pagefault.info
2011/01/15
3. Introduction
Source
http://git.kernel.org/
net-next-2.6 and net-2.6
Developer
Alan Cox, David Miller, Eric Dumazet, Patrick Mchardy
etc.
Traffic directions
input , forward and output
Layer
L2(Link Layer)/L3(Network Layer)/L4(Transport Layer)
Device interface
PCI/PCI-E
6. Link layer
Frame type
802.3/802.2/802.2-SNAP/Ethernet
Input
Driver
NAPI
Poll + Interrupt
Soft interrupt
GRO
feed packet to network stack
RPS/RFS
make steer in SMP
Protocol handler
use eth_type_trans
Packet_type list
7. Link layer
Output
Traffic Control
Soft interrupt
Transmit SKB
Scatter/Gather DMA
Free skb
XPS
multiqueue
avoid cache line bouncing
improve locality
Bridge
Virtual device, must bind one or more real device
Spanning Tree Protocol
9. Network Layer(IP)
Input
Protocol handler
net_protocol array
defragment
Hashtable
Each IP packet being defragmented save in a list
stored in kernel memory until they are totally
processed
Output
fragment
MTU
Scatter/Gather IO
udp
neighboring
10. Network Layer(IP)
Forward
process ip option
igonore defragmentation
Router Alert option
Route
Forwarding Information Base(routing table)
cache
Netfilter
HOOK point
NF_IP_LOCAL_OUT/ NF_IP_LOCAL_IN etc..
Management
Long-living IP peer information
AVL tree
IP statistics
per cpu data ipstats_mib
/proc/net/snmp
12. Transport Layer (tcp)
Init
bind callback (sock_create)
Three handshrek
accept queue
syn table
create new socket fd and change state
Manage socket
inet_ehash_bucket
TCP_ESTABLISHED <= sk->sk_state < TCP_CLOSE
inet_bind_hashbucket
local binding port info
listening_hash
socket in TCP_LISTEN state
13. Transport Layer (tcp)
Output
Tcp push
Congestion control
state transition
congestion windows
packet count
Input
fast path and slow path
Interrupt context/ Process context
sk_backlog/receive_queue/prequeue
Tcp state transition
Kernel control
Timer
Retransmit/keep-alive/time-wait etc