分享

TCP拥塞算法情景分析

 ~海龙~ 2019-06-01

本节我们看具体tcp场景下,拥塞算法如何计算cwnd和ssthresh。

一个拥塞算法的模型

对于一个tcp连接,如果mss=256,那么cwnd和ssthresh的初始值分别为

Cwnd=256

Ssthresh=65535

每次收到一个ack,cwnd增加一个mss,即增加256,那么cwnd的变化值分别为:

256、768、1024、1280等等。

假如不会发生拥塞,那么cwnd会继续增加,最终cwnd会大于window size,那么发送的流量就按照window size大小为准。

TCP拥塞算法情景分析

Syn报文丢失情景的拥塞算法

TCP拥塞算法情景分析

1、初始化

Cwnd=256

Ssthresh=65535

2、syn丢失,超时重传syn

Ssthresh=2*mss(ssthresh的最小值就是两倍的mss,不能再小了)

Cwnd维持不变,cwnd保持初始化的256

3、收到syn ack

Cwnd和ssthresh维持不变,因为没有发送任何数据,这个ack不是数据的ack,不会更新算法参数

Cwnd=256

Ssthresh=512

数据传送阶段拥塞算法

TCP拥塞算法情景分析

1、发送第一个数据报文,即发送报文1的时候,

Cwnd=256

Ssthresh=512

Cwnd<ssthresh,这个状态处于“慢启动”

2、客户端收到第一个ack(报文2),慢启动cwnd++

Cwnd=512

Ssthresh=512

3、客户端收到第二个ack(报文5),当前仍然处于慢启动状态,cwnd++

Cwnd=768

Ssthresh=512

不再是慢启动状态了。

由于SYN报文丢失,sstrhesh发生了变化(设置为最小值2*mss = 512),所以,这一步就进入了拥塞避免。

而cwnd也不会出现下面所列的递增关系

256、768、1024、1280

4、客户端收到第三个ack(报文8),这个时候已经不在慢启动状态,cwnd按照拥塞避免算法变化

Cwnd = cwnd + (segsize * segsize)/cwnd + segsize/8

Cwnd = 768 + (256*256)/768 + 256/8 = 885

5、客户端收到第四个ack(报文10),拥塞避免

Cwnd = 885 + (256*256)/885 + 256/8 = 991

6、客户端收到第五个ack(报文12),拥塞避免

Cwnd = 991 + (256*256)/991 + 256/8 = 1089

TCP拥塞算法情景分析

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多