TCP的输入-jpeg标准的中文文档pdf
第28章 TCP的输入
28.1 引言
TCP输入处理是系统中最长的一部分代码,函数tcp_input约有1100行代码。输入报文段的处理并不复杂,但非常繁琐。许多实现,包括Net/3,都完全遵循RFC 793中定义的输入事件处理步骤,它详细定义了如何根据连接的当前状态,处理不同的输入报文段。当收到的数据报的协议字段指明这是一个TCP报文段时,ipintr(通过协议转换表中的pr_input函数)会调用tcp_input进行处理。tcp_input在软件中断一级执行。函数非常长,我们将分两章讨论。图28-1列出了tcp_input中的处理框架。
本章将结束对RST报文段处理的讲解,从下一章开始介绍ACK报文段的处理。头几个步骤是非常典型的:对输入报文段做有效性验证(检验和、长度等),以及寻找连接的PCB。尽管后面还有大量代码,但通过“首部预测(header prediction)”(28.4节),算法却有可能完全跳过后续的逻辑。
首部预测算法是基于这样的假定:一般情况下,报文段既不会丢失,次序也不会错误,因此,对于给定连接,TCP总能猜到下一个接收报文段的内容。如果算法起作用,函数直接返回,这是tcp_input中最快的一条执行路径。如果算法不起作用,函数在“dodata”处结束,测试几个标志,并且若需要对接收报文段作出响应,则调用tcp_output。
您是否想深入了解TCP首部?可以参考《tcp首部》获取更多信息。如果对TCP报文段的发送和接收模拟感兴趣,可以查阅《TCP报文段发送接收模拟》。对于CTL字段的详细解释,《关于TCP首部的CTL字段的理解》也是一个不错的资源。
您对IP首部的检验和算法有疑问吗?参考《IP首部检验和代码》和《java ip首部效验和》了解更多信息。您可以更深入地理解和优化TCP报文段的处理过程,提高系统效率和稳定性。