02 IPv4 与传输层机制与实现详解
1. 目录与配置
net/ipv4/(~135 文件),依赖 CONFIG_INET。
提供 AF_INET(PF_INET):IPv4 地址族、TCP/UDP/RAW/ICMP、IGMP、ARP、FIB 路由。
2. 协议注册
af_inet.c 在初始化时注册 inet_proto_ops:
socket→inet_create;- 协议号映射到
tcp_prot、udp_prot、raw_prot等struct proto。
3. 传输层
| 协议 | 主要源文件 | 要点 |
|---|---|---|
| TCP | tcp_*.c(ipv4 + 通用) |
状态机、拥塞控制(可插拔 CC)、timewait、SACK |
| UDP | udp.c |
无连接、udp_sendmsg/udp_recvmsg |
| RAW | raw.c |
原始 IP 访问 |
| ICMP | icmp.c |
ping、差错报文 |
MPTCP 在 net/mptcp/ 扩展 TCP(CONFIG_MPTCP)。
数据路径(发送简化):
1 | sock_sendmsg → tcp_sendmsg → ip_queue_xmit → dst → dev_queue_xmit |
4. 路由与 FIB
| 组件 | 作用 |
|---|---|
| fib_*.c | 转发信息库、策略路由、FIB rules |
| route.c | ip_route_output_key、fib_lookup |
| arp.c | IPv4 ARP |
policy routing(ip rule)在 FIB 规则层实现。
5. Netfilter(IPv4 侧)
net/ipv4/netfilter/ 含 iptables 兼容、defrag、NAT 片段 等;核心 hook 框架在 net/netfilter/(见 04 文档)。
Hook 点:NF_INET_PRE_ROUTING、LOCAL_IN、FORWARD、POST_ROUTING 等。
6. 隧道与特殊
| 目录/文件 | 功能 |
|---|---|
| ip_tunnel.c | IPIP/GRE 等 |
| xfrm4_*.c | IPsec 与 net/xfrm 协作 |
| bpfilter/ | 实验性 iptables BPF 代理 |
7. RK3588 场景
- 板载以太网:默认 DHCP/静态 IP 走 ipv4 FIB + ARP;
- NAT/防火墙:
netfilter+iptables-nft; - WiFi STA:同一 ipv4 栈,接口为
wlan0; - 性能:调整
tcp_congestion_control、netdev_max_backlog、somaxconn。
专文:rk3588-kernel-6.1-net-ipv4分析_zh.md
8. 小结
ipv4/ 是 RK3588 最常见 L3/L4 路径;与 drivers/net 分界在 ip_finish_output2 → 邻居解析 → 驱动发送。
正在加载留言…