TCP/IP 协议栈高效可靠的数据传输机制——以 Linux 4.19 内核为例
TCP/IP 协议栈是一种非常成熟且广泛使用的网络通信框架,它将复杂的网络通信任务分成多个层次,从而简化设计,使每一层的功能更加清晰和独立。在经典的 TCP/IP 协议栈中,常见的分层为链路层、网络层、传输层和应用层。本文将对每一层的基本功能进行描述,并列出对应于 Linux 4.19 内核中处理数据包的部分关键函数,重点探讨确保数据在网络中的高效和可靠传输。
1. 链路层
功能:
链路层主要负责节点间直接通信的数据传输,处理物理地址(MAC 地址)的标识和数据包的帧结构。它包括原始硬件通信、数据帧在链路上的传输和接收。
关键函数:
- netif_rx:当网络设备驱动接收到数据包时,通过此函数将数据包提交给内核协议栈的上层处理。
- napi_gro_receive 和 __napi_gro_receive:在 NAPI 机制下,用于高效地接收和处理数据包,减少中断处理开销,提高性能。
2. 网络层
功能:
网络层承担数据包从源端传输到目的端的任务,这包括 IP 地址的标识、路由选择、数据包的分片和重组等功能。它确保数据包能够跨不同网络段传递到正确的目标主机。
关键函数:
- netif_receive_skb:链路层将接收到的数据包交给此函数进行处理,并交由网络层处理。