美文网首页Linux学习|Gentoo/Arch/FreeBSD
TCP的面向连接和UDP的无连接,一则小故事向你诉说!

TCP的面向连接和UDP的无连接,一则小故事向你诉说!

作者: Pseudoloveryou | 来源:发表于2020-02-19 19:44 被阅读0次

    相传在很久以前,造物主创造了亚当,又过了long。。。long。。。long。。。

            亚当觉得很无聊。于是像造物主提出再找一个伙伴,造物主想了之后,有点道理的样子。

            又不能让他们两个一模一样,不然会混淆在一起,于是。。。。

            这个时候夏娃出来了,亚当对于这个刚出来的人物有点不熟悉,为了适应与要求对方接受自己,

          亚当对夏娃照顾了许久,渐渐的在这个只有两人存在的地方,慢慢他们也有了一些疲倦,他们想出来再去寻求造物主帮助。

              于是,两个人一起大喊:&……%¥%#@#!@#¥%……*。上述省略一万字,

            反正你们也听不懂古人的奥洛夫多得儿语,喊了好久以后,造物主仿佛没有听到一样,这要怎么办呢?

            亚当对夏娃讲:¥%##%……¥。夏娃满脸的害羞回答道:&……##%!#……。这个时候,他醒来了。。。

            对,造物主在这个时候醒来了,他睁开眼的那一刻看到了夏娃和亚当赤裸相对,他觉得这两个小人背叛了      

          他,于是伸手一拍,在夏娃和亚当之间排出了一道深不见底,一眼望不到边的沟壑。以此来告诫他们双方。

            亚当和夏娃分别生活在两个山头,山头之间是万丈深渊,亚当采集野果需要分享给夏娃,如果他们之间有一条

            索道(物理连接),野果可以顺着索道滑到夏娃那一边,那就没有车小胖什么事了。

    事实上山头之间没有索道,但是亚当何等聪明,于是他想出了一个方法,假设亚当需要给夏娃10个野果,否则她会饿死。

    连接建立

    亚当对着夏娃大喊:爱妃,你听得到吗?

    夏娃回应:孩他爹,我听得到!

    亚当接着喊:那好,我扔果子给你吃,你接到果子就喊一声,一共十个。

    运送货物

    于是亚当开始扔第一个,夏娃喊收到了一个。

    亚当扔第二个,夏娃喊收到两个。

    超时重传 ( timeout retransmit)

    亚当扔第三个,可是夏娃迟迟没有回音,亚当意识到可能果子落到悬崖了,于是重新扔,夏娃喊收到第三个。

    Advertised window size = 0

    于是亚当连续扔了第四、五、六个,夏娃急了:孩他爹,慢点扔,臣妾忙不过来了…

    Advertised window size > 0

    于是亚当坐下休息,爱妃又开始叫了:继续扔吧。

    亚当开始扔第七个,夏娃喊收到七个。

    关闭连接

    终于亚当扔完了,亚当喊:爱妃,果子扔完了,寡人去忙别的了。

    夏娃回复:好的,我也休息一下,再见

    亚当:再见

    以上的过程类似TCP连接的过程,TCP是一个虚拟连接。

    何为虚拟连接?

    和物理连接所对应,物理连接是实实在在存在的,看得见摸得着,比如索道。而虚拟连接是不存在的,看不见摸不着,通过双向的消息、消息确认来模拟物理连接。

    由于有确认机制,亚当可以确保夏娃可以收到10个果子。

    那接下来再谈谈什么是无连接的UDP?

    亚当和夏娃吵架了,任凭亚当如何大声喊,夏娃躲在树林后生闷气,一声不响,亚当害怕夏娃饿死,于是开始自说自话朝着夏娃的山头扔玉米棒子:

    一个、两个、三个…

    一共扔了十个,但最终扔到对方山头到底有几个,亚当没有底,也许有的玉米棒子落到悬崖了,但是这个效率高啊,可以连续扔,以前扔10个果子需要一分钟,现在只需要20秒。

    亚当扔果子、扔玉米都有可能扔到悬崖下,但是扔果子为何可以确保对方收到十个?那是因为夏娃收到一个果子,然后喊收到了,如果没有收到,亚当就重新扔,直到夏娃说收到了。而扔玉米棒子对方没有确认,所以对于丢弃的情况无法知道,也无法重新扔。

    相关文章

      网友评论

        本文标题:TCP的面向连接和UDP的无连接,一则小故事向你诉说!

        本文链接:https://www.haomeiwen.com/subject/gykzfhtx.html