TCP 协议下 socket 有可能丢包吗?

您所在的位置:网站首页 tcp丢包原因 TCP 协议下 socket 有可能丢包吗?

TCP 协议下 socket 有可能丢包吗?

2023-03-27 10:03| 来源: 网络整理| 查看: 265

1876年法国赠送美国政府自由女神雕塑,女神体积很庞大,法国政府委托快递公司运输,先拆分成300片打包,编号为1-300,需要三艘船运输,第一艘运1-100片,以此类推。

场景一:三艘船按序到达

美国政府每天派人去快递公司查件(Receive函数),第一艘船到达,快递公司将1-100片交付美国政府,以此类推,收完300片,可以完整重构自由女神,传输任务完成。

场景二:三艘船乱序到达

由于第一艘船动力有点问题,结果最后达到,船到达顺序为2、3、1,假设委托人也是天天去查件,在第一艘船没有到达之前,快递公司会假装什么都没有发生,直到第一艘船到达,然后按照船编号顺序将货物提交给委托人,与场景一相比,会有大一些的延迟。

场景三:有一艘船掉大西洋里了

浩瀚的大西洋,波澜壮阔,掉一艘船到海里,天知,海知,你我他不知,第一艘、第三船都到达了,可是第二艘船却迟迟未到,一周过去了,一个月过去了,还是杳无音讯,快递公司美国分公司意识到出事了,他们做了两方面工作:

1)将第一艘船的货物提交给美国政府(在刚接收到就可以提交给美国政府)

2)派人通知法国总公司将第二艘船的货物再建造一份,雕塑编号为101-200,重新运输

半个月之后,第二艘运输船到达了,然后提交给美国政府,最后是第三艘船的货物。

与场景一、二相比,传输的延迟最大。

上文的故事,法国政府代表客户端,负责发送大块数据给服务器端;美国政府是服务器端,负责接收大块数据;快递公司代表TCP,负责货物的按序提交给客户(应用程序),负责乱序的重新排序、以及丢包的超时重传。

简单回答一下问题:

TCP接收方知道数据(字节流)的起始序列号,怎么知道的?同步握手里有对方的ISN(Initial Sequence Number),所以会将接收到的数据按字节排好序(1,2,3…N)放入buffer,应用程序会通过receive函数来取走,至于取走多少,取决于buffer有多少数据,以及receive函数的入口长度字段。然后应用程序对拿到的字节流进行解释、分段。

续:

http://www.zhihu.com/question/34003599/answer/139286798


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3