TCP/IP详解 卷二:实现 - 笔记
书籍概要
《TCP/IP详解 卷二:实现》是W. Richard Stevens的经典著作,详细剖析了4.4BSD-Lite(Net/3)内核中TCP/IP协议栈的C语言实现。本书是卷一的配套篇,从源码层面揭示网络协议栈的每个细节。
作者:W. Richard Stevens
页数:872页
类型:文本型PDF
语言:中文翻译版
核心知识体系
一、内核网络架构三层模型
本书将网络代码划分为三个层次,每层都有明确的功能边界:
| 层级 | 职责 | 主要函数 |
|---|---|---|
| 接口层 | 硬件抽象、帧封装/解封装 | 以太网输出、ARP、SLIP、环回 |
| 协议层 | 端到端传输、路由、分片 | IP输出/输入、TCP、UDP、ICMP |
| 插口层 | 进程与内核通信的接口 | socket、sendto、recvfrom |
二、核心数据结构
mbuf(Memory Buffer)- 内核内存管理基石
- 四种类型:普通mbuf、分组首部mbuf(M_PKTHDR)、外部缓存mbuf(M_EXT)、簇(Cluster)
- 核心成员:
m_data、m_len、m_next、m_flags - 作用:在进程与网络接口间传递用户数据,支持可变长缓存操作
关键结构体
file结构:描述符表项,指向socket或vnodesocket结构:插口核心数据结构inpcb结构:Internet协议控制块,存储地址/端口信息ifnet结构:网络接口描述符protosw结构:协议交换表,实现多协议支持
三、协议实现详解
第8章 IP:网际协议
ip_input():IP输入主函数,完成校验和验证、分片处理、路由查找ip_output():IP输出函数,处理分片、MTU检测、TTL递减- 关键算法:IP分片与重装(第10章)、IP选项处理(第9章)
第23章 UDP:用户数据报协议
- 轻量级传输协议,无连接、不可靠
- 约9个函数、800行C代码
- 核心函数:
udp_input()、udp_output()
第24-30章 TCP系列(全书核心)
- 第24章:TCP整体架构,28个函数、约4500行C代码
- 第25章:TCP定时器(重传、持续、保持定时器)
- 第26章:TCP输出(
tcp_output,慢启动、拥塞避免、Nagle算法) - 第27章:TCP辅助函数
- 第28-29章:TCP输入(
tcp_input,约1100行,首部预测算法) - 第30章:TCP用户需求(
tcp_usrreq,PRU_CONNECT/SEND/RCVD等)
TCP关键机制:
- 滑动窗口与流量控制
- 拥塞控制(慢启动、拥塞避免、快速重传/恢复)
- 选择性确认(SACK,RFC 2018)
- 时间戳选项(RFC 1323)
第21章 ARP:地址解析协议
- IP地址到MAC地址的映射
- 缓存管理、邻居发现
第12-14章 多播
- IGMP(互联网组管理协议)
- IP多播选路(mrouted实现)
四、关键算法与技术
- 首部预测(Header Prediction):TCP输入的快速路径优化,跳过大部分逻辑
- Radix树路由:高效的路由表查找算法(第18章)
- BPF(BSD Packet Filter):网络抓包机制(第31章)
- 原始IP插口:绕过协议栈,直接构造IP报文(第32章)
核心原则与工程智慧
- 分层解耦:接口层/协议层/插口层严格分离,便于维护和替换
- mbuf链式结构:灵活处理变长数据,减少内存复制
- 软中断机制:网络包接收产生软中断,异步处理提升性能
- spl函数:通过设置软件优先级屏蔽中断,保护共享数据结构
- 协议交换表(protosw):多协议统一接口,支持TCP/UDP/ICMP等协议并存
与其他知识的关联
- 卷一《协议》提供理论框架,卷二提供实现细节,两者互补
- 与Linux内核网络协议栈有相似架构设计
- mbuf概念与Unix网络编程中的IO缓冲区管理一脉相承
- TCP拥塞控制机制是计算机网络课程的核心考点
可行动点
- 对照Net/3源码阅读,理解每个函数的调用关系
- 重点掌握TCP状态机(第24章图24-2)
- 实践tcpdump/bpf抓包分析(第31章)
- 对比Linux内核(net/ipv4/)理解不同实现差异
笔记生成日期:2026-09-02
来源文件:/日常学习资料/TCP-IP详解卷二:实现.pdf