原创: 刘欣 码农翻身 2016-11-07
本文续《TCP/IP之大明内阁》, 不了解背景的同学可以先看看上一篇文章, 当然这篇也是《TCP/IP之大明邮差》的前传, 主要讲一讲可靠性传输的原理。袁崇焕奉圣旨进京,也被迫带来了他的心肝宝贝幻月宝镜。
他一进京,顾上休息, 立刻就先去拜见曾经举荐提报自己的恩师孙承宗, 看到自己的爱将风尘仆仆的赶来,虽然心疼, 稍事寒暄过后,还是立刻问起了怎么用幻月宝镜实现可靠传输的问题。
袁崇焕道: “老师有所不知, 这幻月宝镜虽好,但是如果没有失败重传的方法,一切都是白搭。 关外的环境比关内更加恶劣, 除了强盗野兽,还有飘忽不定的清军骑兵,随时打劫你。 ”
“确实是实情, 老夫当年巡视辽东的时候也看到了, 那你发出去物资以后, 是不是要等待对方的回复确认啊?”
“老师说的对,这也是我们刚开始的设想, 请看这张状态图:”

“状态图是什么东西? 你自己弄的?”

“不, 这是荷兰红毛送红衣大炮的时候教我画的, 他们那边的人很擅长搞这种玩意, 说是‘科学’, 这张图的第一个状态是‘等待发送数据’, 然后发送分组数据进入了第二个状态‘等待反馈’, 此时如果对方发来了反馈说‘收到了’, 那就回到第一个状态, 否则, 重发之前的数据”
“荷兰红毛还是挺厉害的, 这是个描述系统的好方法啊,比纯用我们汉字好多了。 ”
“是的老师, 这个状态图的问题就是:如果对方发回的反馈损坏了改怎么办?”
孙承宗道:“有道理, 如果反馈损坏了, 发送方将无法理解接收方是否收到数据分组, 只好重新发送上一个分组, 但是从接收方来看, 没法区分这个分组是新的还是一次重传, 这就麻烦了。 ”
“所以我和满桂、祖大寿他们商量了下, 我们采用给数据编号的办法来解决这个问题, 第一次发送编号为A的, 然后就等待针对A的反馈, 如果反馈没法识别或者是没收到, 那就重新发送, 如果反馈是‘收到了’, 那就发送分组编号为B的数据。

有个关键问题,  那要是出现了反馈迟迟收不到怎么办, 你肯定不能无限制的等待吧? ”
“老师明鉴, 我们确实遇到了这个问题, 于是就搞了一个沙漏定时器, 针对上面的状态做了改进, 分组一发送就开始计时,如果超时就重新发送同一分组, 像这样:”

孙承宗道:”好复杂啊,老夫这脑子里全是四书五经, 这状态图让人头蒙啊。 “

师生二人正聊着, 下人通报首辅叶大人来了。
同样是老学究的叶首辅看到了袁崇焕画的西洋状态图, 大为吃惊,心想袁崇焕赢得宁远大捷和宁锦大捷,果然是与众不同。
经过袁崇焕连番讲解,叶首辅终于明白了这是怎么回事, 他捻着胡子思忖一下, 马上提出一个问题:“你每次发送一个分组都得等待, 多慢啊, 能不能连续发送?”
孙承宗和袁崇焕对视一眼, 心想果然姜还是老的辣。
袁崇焕道:“叶大人高瞻远瞩, 思虑缜密,属下佩服。 这个问题我们把我们困住了很久才想出一个办法, 这个方法约定,发送方可以连续的发送分组,但是有限制数量,例如只能连续发送4个, 我们称之为窗口, 发送窗口满了就不能发了,需要等待接收方的确认, 当确认来了以后才能继续发送, 向前移动窗口 。”

这又是个什么图? ” 叶首辅问到。
“这也是红毛们教我的,可以称为交互图, 大人请看, 我们发送到分组4的时候, 窗口满了, 就停止发送, 只有等到分组1的确认(acknowledge, 简称ACK)来了以后,才继续发送下一个分组。”
孙承宗道: “我看到分组3在发送当中丢失了, 超时后重新发送, 可是接收端明明收到了分组4, 5, 6还要丢弃啊。 ”
袁崇焕道:“这个办法是满桂最先提出的, 他是一个粗人, 想出的方法也很粗暴, 非常依赖幻月宝镜,  把失败分组及其以后的全部重新发送, 的确浪费。”
(码农翻身注: 这叫做回退N步协议)
叶首辅道:“很明显, 你们得选择性的重传那些丢失的分组。”
“大人说的对, 请看这个图:”
这个图中只发送丢失的分组3, 在接收端会暂时缓存分组4,5,6, 这样就省了很多事了”
(码农翻身注:这叫做选择性重传)
叶首辅一拍大腿道: “好 !应该不错了, 我们就用这种办法来建立大明的可靠传输网络吧“
接着他又郑重的补充到 : “ 二位要注意, 这些失败重传的方法,是我们三人的秘密, 绝不能让魏阉党知道, 要不然他又要去找皇上邀功请赏了。”
(码农翻身注:这只是可靠性传输的原则, 实际的TCP协议要更复杂,需要考虑双向的全双工通信,想了解详情的可以看《TCP/IP详解 卷1》)
其他相关的文章:TCP/IP之大明内阁
TCP/IP之大明邮差
我是一个网卡
我是一个路由器

