码农翻身之大话编程篇:6 TCP/IP 之 大明王朝邮差

        大明天启四年,清晨。
        天色刚蒙蒙亮,我就赶着装满货物的马车来到了南城门,这里是集中处理货物的地方,一对一对的马车都来到这里,城头的士兵带着头盔,身披盔甲,手持长枪,虎视眈眈地注视着下面的动静。
        城门口的大棚里乱哄哄的,时一群人围在一起赌钱,这些家伙都穿着同样的衣服,前胸后背写着“TCP邮差”。我知道这就是我要找的人,他会把我的货物发送出去。我下了车,在大棚里四处看看,发现了一个无聊地坐着肚子喝闷酒的小伙子。“邮差小哥,帮我把这些货发了呗”。
        “你从哪儿来,发往哪去?”
        我赶紧拿出准备好的地址说:“我住在城北拐街224号,要发一车货物到内乡县衙”
        “内乡县衙有很多衙门,你要发的是哪个部门啊?”
        “出发的时候老板告诉我,发到80号门”
        “走吧,咱们去前面。”
        大棚的前面时一大批开阔地,可能我们来的比较早,现在只有我,邮差小哥,当然还有我的马车。
        “你等等,我先给内乡县衙建立一个连接”邮差吹了个口哨,有一匹马跑了过来,他拿起毛笔写了一封信:“县衙县衙,我是京城,我想和你建立连接,序号1024,收到回话。”信封上写着:发货地——京城北拐街224号,收货地——内乡县衙,80号门。
    然后把这个放到了马背上的褡裢里,拍了拍马屁股让马走了。
        过了两个小时,那匹马回来了,邮差掏出了马背上的信,写着:“京城京城,我收到了你的心,你的信里边有个序号1024对不对?我同意建立连接,我这边序号是2048。”
        邮差喜形于色:“看看,连接快要建立了,我再给他们发一封信就行了”,说着他又写到:“县衙县衙,我收到你的确认信了,也看到了你的序号2048,我开始发货了”
        我问他:“这就是链接吗?也没看见你扯一条线连起来啊?”
        “这你就不懂了吧,这就是TCP连接,是虚拟的,连接的状态信息并不会在路上保存,相反,连接的状态信息是在两端维持的,也就是在我这里和县衙那里一起维持的。”
        “那你们为啥要发三封信呢?”
        “这就是三次握手啊,我给你分析一下,这三次握手主要是为了验证我和县衙的发信,收信能力都没有问题,这样就能证明链接是通的,可以正式发货了。”
        第一次握手:京城发现,县衙收到了,此时县衙就会明白:京城的发信能力和自己的收信能力都没有问题。
        第二次握手:县衙握手,京城收到了,此时京城就会明白:县衙的发信和收信都是没有问题的,否则不会受到他的回信,但是县衙并不知道自己的发信功能如何,因为没有收到任何回执。所以需要进行第三次握手。
        第三次握手:京城发信,县衙收到,此时京城就已经确认双方的收发信都是没有问题的,这次回应的目的仅仅是消除县衙对自己的发信和京城的收信功能的不信任而已。
        说实在的,我有点晕,邮差说:“你多多琢磨就明白了。”
        我问他:“你这么辛苦地建立连接,为啥不亲自去送货?”
        “我才不去呢!本朝字新皇登基以来,整天像木匠一样做木工,不理朝政,导致民不聊生,大片田地荒芜,抢到,野兽横行,早就没有人冒着风险去送货了。所以内阁那帮大臣们想了个照,修建四通八达的官道,让一些生出去送货,即使被吃掉也没啥损失”
        “那这些吗怎么知道把我的货送到哪去啊?”
        “不用担心,他们都是经过训练的,会沿着官道走,在每一个岔路口朝廷会修建一个驿站,骂累了可以吃草喝水休息,更关键的是,每个驿站的衙役都会看我写的心,他们知道路,会把马领到一个新的正确的官道上继续走,最终就能到达内乡县衙,大家给这些驿站起了个别名,叫路由器”
        “万一马跑丢了,或者被老虎吃掉了,到不了或者回不来怎么办?”
        “那就是我们TCP邮差要干的事情了,你马上就会看到,我来看看你的货,哎呀,你这个柜子太大了,一匹马拖不走,得分成小包裹,一个一个运。”
        我没办法,只好把大货物拆开,分成小包裹。“给每个包裹编个号吧,这样到了县衙他们就能组装起来,原样恢复了。”
        我突然想到一个严重问题:“万一马被呛到抢走了,那我这柜子一个腿岂不是就没有了?”
        邮差见怪不怪:“没办法,内阁的打人说了,这种情况就重新发一个包裹。”我心头有一万匹草泥马奔腾而过,这帮人还真是站着说话不腰疼啊,万一柜子腿丢了,我还得重做啊。
        邮差把包裹按照编号百城一列,1,2,3.。。。10,一共十个包裹。“按照规定我们每次最多发3个包裹,按照序号发,先发1,2,3号包裹”邮差说着叫来三匹马,撞上或,马一溜烟儿跑了。我在那里提心吊胆的等着,生怕一个包裹丢了。看看我怎么知道包裹是不是到了县衙呢?
        邮差似乎看出了我的心思,从怀里掏出一个沙漏说:“如果漏完了,县衙还没给咱们确认,那就是丢了,只有重发了。”
        过了一个时辰,我期盼的县衙的马终于到了,里边的信说:“1号包裹已经收到了”
        “好了,已经收到了1号包裹,咱们可以再发一个了”,说着叫来一匹马,把4号包裹发了出去。
        我先在有点理解了,邮差的做法是每次只保证有三个包裹发出且没有确认。
        又过了一会儿,县衙一下子来了三匹马,带了三个包裹的确认。
        “看来你的运气不错,我把567发出去”说完他把沙漏掉了个个,重新开始计时。5号包裹很快来了,他又把8号发了出去,这样已经发送但是还没有确认的包裹还是3个。
        现在678号包裹都已经发出去了,可是6号包裹的确认迟迟不来,我心急如焚。正在此时,沙漏漏完了,我不安地向邮差看去。他倒是满不在乎:“哎呀,超时了,有可能6号的马被吃了,县衙没收到。”
        “那怎么办啊?”我焦急地问。
        “我们只能从6号开始重新发送了,6号恰好是个腿儿,回去告诉你老板,再做个柜子腿吧,一定要保证和之前发出去的一模一样。”
        “那78号呢/收到没有”
        “我们现在还不知道,如果收到了,他们会暂时存下来。如果没收到,那还得像6号一样,继续重发”
        我感觉我的忍耐力已经到了极限,真想跳起来揍邮差一顿。冷静下来,我想了想说:“不对,你为什么已下发了3个包裹,你不能发一个等着缺人吗?我要告你去。”
        邮差说:“随便你了,反正你是告不赢的,这是首辅大人确定的,我们用的叫滑动窗口协议,如果窗口N=1,即发一个等着确认一个,那样就太慢了,我这个邮差也不能一直被你赵勇,我们把N设大一点,就是为了能够像流水线一样,一边发包裹,一边收确认,这样快一点。”
        没办法,我只好回去找老板做柜子腿儿,这耽误了很多时间。邮差把6号包裹又发了传出去,在此重新计时。
        6好的确认还是没有收到!7号的也米有收到,但是8号包裹的确认先收到了!邮差说:“嗯,不错,6,7号的确认包裹估计是在路上丢了,没关系,只要县衙说收到了8号,暗含的意思就是67号都已经收到了,要不然他们不会发8号确认的。”
        接下来就是9,10号包裹,这次还行,总算没丢,终于把整个柜子全发出去了。内乡县衙那边也把柜子组装了起来,我的任务总算是完成了。
        后来我得知,县衙其实是收到了6号,知识他们发的确认包裹在路上弄丢了,我们没收到,导致我们重新发了一份。
        我算是明白了所谓的TCP,无非就是在不可靠传输的基础上建立一个可靠地传输,基本上就是失败重发,受苦的还是底层老百姓。
        我付给邮差2两银子作为费用,拉着马车,头也不回地走了。
        只听到邮差在后边喊:“欢迎再来,首辅大人正在研究新的协议呢,下次一定要来试试啊。”
        我没理他,因为我再也不想来这个地方了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值