TCP的流量控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCP的流量控制
TCP(Transmission Control Protocol 传输控制协议)是一种面向连 接的、可靠的、基于字节流的传输层通信协议。 一般来说,我们总是希望数据传输的更快一些,但如果发送方把 数据发送的过快,接收方就可能来不及接收,这就会造成数据的 流失。 流量控制:让发送方的发送速率不要太快,要让接受方来得及接 收。
滑动窗口的一个缺点

考虑一种特殊的情况,就是接收方若没有缓存足够使用,就会发送零窗口大 小的报文,此时发送放将发送窗口设置为0,停止发送数据。之后接收方有 足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失的,那 么发送方的发送窗口就一直为零导致死锁。

解决这个问题,TCP为每一个连接设置一个持续计时器(persistence timer)。 只要TCP的一方收到对方的零窗口通知,就启动该计时器,周期性的发送一 个零窗口探测报文段。对方就在确认这个报文的时候给出现在的窗口大小 (注意:TCP规定,即使设置为零窗口,也必须接以下几种报文段:零窗口 探测报文段、确认报文段和携带紧急数据的报文段)。
利用滑动窗口实现流量控制

原理: 在TCP包头中有一个16位的window字段,用来表 示接收方的接收缓冲区能接收多少数据,发送方一次不 能发送超过该值的数据,这样起到控制流量的作用。 TCP的两端都有发送/接收缓存和发送/接收窗口。TCP的 缓存是一个循环队列,其中发送窗口可以用3个指针表示。 而发送窗口的大小受TCP数据报中窗口大小的影响,TCP 数据报中的窗口大小是接收端通知发送端其还可以接收 多少数据,所以发送窗口根据接收的的窗口大小的值动 态变化
Biblioteka Baidu
案例
设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 400 ”(这里 的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收 窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。TCP连接建立时的窗口协 商过程在图中没有显示出来。再设每一个报文段为100字节长,而数据报文段序号的 初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。
传输效率及Nagle算法
可以用不同的机制来控制TCP报文段的发送时机: 1. TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达 到MSS字节时,就组装成一个TCP报文段发送出去。 2. 由发送方的应用进程指明要求发送报文段,即TCP支持的推送( push )操作。 3. 发送方的一个计时器期限到了,这时就把已有的缓存数据装入报文段(但长度 不能超过MSS)发送出去。 数据传输使用Nagle算法,Nagle算法很简单,就是规定一个TCP连接最多只 能有一个未被确认的未完成的小分组。在该分组的确认到达之前不能发送其他 的小分组。 但是也要考虑另一个问题,叫做糊涂窗口综合症。当接收方的缓存已满的时 候,交互应用程序一次只从缓存中读取一个字节(这时候缓存中腾出一个字 节),然后向发送方发送确认信息,此时发送方再发送一个字节(收到的窗口 大小为1),这样网络的效率很低。 素以要解决这个问题,可以让接收方等待一段时间,使得接收缓存已有最够的 空间容纳一个最长报文段,或者等到接收缓存已有一半的空间。只要这两种情 况出现一种,就发送确认报文,同时发送方可以把数据积累成大的报文段发送。
相关文档
最新文档