TCP发送方缓冲区中的数据包顺序是什么?为什么接收方缓冲区中的数据包不连续?

时间:2019-03-29 05:32:50

标签: tcp

该场景与TCP级别上的滑动窗口有关。图像自爆的左侧是发送器缓冲区(由空白和浅蓝色区域填充),然后右侧是接收器缓冲区。众所周知,我们要传输的数据应该分成几个数据包,并按顺序标记它们以备传输。但是,我对以下问题感到怀疑。

  1. 为什么发件人缓冲区中的数据包顺序,数据包的顺序号是多少?
  

(我的意思是,包发件人缓冲区应该按标记的序列号保持顺序?还是乱序?)

  1. 为什么接收器缓冲区中的数据包不连续,什么时候会发生?图片问题是tcp连接的发送者缓冲区()和接收者缓冲区()。
  

(我的意思是,数据包接收者按数据包序列号顺序接收和存储在缓冲区中吗?如果是,这意味着缓冲区使数据包重组更容易了吗?)


enter image description here

1 个答案:

答案 0 :(得分:1)

不幸的是,您的问题中没有太多可用的上下文,并且不清楚该图像的来源。但是我认为映像是指内核中的套接字发送和接收缓冲区。

由于应用程序在套接字上发送了连续的数据,并且内核将数据按给定的顺序发送到对等方,因此发送缓冲区中所有尚未发送的数据都是按顺序发送的。请注意,这假设如果启用SACK,则系统不会进行任何优化。

与此相反,内核无法控制接收数据的顺序,并且可能发生的是,较早的数据比先前的数据更早地接收到较后的数据(较高的序列号),因为先前的数据丢失或由于传输中的重新排序。因此,在接收到的数据中可能存在间隙,一旦接收到未完成的数据,这些间隙有望被填补。