• 传输层 使用滑动窗口实现流量控制


    滑动窗口机制


    流量缓冲:解决速度不匹配问题(客户端和服务器,这两端的速度是完全不一致的,机器性能不一致,这个时候处理的速度是不配的

    TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。

    TCP会话的双方都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制。发送窗口则取决于对端通告的接收窗口。

    接收方发送的确认报文中的window字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将接收方的确认报文window字段设置为 0,则发送方不能发送数据。

    TCP头包含window字段,16bit位,它代表的是窗口的字节容量,最大为65535。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。接收窗口的大小是约等于发送窗口的大小。

    流量控制是指发送端给接收端发的太快了,接收端可以告诉它发慢点。(滑动窗口实现流量控制,流量控制是接收方控制发送方)

    接收端设置窗口,发送端根据接收端的窗口来设置发送窗口,在整个通信过程当中窗口是可以调整的。

    在上面建立连接的时候就有窗口字段64240个字节,最大的数据段为1460,网卡的最大传输单元MTU数据链路层的最大传输单元是1500个字节,网络层的首部为20个字节,传输层的首部是20个字节,那么数据就变为1460个字节。那么滑动窗口64240/1460就可以连续发44个数据包。

    同时还可以支持选择性确认SACK_PERM=1。

    在建立TCP连接的时候就可以协商这些参数,接收窗口是多大,MSS是多少,然后支持选择性确认。

    确认里面数据的长度都是为0的,在给确认的时候就指定了窗口的大小,可以看到窗口是可以调整大小的。接受窗口变小那么发送窗口也随之变小,发送端发的就不那么快了。

     b告诉a,它的接受窗口是400,段最大为100个字节,在发的时候1 2到了 3丢了,给它确认,让它发送第三个数据包,然后窗口开始移动,然后发第4 5个再发第3个,收到之后给它确认。。。。。。。。

    窗口变为0之后就不再发了,发送端就停止了,处理之后再发确认,窗口再调整为400。

  • 相关阅读:
    循环神经网络(四)
    利用docker搭建不同版本fastjson漏洞环境【保姆级教学】
    Unity编辑器扩展
    vue中图片文件夹的保存与访问
    vue~要懂的有关node与npm
    2022年冷链物流行业分析
    Power BI: DAX - 用Rank函数求前N名
    多线程&并发篇---第九篇
    PAT 1140 Look-and-say Sequence
    4 JavaScript
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/125535103