TCP/IP之蓟辽督师 转
他一进京,顾上休息, 立刻就先去拜见曾经举荐提报自己的恩师孙承宗, 看到自己的爱将风尘仆仆的赶来,虽然心疼, 稍事寒暄过后,还是立刻问起了怎么用幻月宝镜实现可靠传输的问题。
袁崇焕道: “老师有所不知, 这幻月宝镜虽好,但是如果没有失败重传的方法,一切都是白搭。 关外的环境比关内更加恶劣, 除了强盗野兽,还有飘忽不定的清军骑兵,随时打劫你。 ”
“确实是实情, 老夫当年巡视辽东的时候也看到了, 那你发出去物资以后, 是不是要等待对方的回复确认啊?”
“老师说的对,这也是我们刚开始的设想, 请看这张状态图:”
“状态图是什么东西? 你自己弄的?”
“不, 这是荷兰红毛送红衣大炮的时候教我画的, 他们那边的人很擅长搞这种玩意, 说是‘科学’, 这张图的第一个状态是‘等待发送数据’, 然后发送分组数据进入了第二个状态‘等待反馈’, 此时如果对方发来了反馈说‘收到了’, 那就回到第一个状态, 否则, 重发之前的数据”
“荷兰红毛还是挺厉害的, 这是个描述系统的好方法啊,比纯用我们汉字好多了。 ”
“是的老师, 这个状态图的问题就是:如果对方发回的反馈损坏了改怎么办?”
孙承宗道:“有道理, 如果反馈损坏了, 发送方将无法理解接收方是否收到数据分组, 只好重新发送上一个分组, 但是从接收方来看, 没法区分这个分组是新的还是一次重传, 这就麻烦了。 ”
“所以我和满桂、祖大寿他们商量了下, 我们采用给数据编号的办法来解决这个问题, 第一次发送编号为A的, 然后就等待针对A的反馈, 如果反馈没法识别或者是没收到, 那就重新发送, 如果反馈是‘收到了’, 那就发送分组编号为B的数据。
“老师明鉴, 我们确实遇到了这个问题, 于是就搞了一个沙漏定时器, 针对上面的状态做了改进, 分组一发送就开始计时,如果超时就重新发送同一分组, 像这样:”
孙承宗道:”好复杂啊,老夫这脑子里全是四书五经, 这状态图让人头蒙啊。 “
师生二人正聊着, 下人通报首辅叶大人来了。
同样是老学究的叶首辅看到了袁崇焕画的西洋状态图, 大为吃惊,心想袁崇焕赢得宁远大捷和宁锦大捷,果然是与众不同。
经过袁崇焕连番讲解,叶首辅终于明白了这是怎么回事, 他捻着胡子思忖一下, 马上提出一个问题:“你每次发送一个分组都得等待, 多慢啊, 能不能连续发送?”
孙承宗和袁崇焕对视一眼, 心想果然姜还是老的辣。
袁崇焕道:“叶大人高瞻远瞩, 思虑缜密,属下佩服。 这个问题我们把我们困住了很久才想出一个办法, 这个方法约定,发送方可以连续的发送分组,但是有限制数量,例如只能连续发送4个, 我们称之为窗口, 发送窗口满了就不能发了,需要等待接收方的确认, 当确认来了以后才能继续发送, 向前移动窗口 。”
“这也是红毛们教我的,可以称为交互图, 大人请看, 我们发送到分组4的时候, 窗口满了, 就停止发送, 只有等到分组1的确认(acknowledge, 简称ACK)来了以后,才继续发送下一个分组。”
孙承宗道: “我看到分组3在发送当中丢失了, 超时后重新发送, 可是接收端明明收到了分组4, 5, 6还要丢弃啊。 ”
袁崇焕道:“这个办法是满桂最先提出的, 他是一个粗人, 想出的方法也很粗暴, 非常依赖幻月宝镜, 把失败分组及其以后的全部重新发送, 的确浪费。”
(码农翻身注: 这叫做回退N步协议)
叶首辅道:“很明显, 你们得选择性的重传那些丢失的分组。”
“大人说的对, 请看这个图:”
(码农翻身注:这叫做选择性重传)
叶首辅一拍大腿道: “好 !应该不错了, 我们就用这种办法来建立大明的可靠传输网络吧“
接着他又郑重的补充到 : “ 二位要注意, 这些失败重传的方法,是我们三人的秘密, 绝不能让魏阉党知道, 要不然他又要去找皇上邀功请赏了。”
(码农翻身注:这只是可靠性传输的原则, 实际的TCP协议要更复杂,需要考虑双向的全双工通信,想了解详情的可以看《TCP/IP详解 卷1》)
其他相关的文章:TCP/IP之大明内阁
TCP/IP之蓟辽督师 转的更多相关文章
- TCP/IP之蓟辽督师
真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解. 本文源地址:TCP/IP之蓟辽督师 本文续<TCP/IP之大明内 ...
- TCP/IP之大明内阁---协议的制定
个人感言:真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解.感谢"码农翻身" 公共号,感谢你们的成果, ...
- TCP/IP 之大明王朝邮差
本系列文章全部摘选自"码农翻身"公众号,仅供个人学习和分享之用.文章会给出原文的链接地址,希望不会涉及到版权问题. 个人感言:真正的知识是深入浅出的,码农翻身" 公共号将 ...
- WIZnet通过启动在线培训活动:计算机网络TCP/IP协议而事实上,现在的方法
为了给大家营造更好的学习环境.WIZnet特此举办第一期培训活动,由WIZnet一线project师为你分享最最前沿和有用的网络技术知识,帮你解答开发过程中的疑问.欢迎前来交流.名额有限(20名满), ...
- 牛客网Java刷题知识点之OSI七层参考模型 和 TCP/IP五层参考模型
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- TCP/IP协议 (图解+秒懂+史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 白话TCP/IP原理
TCP/IP(Transmission-Control-Protocol/Internet-Protocol),中文译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议 ...
- TCP/IP基础
TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...
- TCP/IP之TCP_NODELAY与TCP_CORK
TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...
随机推荐
- Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-1-举例说明
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用 Compose 通过一个配置文件来管理多个Docker容器,在配置文件中 ...
- CentOS 6.5安装配置NFS服务器
OS:centos 6.5 服务端:10.1.11.201 客户端:10.1.11.202 10.1.11.203 10.1.11.204 1.服务端的配置 安装必须的yum包: yum -y ins ...
- WorldWind源码剖析系列:四叉树瓦片类QuadTile
四叉树瓦片类QuadTile提供了对影像和地形数据的四叉树访问模型.该类的类图如下. 四叉树瓦片类QuadTile提供的主要字段.属性和方法简要描述如下: public QuadTileSet Qua ...
- JAVA框架 Mybaits 动态sql
动态sql 一:if标签使用: 我们在查询的时候,有时候由于查询的条件的不确定性,导致where的后面的条件的不同,这时候就需要我们进行where后面的条件进行拼接. Mapper配置文件: < ...
- Android 一s个相对完整的自动升级功能实现代码
由于项目的需要最近做了一个关于Android自动升级的功能,下面将贴出Android手机客户端的完整代码.这段代码参考别的代码居多,由于不满足需求,所以自己仅仅改了一些需要变动的内容,其他功能都是按照 ...
- HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- POJ 2367 Genealogical tree 拓扑排序入门题
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8003 Accepted: 5184 ...
- 几个PHP读取整个文件的函数readfile()、fpassthru()和file()
2.7.4 读取整个文件:readfile().fpassthru()和file()除了可以每次读取文件一行外,还可以一次读取整个文件.PHP提供了4种不同的方式来读取整个文件.第一种方式是rea ...
- Linux 内核开发 - 内核定时器
时间差的度量 系统的定时器硬件以固定的频率产生时钟中断,产生始终中断的间隔以HZ 常量来决定,通常在50~1200之间,x86默认是1000.HZ能够依据不同的内核来配置. Linux 採用jiffi ...
- POJ3278&&1426&&3126&&3087&&3414
接上次的,标签是BFS专题 其实无论是Deepth还是Breadth都是Search 3278 又是撸过的题目 1426 找一个十进制数(我刚开始看样例以为是二进制数),使得它每一位上都是1或0,且是 ...