关于同一条TCP链接数据包到达顺序的问题

前序:

最近一直疑惑,tcp能不能保证应用层发包的顺序性?例如client A给server B按时间先后分别发送 c和d包(即是先发c包,再发d包),但是因为网络的复杂性,并不能保证c包一定比d包先到(因为走的链路有可能不同),那tcp是怎样保证的呢?如果不能保证,平时写的程序就会出现很多问题(例如假如c包是要查询一个用户的信息,d包是要删除用户的信息,那如果d包先到后就交给应用层的话,删除了这个用户的信息,c包到的时候就读取不到这样的信息了)。

暴击

查了一下,是我想多了,人家TCP做得确实是牛逼,T小弟佩服。。。

复活

若我们接受的数据包是在应用层,并且应用层用的是TCP的传输协议的话,这个顺序是保证,这个顺序的保证是在传输层保证的,举个例子:

client发生数据A,B给server,使用的TCP传输,client发送毫无疑问是先发送A,然后发送B,但是有些搞网络的同学可能会有这个疑问,A跟B在物理层走的链路不一样,传输速度不一样,B是会比A先到达Server,这个是没有错的,但是这个数据包被接受是在网络层跟传输层,请记住网络跟传输层的作用,网络层是保证同一个包的完整,就是说若你的传输层发出的包过大,在网络层(也就是IP层)会被分包,同时在Sever的网络接受的时候会被组包,有一个完整的包才会交给传输层,若包不完整是会丢弃,同时他也不保证你的包的是否达到,数据包的保证是在传输层做的,就是说若传输层(TCP协议才会,UDP并不保证)没有收到对方的确认包,会有超时重传,每个数据包也是有序列号的,同时,传输层就是根据这个序列号来保证A,B包的顺序,即使B比A先到达了,TCP也会是等A到达之后,再把B的数据提交给应用层,即是A包没收到,那B包也不会提交到应用层,这一定程度上保证了顺序性。从而保证了,同一条TCP链接,先发的包先到。

注:这个顺序的保证是传输层做的,TCP这个协议保证的,UDP并不保证,网络层接收包的顺序是错乱的。
在这里插入图片描述
原文链接:参考的博客链接

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值