http://hi.baidu.com/amy_yeni/blog/item/c54003004d9a080b738da5b3.html
linux核心ipv4網路部分分層結構:
BSD socket層: 這一部分處理BSD socket相關操作,每個socket在核心中以struct socket結構體現。這一部分的檔案
主要有:/net/socket.c /net/protocols.c etc
INET socket層:BSD socket是個可以用於各種網路通訊協定的介面,而當用於tcp/ip,即建立了AF_INET形式的socket時,
還需要保留些額外的參數,於是就有了struct sock結構。檔案主要
有:/net/ipv4/protocol.c /net/ipv4/af_inet.c /net/core/sock.c etc
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
etc
IP層:處理網路層的操作,網路層用struct packet_type結構表示。檔案主要有:/net/ipv4/ip_forward.c
ip_fragment.c ip_input.c ip_output.c etc.
資料連結層和驅動程式:每個網路裝置以struct net_device表示,通用的處理在dev.c中,驅動程式都在/driver/net目
錄下。
2. 兩台主機建立udp通訊所走過的函數列表
^
| sys_read fs/read_write.c
| sock_read net/socket.c
| sock_recvmsg net/socket.c
| inet_recvmsg net/ipv4/af_inet.c
| udp_recvmsg net/ipv4/udp.c
| skb_recv_datagram net/core/datagram.c
| -------------------------------------------
| sock_queue_rcv_skb include/net/sock.h
| udp_queue_rcv_skb net/ipv4/udp.c
| udp_rcv net/ipv4/udp.c
| ip_local_deliver_finish net/ipv4/ip_input.c
| ip_local_deliver net/ipv4/ip_input.c
| ip_recv net/ipv4/ip_input.c
| net_rx_action net/dev.c
| -------------------------------------------
| netif_rx net/dev.c
| el3_rx driver/net/3c309.c
| el3_interrupt driver/net/3c309.c
==========================
| sys_write fs/read_write.c
| sock_writev net/socket.c
| sock_sendmsg net/socket.c
| inet_sendmsg net/ipv4/af_inet.c
| udp_sendmsg net/ipv4/udp.c
| ip_build_xmit net/ipv4/ip_output.c
| output_maybe_reroute net/ipv4/ip_output.c
| ip_output net/ipv4/ip_output.c
| ip_finish_output net/ipv4/ip_output.c
| dev_queue_xmit net/dev.c
| --------------------------------------------
| el3_start_xmit driver/net/3c309.c
V
3. 網路路徑圖、重要資料結構sk_buffer及路由介紹
linux-net.pdf 第2.1章 第2.3章 第2.4章
4. 從串連、發送、到接收資料包的過程
linux-net.pdf 第4、5、6章詳細闡述