zoukankan      html  css  js  c++  java
  • 拥塞控制和流量控制

    一、TCP的流量控制
    1、利用滑动窗口实现流量控制
        如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
        利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
        设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是rwnd = 400”(这里的rwnd表示receiver window)。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意:TCP的窗口单位是字节,不是报文段

    再设每一个报文段为100字节长,而数据报文段序号的初始值设为1.大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。
        

        从图中可以看出,B进行了三次流量控制。第一次把窗口减少到rwnd = 300,第二次又减到了rwnd=100,最后减到了0,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了ACK=1,只有在ACK=1时确认号字段才有意义。
        TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(携有1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

    2. 拥塞控制

    TCP采用慢开始和拥塞避免的方法控制发送
    慢开始的思路是,先测试一下,在由小到大的增大发送窗口
    具体的:预先设置一个慢开始门限,ssthresh(用于控制拥塞)
    先设拥塞窗口cwnd=1,发送第一个报文,收到确认后把cwnd设为2,在发送,收到回复后,再把cwnd增加2个,即,收到回复后就把cwnd增加一倍,这就是慢开始算法
    当cwnd>ssthresh就停止上述的慢开始算法而使用拥塞避免算法
    拥塞避免算法就是每收到一个回复后就把cwnd加1,直到出现拥塞
    无论在慢开始还是拥塞避免时只要出现拥塞就把ssthresh设为cwnd值的一半(这就是乘法减小)并把cwnd设为1,在执行慢开始算法,重复上述过程

  • 相关阅读:
    【linux】在命令行里进行数学计算
    vi编辑器的分割窗口
    Linux 磁盘管理命令
    【Matlab】sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)
    【R】 绘制 热图 heatmap
    Intent用法实例
    Android调用天气预报的WebService简单例子
    Broadcast广播消息
    Android与服务器端数据交互(基于SOAP协议整合android+webservice)
    Java中String类的方法及说明
  • 原文地址:https://www.cnblogs.com/kxdblog/p/4350046.html
Copyright © 2011-2022 走看看