TCP的三个窗口:发送窗口swnd、接收窗口rwnd、拥塞窗口cwnd

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在文章TCP滑动窗口协议与流量控制中我们已经理解了滑动窗口发送窗口swnd和接收窗口rwnd。

在发送端TCP通过发送窗口提高分组报文的传输效率同时TCP也要求发送端维护一个接收窗口rwnd以提供流量控制注意接收窗口的值是由接收方计算出来并通报给发送方后让发送方用来计算出接收窗口后主动做流量发送控制的。

因为TCP是全双工通信所以两边的主机同时都是发送方和接收方所以两边的主机都同时维护了自己的滑动窗口发送窗口swnd和接收窗口rwnd。注意在不考虑拥塞控制等算法的情况下发送窗口swnd和接收窗口rwnd就会退化成完全相等的同一个窗口。

通常TCP有三个窗口接收窗口 rwnd (receive window)发送窗口swnd(send window)拥塞窗口cwnd(congestion window)。

    • 接收窗口 rwnd (receive window)

接收窗口rwnd使用图中的三个变量计算而来即下图的下半个图的蓝色部分

1应用程序已经读走的最后一个分组报文的最后一个字节序号定义为LastByteRead

2从网络中收到的最后一个分组报文的最后一个字节序号定义为LastByteRecv

3提供的窗口定义为RecvBuffer

接收方的接收窗口rwnd = RecvBuffer - [LastByteRecv - LastByteRead]。

    • 发送窗口swnd(send window)

发送窗口swnd和rwnd有类似的计算方法是指上图中上半个图里的蓝色部分。

1未收到确认的第一个分组报文的前一个分组的最后一个字节序号定义为LastByteAcked

2下一个可发送的分组报文的前一个报文的最后一个字节序号定义为LastByteSent

3提供的窗口定义为SendBuffer

发送方的窗口swnd的初始值为由拥塞窗口cwnd和rwnd两者中取小值swnd是一定会小于等于rwnd, 然后系统会用 LastByteSent - LastByteAcked <= rwnd来控制流量的发送。

在网络足够好即cwnd足够大的情况下, 我们可以简单的认为 swnd = rwnd - (LastByteSent - LastByteAcked) , 真实可用的发送大小还取决于剩余可用发送缓冲区SendBuffer - (LastByteSent - LastByteAcked)的大小。

在接收方能力足够强即rwnd足够大的情况下swnd <= cwnd。

这个告诉我们在发送方发送能力足够大的情况下网络的吞量取决于网络状况cwnd和接收方的接收能力rwndcwnd和rwnd二个值都是随着网络的状态和接收方接收能力的变化而动态变化的。

    • 拥塞窗口cwnd(congestion window)。

拥塞窗口是TCP中设计的一种用于避免网络拥塞发生的机制。拥塞窗口的大小取决于网络的拥塞程度并且动态变化。发送方通过保证自己的发送窗口小于等于拥塞窗口以避免网络拥塞的发生。

发送方控制拥塞窗口的原则是网络没有出现拥塞拥塞窗口就再增大一些以便把更多的分组发送出去。只要网络一出现拥塞拥塞窗口就减少一些以减少注入到网络中的分组数避免网络拥塞。

cwnd是随着网络状态的变化面变化的它的大小与TCP慢启动门限拥塞避免算法快重传算法和快恢复算法相关具体cwnd的产生算法我们可以再开篇来讲。

通过本文大家可以理解TCP的这三个窗口以及TCP如何通过这三个窗口进行流程控制。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“TCP的三个窗口:发送窗口swnd、接收窗口rwnd、拥塞窗口cwnd” 的相关文章