真正的知识是深刻浅出的,码农翻身” 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给咱们,让咱们更好地理解。html
本文源地址:TCP/IP之蓟辽督师编程
本文续《TCP/IP之大明内阁》,不了解背景的同窗能够先看看上一篇文章,固然这篇也是《TCP/IP之大明邮差》的前传,主要讲一讲可靠性传输的原理。
袁崇焕奉圣旨进京,也被迫带来了他的心肝宝贝幻月宝镜。
他一进京,顾不上休息,马上就先去拜见曾经举荐提报本身的恩师孙承宗。孙承宗看到本身的爱将风尘仆仆的赶来,虽然心疼,稍事寒暄事后,仍是马上问起了怎么用幻月宝镜实现可靠传输的问题。
袁崇焕道:“老师有所不知,这幻月宝镜虽好,可是若是没有失败重传的方法,一切都是白搭。关外的环境比关内更加恶劣,除了强盗野兽,还有飘忽不定的清军骑兵,随时打劫你。”
“确实是实情,老夫当年巡视辽东的时候也看到了,那你发出去物资之后,是否是要等待对方的回复确认啊?”
“老师说的对,这也是咱们刚开始的设想,请看这张状态图:”缓存
“状态图是什么东西?你本身弄的?”网络
“不,这是荷兰红毛送红衣大炮的时候教我画的,他们那边的人很擅长搞这种玩意,说是‘科学’。这张图的第一个状态是‘等待发送数据’, 而后发送分组数据进入了第二个状态‘等待反馈’,此时若是对方发来了反馈说‘收到了’,那就回到第一个状态。不然,重发以前的数据。”
“荷兰红毛仍是挺厉害的,这是个描述系统的好方法啊,比纯用咱们汉字好多了。”
“是的老师,这个状态图的问题就是:若是对方发回的反馈损坏了该怎么办?”
孙承宗道:“有道理,若是反馈损坏了,发送方将没法理解接收方是否收到数据分组,只好从新发送上一个分组,可是从接收方来看,无法区分这个分组是新的仍是一次重传,这就麻烦了。”架构
“因此我和满桂、祖大寿他们商量了下。咱们采用给数据编号的办法来解决这个问题,第一次发送编号为A的,而后就等待针对A的反馈。若是反馈无法识别或者是没收到,那就从新发送;若是反馈是‘收到了’,那就发送分组编号为B的数据。”spa
“有个关键问题,那要是出现了反馈迟迟收不到怎么办,你确定不能无限制的等待吧?”code
“老师明鉴,咱们确实遇到了这个问题,因而就搞了一个沙漏定时器,针对上面的状态作了改进。分组一发送就开始计时,若是超时就从新发送同一分组。像这样:”htm
孙承宗道:”好复杂啊,老夫这脑子里全是四书五经, 这状态图让人头蒙啊。 “blog
师生二人正聊着,下人通报首辅叶大人来了。
一样是老学究的叶首辅看到了袁崇焕画的西洋状态图,大为吃惊,心想袁崇焕赢得宁远大捷和宁锦大捷,果真是不同凡响。
通过袁崇焕连番讲解,叶首辅终于明白了这是怎么回事。他捻着胡子思忖一下,立刻提出一个问题:“你每次发送一个分组都得等待,多慢啊!能不能连续发送?”
孙承宗和袁崇焕对视一眼,心想果真姜仍是老的辣。get
袁崇焕道:“叶大人高瞻远瞩,思虑缜密,属下佩服。这个问题咱们把咱们困住了好久才想出一个办法,这个方法约定,发送方能够连续的发送分组,可是有限制数量。例如只能连续发送4个,咱们称之为窗口,发送窗口满了就不能发了,须要等待接收方的确认。当确认来了之后才能继续发送,向前移动窗口。”
“这又是个什么图?” 叶首辅问到。
“这也是红毛们教个人,能够称为交互图,大人请看,咱们发送到分组4的时候,窗口满了,就中止发送,只有等到分组1的确认(acknowledge, 简称ACK)来了之后,才继续发送下一个分组。”
孙承宗道:“我看到分组3在发送当中丢失了,超时后从新发送,但是接收端明明收到了分组四、五、6还要丢弃啊。”
袁崇焕道:“这个办法是满桂最早提出的,他是一个粗人,想出的方法也很粗暴,很是依赖幻月宝镜,把失败分组及其之后的所有从新发送,的确浪费。”---回退N步协议
叶首辅道:“很明显,大家得选择性的重传那些丢失的分组。”
“大人说的对,请看这个图:”
“这个图中只发送丢失的分组3,在接收端会暂时缓存分组四、五、6,这样就省了不少事了。”---选择性重传
叶首辅一拍大腿道:“好!应该不错了,咱们就用这种办法来创建大明的可靠传输网络吧。”
接着他又郑重的补充到:“ 二位要注意,这些失败重传的方法,是咱们三人的秘密,毫不能让魏阉党知道,要否则他又要去找皇上邀功请赏了。”
(码农翻身注:这只是可靠性传输的原则,实际的TCP协议要更复杂,须要考虑双向的全双工通讯,想了解详情的能够看《TCP/IP详解 卷1》)
“码农翻身” 公共号 : 由工做15年的前IBM架构师建立,分享编程和职场的经验教训。
长按二维码, 关注码农翻身