【计算机网络】TCP面向字节流

本文通过一个生动的例子解释了TCP协议如何确保数据按序传输。以自由女神像的运输过程类比,介绍了数据分段、编号及发送的过程。进一步阐述了基于TCPSocket编程时,服务器如何将大量数据切割并有序发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这绝对是我见过最优秀的回答

法国政府委托人将自由女神按照从上到下,从左到右(类似电视机一帧图像显示方式)的顺序编号,编号为1-300,编号1用1号箱子打包,编号2用2号箱子打包,以此类推,一共300个箱子,快递公司并不关心箱子里装的是啥,在他们眼里这些都是货物,只关心的是如何把这些货物按照法国政府提交的编号顺序(1,2,3…300)运输到目的地,然后按照相同的编号顺序(1,2,3…300)提交给美国政府,任务就算完成了。至于如何完成以上的任务(乱序、丢包重传)则可以参考以下这个故事。

而基于TCP Socket编程,比如客户端使用HTTP请求服务器的主页,服务器生成了自己的主页,一共300K byte数据,包括Header + Payload,为了更清晰说明问题,假设TCP最多一次只能发送1K byte的数据,服务器端程序首先要将300K数据按照顺序砍成300块 (Segment),按照从头到尾编号,1-300,然后调用send()函数300次,严格按照时间顺序,第一次调用发编号1,第二次调用发编号2,…第三百次调用发编号300,这个不复杂,只要编写一个循环程序(300次)即可,只要每次调用的返回值都OK,应用程序的任务就算完成了。

以上的编号1-300就是TCP segment编号,那字节流的编号呢,就是 1,300000,其中 1-1000 字节被编在1号TCP segment,1001-2000字节编在2号segment,以此类推。

TCP不关心本地send()给自己的内容是啥(反正都是字节),只关心时序,先发给自己的肯定先编号,后发的后编号,TCP本身只保证传输的顺序,至于在服务器端本地、客户端本地的顺序则由Receive()/ Send()时序来保证!
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值