TCP 协议下 socket 有可能丢包吗? |
您所在的位置:网站首页 › tcp丢包原因 › TCP 协议下 socket 有可能丢包吗? |
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 |