转:http://blog.csdn.net/l1008610/article/details/52197602

以前作者也一直以为数据包先发的不一定先到,直到今天才意识这个问题的缺陷,数据包是不一定先发先到,但是对于TCP有一点特殊,若我们接受的数据包是在应用层,并且应用层用的是TCP的传输协议的话,这个顺序是保证,这个顺序的保证是在传输层保证的,举个例子:

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

注:这个顺序的保证是传输层做的,TCP这个协议保证的,UDP并不保证,网络层接收包的顺序是错乱的。

下面这张就是网络的传输图

...

最新文章

  1. 每天一个linux命令(49):at命令
  2. iOS开发问题之Could not instantiate class named NSLayoutConstraint
  3. MySQL的基本函数
  4. hdoj 2524 矩形A + B【递推】
  5. yum 使用说明
  6. openstack neutron debugs listss
  7. Chromium on Android: Android在系统Chromium为了实现主消息循环分析
  8. 关于源码编译每次提示有错误 要make update-api
  9. MIPS 跳转指令BAL vs JAL
  10. bit ( 比特 )和 Byte(字节)的关系 以及 网速怎么算
  11. Java Spring boot 2.0 跨域问题
  12. openlayers4 入门开发系列之聚合图篇(附源码下载)
  13. linux sqlite3 相关
  14. Oracle优化之旅:使用leading, use_nl, rownum调优例子
  15. WinFormEx
  16. db2命令参数with ur
  17. HttpClient后台post 请求webapi
  18. UIActivityIndicatorView的详细使用
  19. EasyUI Draggable 可拖动
  20. lua劈分字符串方法及实例

热门文章

  1. The Ultimate Guide To A/B Testing
  2. 浅谈 Python 的 with 语句(转)
  3. git rm与直接rm的区别
  4. 在windows上搭建redis集群
  5. SQL2000查看表的大小
  6. 利用WebBrowser实现自动登入功能
  7. C#检测两个文件内容是否相同
  8. 系统间接口联调总是报500 for URL 和 乱码
  9. MiniUI级联
  10. [笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法