在TCP/IP网络分层模型里,整个协议栈被分成物理层、链路层、网络层,传输层和应用层。Linux实现的是链路层、网络层和传输层这三层。
| 层次 | 协议栈中的作用 | Linux 实现的范围 | 详细说明 |
|---|---|---|---|
| 应用层 | 负责应用程序特定协议 (HTTP, FTP, SSH, DNS)。 | ✅ 全部 | 通过 Socket 接口(API)向应用程序提供服务。 |
| 应用程序(如 Web 服务器、浏览器、SSH 客户端)本身就是应用层实现。 | |||
| 传输层 | 负责端到端的数据传输 (TCP, UDP)。 | ✅ 全部 | 核心实现,管理连接状态、流量控制、拥塞控制(TCP)以及校验和(UDP)。 |
| 网络层 | 负责数据包路由和寻址 (IP, ICMP)。 | ✅ 全部 | 核心实现,负责 IP 地址管理、路由表维护、数据包转发等。 |
| 链路层 | 负责物理链路上的帧传输 (Ethernet, Wi-Fi)。 | ❌ 部分(软件驱动) | 链路层的软件部分(如网卡驱动、帧的封装/解封装、MAC 地址管理)由 Linux 内核实现。 |
| 但链路层的硬件部分(如 CRC 校验、介质访问控制)则由网卡硬件完成。 | |||
| 物理层 | 负责比特流的传输 (网线、光纤、无线电)。 | ❌ 无 | 完全由网卡硬件、电缆或无线硬件负责,Linux 内核不涉及电信号或光信号的生成。 |
在 Linux 内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供 socket 接口来供用户进程访问。


内核网络收包过程:
网卡驱动以DMA方式把网卡上收到的帧写到内存中。再向CPU发出硬中断以通知CPU有数据到了。