一.linux核心網路棧程式碼的準備知識

1. linux核心ipv4網路部分分層結構

BSD socket層: 這一部分處理BSD socket相關操作,每個socket在核心中以struct socket結構體現。這一部分的檔案主要有:

/net/socket.c 
/net/protocols.c

INET socket層:BSD socket是個可以用於各種網路協議的介面,而當用於tcp/ip,即建立了AF_INET形式的socket時,還需要保留些額外的引數,於是就有了struct sock結構。檔案主要有:

/net/ipv4/protocol.c 
/net/ipv4/af_inet.c 
/net/core/sock.c

TCP/UDP層:處理傳輸層的操作,傳輸層用struct inet_protocol和struct proto兩個結構表示。檔案主要有:

/net/ipv4/udp.c 
/net/ipv4/datagram.c 
/net/ipv4/tcp.c 
/net/ipv4/tcp_input.c 
/net/ipv4/tcp_output.c 
/net/ipv4/tcp_minisocks.c 
/net/ipv4/tcp_output.c 
/net/ipv4/tcp_timer.c

IP層:處理網路層的操作,網路層用struct packet_type結構表示。檔案主要有:

/net/ipv4/ip_forward.c
/net/ipv4/ip_fragment.c 
/net/ipv4/ip_input.c 
/net/ipv4/ip_output.c

資料鏈路層和驅動程式:每個網路裝置以struct net_device表示,通用的處理在dev.c中,驅動程式都在/driver/net目錄下。

2.  資料傳送流程圖

3. 資料接收流程圖

4.  Linux中TCP/IP網路層次結構與實現 

Linux通過一組相鄰的軟體層實現了TCP/IP模型,它由BSD Socket層、INET Socket層、傳輸層、網路層,和鏈路層構成。應用程式使用系統呼叫向核心函式傳遞引數和資料從而進入核心空間,由核心中註冊的核心函式對相應的資料結構進行處理。

Linux的TCP/IP層次結構和實現方式如圖所示。