趣谈网络协议(十二):TCP协议(下)

TCP协议(上)中.  他讲述了其保证算法

包顺序发送(TCP头的第二行序号)缓存

包丢失会重传(第三行有确认序号.响应超时会重发)网络

拥塞控制

   拥塞控制.对客户端:它要保证发送的频率,若是太快会撑死,太慢却没有物尽其用!对服务端:她得告诉对方本身的效率是多少(一次能处理多少个请求分别多少时间.若是超出本身的范畴直接不接收这就致使丢包)spa

    咱们怎么知道服务端的极限呢,咱们能够看到TCP头的第四行-16位窗口大小.叫Advertised window。超过这个窗口大小服务端就作不来这时客户端就别再发送了.blog

    客户端四种状态

        1.已发送并已确认class

        2.已发送但未确认效率

        3.未发送待发送(可发送)sed

        4.未发送不发送(不可发送)请求

        这里窗口大小为二、3状态的合(即上图紫色部分的总和)程序

    服务端三种状态

        1.已确认.等待应用程序处理

        2.已收到.但未确认

        3.还没有收到

    理想状况下,上述就能在网络中完整的传输.但现实每每是很骨感的。

好比客户端是连续发送的包.有的包丢了(压根没到服务端).

有的包服务端收到了并进行ACK但途中丢了(这时服务端又得重发).

再者网络状态不稳定的状况.也要适当的调整窗口大小

    客户端发送的包若是没有回复就会超时重试.那超时时间如何取值呢.这时间必须大于往返时间RTT的值.不然会引发没必要要的重传.也不宜过长,这样访问就变慢了.

这时就要用到自适应重传算法:采样RTT的波动范围,计算并估计一个超时的时间。

流量控制问题

    咱们在对于包的确认中,同时会携带一个窗口的大小.好比窗口大小为9.即确保二、3状态(已发送未确认、待发送)总和为9便可

    当有一些极端状况,好比服务端发送一个确认包.却不读取缓存的包,这时窗口应设置为8.若是这样下去.窗口最后变为0了.客户端直接啥都不用作。这时客户端会定时发送探测数据包.看服务端是否调整了窗口的大小以便继续发包出去

拥塞控制问题

最后的拥塞控制,也是经过窗口的大小来控制的,

前面的滑动窗口rwnd是怕发送方把接收方缓存塞满,用拥塞窗口cwnd,是怕把网络塞满

相关文章
相关标签/搜索