从以太网的物理传输上看,不管是TCP和UDP,肯定会出现先发后到的情况,但是这种数据帧的重组是靠传输层IP协议进行维护的,TCP和UDP只是应用层协议。
看到上面的说法
如果在物理传输时出现了这种情况,传到TCP的时候会不会已经修正好次序呢?
tcp会修正好次序的。
从应用层的角度(即使用tcp传输数据),我们从tcp中拿到的数据总是有序的,这是tcp对上层应用的保证。
如果从下层单个数据包的意义上,则【后发先到】是有可能的:
由于tcp发送数据时,有发送窗和接收窗的概念,会一次性发送多个IP数据包,例如,发送了1、2、3、4、5个IP数据包,其中,1和2在网络上走丢了,
对接受方的tcp协议栈而言,就是先到了3、4、5,这时的3、4、5不会暴露给对上层应用而言,而是通过重传机制,等到1和2收到了,才告诉上层说
有新的数据到达了。
同一个数据包有标记的
tcp相对于udp更加稳定
tcp中,发送数据包是有标记的。
tcp会修正好次序的
会不会这样:
你一次性发送0A0B两个字节,接收端收到的顺序是0A0B;
如果你发送0A,再发送0B,接收端接收到的有可能是0A、0B,也有可能是0B、0A。
再例如是你分别发送0A0B、0C0D,接收端收到的是0A0B、0C0D,也有可能是0C0D、0A0B。但不会是0B0A、0C0D