前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >白话TCP流量控制

白话TCP流量控制

作者头像
用户1260737
发布2018-08-31 17:55:19
1.4K0
发布2018-08-31 17:55:19
举报
文章被收录于专栏:趣谈编程趣谈编程

来源:CSDN

作者:哈罗

涛声依旧做了部分修改,文末左下角可点击阅读原文

上篇(一个故事读懂TCP拥塞控制)讲的是拥塞控制,这篇讲流量控制。还是以运输粮食为场景。

虽然运输的拥塞控制能够在运输效率和拥塞之间达到平衡,但是运输粮食的整体效率还受一个关键因数影响,那就是对岸西村粮食的卸货能力。

假设粮食运送到对岸后,要卸放在一个仓库里,随后被运往其他地方。如果运输的太快,仓库载货能力有限,粮食又没有及时被消耗,工人们只好等待仓库腾出地方来卸下新的粮食。

显然这样会影响这个工程的效率(粮食包裹迟迟得不到处理导致重传浪费资源和加大网络负荷)

为了防止这种情况的出现,使双方的处理速率得到一个平衡,工人们的智慧发挥出来了。他们在确认船只里给出了当前仓库的容量,以便让发送方东村知道这边的具体情况,采取一些措施,从而控制速率,达到平衡。

从上图可以看出,西村对东村进行了两次流量控制,通过这种方式,让发送方的发送速率不要太快,以便接收方来得及接收。达到了一种平衡。

仓库的容量就用船上的一面B旗帜的数字来代表吧,容量为零就写一个0.

按照这种方式运输粮食一直相安无事。可是有一天却发生了情况,导致运输中断了。这是怎么回事呢?工人同心协力,组织得当,很快对岸仓库就被塞满,返回的船只上B面旗帜都书写为0。

这样东村工人只能干等着,等西村有人来通知仓库有空余的地方。

过了一段时间,西村的仓库有一些空余的地方,于是派人通知东村的人可以发货了,但是那天水面实在太堵了,西村跑腿工人后来竟然发生事故沉船了。于是东村人一直等待西村有人通报那边的仓库的空闲容量,同时西村一直等待着东村人发货。就这样互相等待着。

为了防止该类事件再次发送,工人们又规定,如果被告知对方仓库已满,就开启一个闹钟,时间到了就派一只小船前去打听对方仓库的情况。

西村收到见到这个探查的人,会发送一个答复给东村,如果仓库还是没有空闲地方,则再次发送一个B旗帜为0的信号,如果有空闲的地方,则发送一下当前有多少空闲地方。

这样即使西村派过来的跑腿工人不幸丢失,也能保证运输继续下去。

上述场景中B面旗帜就代表TCP协议头中的窗口大小字段:

另外上面场景中的闹钟对应TCP协议栈中的持续定时器(persist timer),他的作用是,发送方只要接收到了0窗口通告,就开启该定时器,周期性的向接收方发送1字节的0窗口探测报文。

-END-

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-13,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 趣谈编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com