linux网络内核的核心函数作用和简介
linux网络内核中包含大量关键函数,涉及网络协议栈的各个层面(数据链路层、网络层、传输层、套接字层等)。linux网络内核的核心函数作用和简介:
socket套接字层
提供用户空间与内核网络协议栈的接口。
常见函数:
-
sock_create(): 创建 socket。 -
sock_sendmsg()/sock_recvmsg(): 发送/接收消息。 -
sock_release(): 释放socket。 -
sys_socket(),sys_bind(),sys_connect(),sys_listen(),sys_accept(),sys_sendto()等:系统调用入口。
TCP/UDP传输层
处理端口、连接、流控制、拥塞控制等。
TCP关键函数:
-
tcp_v4_connect(): 建立TCP连接。 -
tcp_sendmsg(): 发送数据。 -
tcp_recvmsg(): 接收数据。 -
tcp_v4_rcv(): 处理收到的TCP包。 -
tcp_input.c: 包含TCP接收状态机,如tcp_rcv_established()、tcp_rcv_synsent_state_process()等。
UDP关键函数:
-
udp_sendmsg() -
udp_recvmsg() -
udp_queue_rcv_skb(): 将数据包放入接收队列。 -
udp_rcv(): 处理UDP数据包。
IP网络层
负责IP分片、路由、ICMP等。
IPv4关键函数:
-
ip_rcv(): 接收并处理IP包,是IPv4的主入口。 -
ip_local_deliver(): 交给本机处理。 -
ip_forward(): 转发数据包。 -
ip_output(): 发送数据包。 -
ip_queue_xmit(): 发送数据前的封装函数。
数据链路层
负责网卡驱动交互和帧封装。
函数入口/出口:
-
netif_rx(): 接收方向的入口,数据包进入协议栈。 -
dev_queue_xmit(): 发送方向的接口,数据包从协议栈到驱动层。 -
eth_type_trans(): 确定帧的协议类型。
协议栈初始化
设置协议栈和注册协议。
-
inet_init(): 初始化INET协议族(TCP/IP)。 -
ip_init(),tcp_init(),udp_init(): 初始化各层协议。 -
register_netdevice(): 注册网络设备。 -
register_inetaddr_notifier(): 注册IP地址变更通知。
中断与软中断
处理收发中断和协议栈上下文切换。
-
net_rx_action(): 软中断接收数据。 -
netif_receive_skb(): 将skb交给协议栈处理。 -
napi_poll(): NAPI poll模式处理数据包。
skb核心操作
数据在协议栈中传递的核心结构。
-
alloc_skb(): 分配skb。 -
skb_put(),skb_push(),skb_pull(): 调整数据指针。 -
kfree_skb(): 释放skb。
路由子系统
负责查找目标地址的下一跳。
-
ip_route_input_noref(),ip_route_output_flow(): 路由查找。 -
fib_lookup(): FIB表查找函数。 -
dst_output(): 目标设备输出。
netfilter防火墙钩子机制
用于包过滤、NAT等。
-
nf_register_hook(): 注册netfilter钩子。 -
nf_hook_slow(): 处理钩子函数。 -
ipt_do_table(): iptables主处理函数。
