这章主要是TCP接收包得处理流程。
kernel对于TCP包得处理大致可以分为两类:
- 如果处理in-sequence的包时,application正阻塞在read操作中,则接收到的数据包的数据会被直接拷贝到user buffer。
- 否则,in-sequence包会被放在receive queue中,out-of-order包会放置于out-of-order queue中。
这章主要是TCP接收包得处理流程。
kernel对于TCP包得处理大致可以分为两类:
这种重点描述从应用层下发的数据,是在TCP中如何被管理以及被传输的。主要会涉及到MTU,各类TCP层的算法(如Nagle)以及核心的拥塞控制算法和flow control算法(滑动窗口机制)。
另外需要注意的是,这块我看的内核3.10与书中的内核版本实现存在较大不同,看代码的时候需要引起注意。
这章主要是从宏观上来理解整个TCP/IP协议栈道额工作机制。在整个讨论的过程中,涉及到以下的层次划分:
socket layer
tcp layer
ip layer
link layer
packet scheduling layer, qdisc
softIRQ framework
transmission/reception
这章学习一下TCP用于表示数据包的最重要的一个数据结构:sk_buff。
sk_buff有三部分:sk_buff基本数据元素, linear-data buffer, paged-data(struct skb_shared_info)。
这章将详细的讲解如何有sk_buff构建一个被发送出去的包(主要就是包头的构建)和如何解析一个数据包得到一个sk_buff。
网上偶尔发现的一篇好文,读完顺手推荐给大家。
英文原版
中文翻译版
另外在推荐一下孙志刚老师在知乎的回答Google发布了程序员养成指南,国内互联网巨头是否也有类似的指南和课程推荐?