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主处理函数。