《TCP IP 详解卷1:协议》阅读笔记

  • 时间:
  • 浏览:1
  • 来源:大发11选5_大发11选5官网

TCP流量控制机制通过动态调整窗口大小来控制发送端的操作,确保路由器/接收端消息我不要 溢出。

Nagle算法[RFC0896]要求,当有有两个 多TCP连接蕴藏在传数据(即那些已发送但还未经确认的数据),小的报文段(长度小于SMSS)就只有被发送,直到所有的在传数据都收到ACK。随后在收到ACK后,TCP前要派发那些小数据,将其整合到有有两个 多报文段中发送。这名法律法子迫使TCP遵循停等(stop-and-wait)规程:只有等接收到所有在传数据的ACK能不还能不能继续发送。该算法的精妙之指在于它实现了自时钟控制:ACK返回更慢了 了 ,数据传输更慢了 了 。在相对高延迟的广域网中,更前要减少微型报的数目,该算法使得单位时间内发送的报文段数目更少,也我希望说RTT控制着发包带宽。

启用Nagle:

如下是TCP发送窗口特征图:

由接收端通告的窗口称为提供窗口,蕴藏4~9字节;接收端已成功确认包括第5个字节在内的事先 数据,并通告了有有两个 多6字节大小的窗口。窗口大小字段相对ACK号有有有两个 多另一方的偏移量,发送端计算其可用窗口,即它还能不能 立即发送的数据量,可用窗口计算值为提供窗口大小减去在传且未确认的数据值。变量SND.UNA和SND.WND分别记录窗口左边界和提供窗口值,SND.NXT记录下次发送的数据序列号,可用窗口值为SND.UNA+SND.WND-SND.NXT。

在Windows(Vista/7及事先 版本)和linux中,支持接收窗口自动调优。自动调优连接的在传输数据值前要不断被估算,通告窗口值只有小于这名值。这名法律法子使得TCP达到其最大可用吞吐量,而从不提前在发送端或接收端设置过大的缓存。该功能可在系统中通过命令进行配置。

在随后 情况报告下,TCP从不对每个到来的数据包都返回ACK,利用TCP的部分ACK字段可能性实现这名功能。部分确认还能不能 允许TCP延迟一段时间发送ACK,以便将ACK和相同方向上前要传的数据结合发送。主机需求RFC[RFC1122]指出,TCP实现ACK延迟的带宽应小于30000ms,实践中最大取3000ms。

采用延时ACK的法律法子会减少ACK传输数目从而还能不能 一定程度地减轻网络负载。该法律法子通常用于(大)批量数据传输,但在小数据包传输中,如交互式应用,则前要采取Nagle算法。

回想一下事先 在12章介绍TCP数据特征的事先 ,窗口大小字段(Win,16位,以字节为单位)用于通告有有两个 多接收方的窗口大小以达到流量控制。

  2. 对于发送端来说,不应发送小的报文段,随后前要由Nagle算法控制哪天发送。为外理SWS疑问,只有指示满足以下条件之一时还能不能传输报文段:

  3. 收缩,窗口右边界左移。主机需求[RFC1122]从不支持这名做法,但TCP前还能不能外理这名疑问。

  1. 对于接收端来说,不应通告小的窗口值。[RFC1122]描述的接收算法中,在窗口增至有有两个 多全长的报文段(接收端MSS)可能性接收端缓存空间的一半(取两者中较小值)事先 ,只有通告比当前窗口(可能性为0)更大的窗口值。可能性有四种 情况报告会用到该规则:当程序外理接收到的数据后使得可用缓存增大;TCP接收端前要强制返回对窗口探测的响应。

针对这名疑问,TCP有以下外理法律法子:发送端会采用有有两个 多持续计时器间歇性地查询接收端,看其窗口是是不是已增长。持续计时器会触发窗口探测的传输,强制要求接收端返回ACK(其暗蕴藏了窗口大小字段)。主机需求[RFC1122]建议在有有两个 多RTO事先 发送第有有两个 多窗口探测,随后以指数时间间隔发送。窗口探测暗蕴藏有两个 多另一方的数据,采用TCP可靠传输,然能不还能不能 外理由窗口更新丢失意味的死锁。

窗口左边界只有左移,可能性它控制的是已确认的ACK号,具有部分性,不可返回。当得到的ACK号增大而窗口大小保持不变时,称为窗口向前滑动;随着ACK号增大窗口却减小,则左右边界距离减小,当左右边界相等时,称为零窗口。零窗口时,发送端只有再发送新数据,且TCP发送端结束了英语 探测对方窗口以伺机增大提供窗口。

结合上文的数据传输列表图,还能不能 就看发送方和接收方都蕴藏Win字段,且是是不是值。发送方请求数据包携带的Win有8320、4220,表示发送且未被确认的数据大小(即发送方窗口大小);接收方响应数据包携带的Win有1030000、32900,表示接收方为即将到来的新数据预留的内存存储空间(接收端窗口大小)。

  2. 打开,窗口右边界右移,使得可发送数据量增大。当已确认数据得到外理,接收端可用缓存变大,窗口也随之变大。

    b) 数据段长度 ≥ 接收端通告过的最大窗口值的一半的,还能不能 发送。