TCP/IP之蓟辽督师 转相关推荐

  1. TCP/IP之蓟辽督师

    TCP/IP之蓟辽督师 真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解. 本文源地址:TCP/IP之蓟辽督师 本文续&l ...

  2. TCP/IP 之 蓟辽督师

    本文续<TCP/IP之大明内阁>, 不了解背景的同学可以先看看上一篇文章, 当然这篇也是<TCP/IP之大明邮差>的前传, 主要讲一讲可靠性传输的原理. 袁崇焕奉圣旨进京,也被 ...

  3. TCP/IP 之蓟辽督师

    本文续<TCP/IP之大明内阁>, 不了解背景的同学可以先看看上一篇文章, 当然这篇也是<TCP/IP之大明邮差>的前传, 主要讲一讲可靠性传输的原理. 袁崇焕奉圣旨进京,也被 ...

  4. 码农翻身之大话编程篇:8 TCP/IP之蓟辽督师

    袁崇焕奉圣旨进京,也被迫带来了他的心肝宝贝幻月宝镜.他一进京,顾上休息, 立刻就先去拜见曾经举荐提报自己的恩师孙承宗, 看到自己的爱将风尘仆仆的赶来,虽然心疼, 稍事寒暄过后,还是立刻问起了怎么用幻月 ...

  5. 信息系统项目管理师教程(第3版)- OSI七层模型TCP/IP四层模型对应网络协议

    一.OSI七层模型: 1.应用层 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 2.表示层 数据的表示. ...

  6. IPv6时代的《TCP/IP详解》!

    点击我,试试看吧!                                                    点击我,试试看吧!                              ...

  7. TCP/IP常见英文缩写释义

    为什么80%的码农都做不了架构师?>>>    TCP (传输控制协议) - 应用程序之间通信  transmission control protocol UDP (用户数据包协议 ...

  8. TCP/IP之大明内阁---协议的制定

    个人感言:真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解.感谢"码农翻身" 公共号,感谢你们的成果, ...

  9. 计算机网络原理梳理丨清晰认识 TCP/IP 协议,图解秒懂!

    作者:MobMsg,资深全端工程师一枚,架构师社区合伙人! TCP/IP 协议族 Internet 的核心协议就是 TCP/IP,广泛应用于局域网和广域网,目前已有20+年发展史,是现用国际通行标准. ...

最新文章

  1. zqgame《每日一言》
  2. 试用了一下sourceMonitor有点不知所云..
  3. tensorflow随笔-条件语句-tf.case
  4. AI机器人不认同人类语言 产生自己的交流方式 Facebook关闭了他们的人工智能系统...
  5. kubelet内存异常分析
  6. Java5、Java6、Java7的新特性
  7. docker中使用git_如何在 Docker 中使用 Docker
  8. 根据用户名或者厂商名称生成相关的弱口令
  9. python 在线编程 实现_Python进阶开发之网络编程,socket实现在线聊天机器人
  10. VS2015 更换exe的图标
  11. 云账房签约葡萄城,开启 “在线Excel+智能财税” 时代
  12. 北约CCDCOE:国家网络空间安全框架
  13. python import from区别,python中import与from方法总结
  14. 文件转换base64流
  15. 计算机四级等级考试网络工程师知识点-【操作系统原理+计算机网络两科完整】
  16. halcon教程之VisionPro软件和Halcon软件 的详细对比
  17. 用jq实现轮播图片的效果
  18. 无人机倾斜摄影详解,三维实景建模应用
  19. CentOS7关于hostname
  20. JavaScript中this的指向 详解

热门文章

  1. Codewars(3)
  2. layui select 选中改变字体颜色 正常为绿色,不正常为红色
  3. ctf网络安全大赛web
  4. 初学编程者必知的五个网站
  5. 嵌入式设计,硬件和软件哪个重要?
  6. 安装libjpeg库后提示libjpeg.so.8不存在(linux环境)
  7. 仿微信 QQ 图片选择器
  8. 笔记 - JavaScript - 超哥视频
  9. vanilla_使用Vanilla JavaScript构建Cookie库
  10. SEO搜索引擎优化方式