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及路由介绍
f 第2.1章 第2.3章 第2.4章
4. 从连接、发送、到接收数据包的过程
f 第4、5、6章详细阐述