对Linux TCP implementation的阅读暂时先告一段落。以后有需求的时候再来加深理解。
顺道分享一个总结性的PPT。
TCP ADI in Linux(8): TCP receive
这章主要是TCP接收包得处理流程。
kernel对于TCP包得处理大致可以分为两类:
- 如果处理in-sequence的包时,application正阻塞在read操作中,则接收到的数据包的数据会被直接拷贝到user buffer。
- 否则,in-sequence包会被放在receive queue中,out-of-order包会放置于out-of-order queue中。
TCP ADI in Linux(7): TCP send
这种重点描述从应用层下发的数据,是在TCP中如何被管理以及被传输的。主要会涉及到MTU,各类TCP层的算法(如Nagle)以及核心的拥塞控制算法和flow control算法(滑动窗口机制)。
另外需要注意的是,这块我看的内核3.10与书中的内核版本实现存在较大不同,看代码的时候需要引起注意。
TCP ADI in Linux(6): Movement of sk_buff across protocol layers
这章主要是从宏观上来理解整个TCP/IP协议栈道额工作机制。在整个讨论的过程中,涉及到以下的层次划分:
socket layer
tcp layer
ip layer
link layer
packet scheduling layer, qdisc
softIRQ framework
transmission/reception
TCP ADI in Linux(5): sk_buff and protocol headers
这章学习一下TCP用于表示数据包的最重要的一个数据结构:sk_buff。
sk_buff有三部分:sk_buff基本数据元素, linear-data buffer, paged-data(struct skb_shared_info)。
这章将详细的讲解如何有sk_buff构建一个被发送出去的包(主要就是包头的构建)和如何解析一个数据包得到一个sk_buff。