客户端与服务器进行数据传输时的TCP窗口与拥塞处理

 1、 滑动窗口的作用

   TCP通过滑动窗口机制检测丢包,并在丢包发生时调整数据传输速率。

  2、滑动窗口如何实现数据传输速率的控制?(即机制)

  滑动窗口利用数据接收端(即服务器端)的窗口大小来控制数据发送端(客户端)发送数据的速率的。

  接受窗口值由数据接收端指定,以字节数形式存储与TCP报文头,并告诉数据发送端有多少数据将会存储在tcp缓冲区。缓冲区就是数据暂时放置的地方,直至交给应用层协议等待处理。因此,发送端每次只能发送Window size(窗口大小)字段指定的数据量。为了使发送端继续传送数据,接收端必须发送确认信息:之前的数据接收到了。同时必须对占用缓冲区的数据进行处理以释放缓存空间。接受窗口的工作过程如下图所示:


上图中,客户端向服务器发送数据,服务器接收窗口是5000字节。客户端发送了2500字节,服务器缓冲区还剩2500字节,之后又发送了2000字节,从而缓冲区只剩500字节。服务器发送确认信息,对缓冲区中的数据进行处理并清空缓冲区。此过程重复进行,客户端又发送300字节和1000字节,服务器缓存减少至1000字节,客户端再次确认数据并处理缓存中的内容。

  调节窗口大小:

  当tcp堆栈收到数据的时候,生成一个确认信息并以回复的方式发送,但是放置在接收端缓存中的数据并不总是立即被处理。当服务器忙于处理多个客户端接收的报文,服务器很有可能因为因为处理缓存而变得缓慢,无法腾出时间接收新的数据,如果没有流控,则可能会丢包和数据损坏。好在,当接收窗口所所设定的速率无法使用服务器正常处理数据时,能够调整接收窗口的大小。通过减少返回给发送端的ACK报文的TCP头窗口大小来实现。如下图:


上图中,服务器初始窗口大小为5000字节。客户端发送2000字节,之后又发送了2000字节,缓冲区中只有1000字节可用。服务器意识到缓冲区正在快速填满,它知道如果数据继续以这样的速率传输,很快会有报文丢失。为了防止报文丢失,服务器发送确认信息给客户端,更新窗口大小为1000字节。结果,客户端减少数据发送,服务器以可以接受的速率处理缓存内容,即保持数据流以稳定的速率传输。

  调整窗口大小在两个方向都是可行的。当服务器能够更加快速的处理报文时,它会发送一个较大窗口的ACK报文。

零窗口暂停数据流:

某些情况下,服务器无法再处理从客户端发送的数据,可能是由于内存不足,处理能力不够,或其他原因。这可能会造成数据被丢弃以及传输暂停,但接受窗口能够帮助减少负面影响。

当上述情况发生时,服务器会发送窗口为0的报文,当客户端收到此报文时,它会暂停所有数据传输,但会保持与服务器的连接以传输探测报文。探测报文在客户端以稳定间隙发送,以查看服务器接收窗口状态。一旦服务器能够再次处理数据,将会返回非零值窗口大小,传输会恢复。


服务器初始接收数据窗口为5000字节大小,从客户端接收4000字节数据之后,服务器负载变得非常繁重,无法继续处理客户端任何数据。服务器于是发送窗口大小值为0的报文。客户端暂停数据传输并发送一个探测报文。探测报文之后,服务器回复以告知客户端现在可以接收数据的报文,以及窗口大小为1000字节。客户端恢复传送数据。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值