zoukankan      html  css  js  c++  java
  • 怎么理解TCP的面向连接和UDP的无连接(不面向连接)?

     

    如题,在理解TCP和UDP中,一个是面向连接的传输协议,一个是不面向连接的协议。怎么能够更好的理解他们的不同。

    亚当和夏娃分别生活在两个山头,山头之间是万丈深渊,亚当采集野果需要分享给夏娃,如果他们之间有一条索道(物理连接),野果可以顺着索道滑到夏娃那一边,那就没有车小胖什么事了。

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

    连接建立

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

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

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

    运送货物

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

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

    超时重传 ( timeout retransmit)

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

    Advertised window size = 0

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

    Advertised window size > 0

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

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

    关闭连接

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

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

    亚当:再见

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

    何为虚拟连接?

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

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

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

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

    一个、两个、三个…

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

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

  • 相关阅读:
    Swift入门篇-Hello World
    Swift入门篇-swift简介
    Minecraft 插件 world edit 的cs 命令
    搭建本地MAVEN NEXUS 服务
    MC java 远程调试 plugin 开发
    企业内部从零开始安装docker hadoop 提纲
    javascript 命令方式 测试例子
    ca des key crt scr
    JSF 抽象和实现例子 (函数和属性)
    form 上传 html 代码
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/10937191.html
Copyright © 2011-2022 走看看