两张图是一样的操作,1键入d、2确认d并回显d、3对回显d的确认,依次类推至15完成date的输入并键入回车键,16~17是对日期的回显及确认,18~19是换行后对命令提示符的返回和对该数据的确认。

    a) 全长(发送MSS字节)的报文段还能不能 发送。

基于窗口的流量控制机制,尤其是不使用大小固定的报文段的情况报告下可能性会出現 称为糊涂窗口综合征(SWS)的指在问题。当出現 该疑问时,交换数据段大小是是不是全长我希望随后 较小的数据段[RFC0813],可能性每个报文段蕴藏用的数据相对于头部信息的比例较小,随后耗费的资源也更多,相对应的传输带宽也更低。

禁用Nagle:

一下是针对远程服务器键入date命令并回车的TCP连接信息图:

TCP连接的每一端都还能不能 收发数据,连接的收发数据量是通过一组窗口特征来维护的。每个TCP活动连接的两端都维护有有两个 多发送窗口特征和接收窗口特征。

当通告窗口值变为0时,还能不能 有效的阻止发送端继续发送,直到窗口大小恢复为非零值。当接收端重新获得可用空间时,会给发送端传输有有两个 多窗口更新告知其可继续发送数据。窗口更新通常不蕴藏数据,为纯ACK,且只有保证其传输的可靠性。可能性有有两个 多蕴藏窗口更新的ACK丢失,通信双方就会一直指在等待时间情况报告:接收方等待时间接收数据(已将窗口设为非零值),发送方等待时间收到窗口更新告知其可继续发送。

  1. 关闭,窗口左边界右移。当已发送数据得到ACK确认时,窗口会减小。

启用Nagle算法后的请求和响应包随时间分布呈一定的规律性,观察每组请求/响应的传输时刻 -- 0.0、0.19、0.38、0.57,遵循一定的模式:每有有两个 多间隔为190ms,恰为连接的RTT。每发送一组请求和响应包前要等到有有两个 多RTT,这就加长了整个传输过程。Nagle算法做出了四种 折中:传输的包数目更少而长度更大,但同時 传输带宽也更长。

以下是Nagle算法(以ssh操作为例)禁用和启用的传输过程区别比较:

左边是禁用Nagle算法的传输过程,右边是启用Nagle算法后的传输过程。前者19个包,传输持续了0.58s;后者1有有两个 多包,传输持续了0.8s。

接收窗口相对发送窗口较简单。对接收端来说,到达序列号小于左窗口边界(RCV.NXT)被认为是重复数据而丢弃;超过右边界(RCV.WND+RCV.NXT)的则超出外理范围,也被丢弃;接收窗口(RCV.WND)内会接收并保存。接收窗口只有在接收到数据序列号等于左边界时,才会指在窗口前移。

延时确认和Nagle算法

交互式TCP连接指该连接前要在客户端和服务器之间传输用户输入信息,如按键操作、短消息、操作杆或鼠标操作。对于那些操作,可能性用较小的报文段来承载信息,则传输协议前要耗费很高的代价;反之采用较大的报文段则会引入更大的延时,对延迟敏感类应用造成负面影响。随后前要权衡相关因素来找到适合的法律法子。

接收窗口特征如下:

(a)是产生有有两个 多报文段的过程,(b)是合并击键确认和回显报文后的过程。

交互式TCP连接

随着传输的进行,当接收到返回的数据ACK时,滑动窗口也随之右移,窗口两端的相对运动使得窗口增大或减小,可用有有两个 多术语来描述窗口左右边界的运动:

流量控制和窗口管理

TCP连接的两端都可能性意味SWS的出現 :接收端的通告窗口较小、发送端发送的数据段较小。要外理SWS疑问,前要在发送端或接收端实现相关规则:

    c) 满足一下任一条件的都还能不能 发送:(i)某一ACK是是不是目前期盼的(即只有 未经确认的在传数据);(ii)该连接禁用Nagle算法。

接收端也维护有有两个 多窗口特征,记录了已接收并确认的数据,以及它还能不能接收的最大序列号,该窗口还能不能 保证其接收数据的正确性,特别是接收端希望外理存储重复的已接收和确认的数据以及外理存储不应接收的数据。

以ssh(安全外壳)应用为例,对有有两个 多ssh连接,每个交互按键通常是是不是生成有有两个 多单独的数据报(每个按键独立传输)。另外,ssh会在远程系统调用shell,对客户端的输入字符做出回显。客户端的每个输入字符是是不是生成有有两个 多TCP数据段:客户端的交互击键的确认、服务器端对击键的确认、服务器端生成的回显、客户端对该回显的确认。通常服务器端对击键的确认和服务器端生成的回显还能不能 合并成有有两个 多信息返回。

阅读须知:笔记为阅读《TCP IP 详解卷1:协议》后摘抄的随后 知识点,其间是是不是加入随后 根据英文原版的另一方翻译和结合网上知识后的理解,统统随后 段落之间从只有够串联上可能性知识点与书上略有差别(基本差别不大,参考的资料属RFC官方文档)。

TCP发送端滑动窗口特征记录了已确认、在传以及还未传的数据的序列号。提供窗口的大小是由接收端返回的ACK中的窗口大小字段控制的。

以上四种 情况报告的传输派发成交换过程图如下: