银川网站建设报价,长沙营销型网站,怎么在网上推销产品,自己做网站自己做推广教程视频教程从这一节开始#xff0c;我们学习通信双方应用进程建立TCP连接之后#xff0c;数据传输过程中#xff0c;TCP有哪些机制保证传输可靠性的。本节先学习第一种机制#xff1a;流量控制。 窗口与流量控制
首先#xff0c;我们要知道的是#xff1a;什么是流量控制#xff…从这一节开始我们学习通信双方应用进程建立TCP连接之后数据传输过程中TCP有哪些机制保证传输可靠性的。本节先学习第一种机制流量控制。 窗口与流量控制
首先我们要知道的是什么是流量控制使用流量控制是为了解决什么问题
在这之前我们学习过“接收窗口”的概念其实也就是接收缓存的大小能够容纳多少字节的数据这个数值是有限的。所以接收窗口在容纳了足够的数据量之后就没有缓存再接收对方发来的数据了。如果这时对方还在不断地发来数据那么这些数据到达接收方之后接收方由于没有空余的空间来容纳来不及接收就只能把它们丢弃掉。
所以必须要有一种机制能够解决这种问题这就是流量控制。流量控制就是为了能够控制发送方的发送速率使其不要太快要能够让接收方来得及处理。
可以用比较经典的原理图来说明流量控制如下图 在这个图中为了方便叙述原理假设发送方只简单的发送数据接收方只简单的接收数据并设置接收方的接收窗口大小为400个字节。
一开始发送方发送了两个大小为100字节数据的报文段接收方收到后进行确认回复ack201rwnd200。意思是截止到序号为200的报文我已经都收到了我期望你下一个发来的报文的序号是201现在我的接收窗口大小是200字节你最多再给我发200字节的数据。
发送方知道这个情况之后接着发送了200个字节的数据。这时候接收方给出接收窗口大小为0的确认报文告诉发送方我目前已经没有接收缓存了暂时先不要发送数据了。
接收方通过在确认报文中给出自己当前接收窗口的大小使发送方知道应该向对方发送多少数据量就是TCP流量控制的方法。 “零窗口”死锁现象
了解了上面流量控制的过程之后可能会想一个问题接收方最后发送窗口值大小为零的确认报文之后发送方就会暂停发送数据等待接收方告诉缓存有空间了再继续发送。可是如果接收方将“缓存有空间”的消息告诉发送方的时候这个消息不巧在传输过程中丢失了那么发送方会不会一直等下去呢
这个现象就叫做“零窗口”死锁现象由于发送方没收到“接收方缓存有空间”的消息所以发送方一直以为接收方当前接收缓存没有空间。所以双方就会产生这样一种“死锁”的局面。
为了解决这种死锁问题所以每一个TCP连接都会设置有一个“坚持定时器”。这个定时器的作用是从收到对方发来“窗口大小为零”的报文开始启动定时器等到定时器到期如果还没有收到对方发来“接收缓存有空间”的消息那么就主动向对方发送一个“零窗口探测”报文这个探测报文只带有一个字节的数据目的就是为了探测一下对方窗口大小有没有改变。
对方收到这个探测报文后给出确认报文其中包含了当前窗口值如果当前窗口值已经不是零了这个死锁的局面就打破了发送方可以继续发送数据但如果当前窗口值仍然为零那么发送方将再次启动“坚持定时器”时间到就再次发送探测报文。
学到这里又出现一个问题既然接收方的窗口值都为零了也就意味着接收方不能再接收数据了那么为什么发送方的“零窗口探测”报文能被接受呢
这其实是TCP的一个规定当接收窗口大小为零时也必须接收“零窗口探测”报文。还有一个前面学过的首部中URG位被设置为1的紧急报文也是即使窗口值为零时必须被接收。 糊涂窗口综合症
糊涂窗口综合症主要反映的是接收方应用进程和接收缓存交互数据的时候效率低下从而导致TCP传输效率低下的问题。
比如这样一个情景接收方的窗口值为零意味着当前接收缓存已满但是上层的应用进程一次只读取一个字节的数据这样缓存中就有了一个字节的空间这时接收方给发送方发出确认表明自己的接收窗口值是1你可以发来1个字节的数据。
这样的话可以想一下发送方要把这一个字节的数据加上至少20字节的TCP首部再加上至少20字节的IP首部层层封装就会造成传输首部信息的开销大而实际的有用数据才只有一个字节。如此反复一次只有一个字节的有效数据在传输就导致TCP传输效率的低下这就是糊涂窗口综合症的现象。
要解决这种问题可以在接收方和发送方分别设置一些机制双方配合起来使得接收方不要有了一点空间就立即发送确认报文同时发送方也不要每次只发送一个很小的报文段。
可以在接收方设置等到缓存中有了能够容纳一个最大长度报文段的空间时或者缓存空间有一半是空余的就可以给发送方发去确认通告自己的接收窗口大小。
也可以在发送方使用Nagle算法当数据已达到发送窗口大小的一半或已达到报文段的最大长度时就立即发送一个报文段。
两种方法配合起来使用可以有效避免糊涂窗口综合症的现象发生。 本节内容我们学习了TCP规定在数据传输过程中的流量控制的方法原理另外还介绍了“零窗口”死锁和糊涂窗口综合症两个可能会发生的问题和相应的解决办法。下一节我们学习TCP的可靠传输。
参考教材杨英鹏《计算机网络原理与实践》