
下载
第28章 TCP的输入
28.1 引言
T C P 输入处理是系统中最长的一部分代码,函数 t c p _ i n p u t 约有11 0 0 行代码。输入报文
段的处理并不复杂,但非常繁琐。许多实现,包括 N e t / 3 ,都完全遵循RFC 793中定义的输入
事件处理步骤,它详细定义了如何根据连接的当前状态,处理不同的输入报文段。
当收到的数据报的协议字段指明这是一个 T C P 报文段时,i p i n t r (通过协议转换表中的
p r _ i n p u t 函数)会调用t c p _ i n p u t 进行处理。t c p _ i n p u t 在软件中断一级执行。
函数非常长,我们将分两章讨论。图 2 8 - 1列出了t c p _ i n p u t 中的处理框架。本章将结束
对R S T 报文段处理的讲解,从下一章开始介绍 A C K 报文段的处理。
头几个步骤是非常典型的:对输入报文段做有效性验证 (检验和、长度等),以及寻找连接
的P C B 。尽管后面还有大量代码,但通过“首部预测 (header prediction)”( 2 8 . 4 节),算法却有
可能完全跳过后续的逻辑。首部预测算法是基于这样的假定:一般情况下,报文段既不会丢
失,次序也不会错误,因此,对于给定连接, T C P 总能猜到下一个接收报文段的内容。如果
算法起作用,函数直接返回,这是 t c p _ i n p u t 中最快的一条执行路径。
如果算法不起作用,函数在“ d o d a t a”处结束,测试几个标志,并且若需要对接收报文段
作出响应,则调用t c p _ o u t p u t 。
图28-1 TCP输入处理步骤小结