该场景与TCP级别上的滑动窗口有关。图像自爆的左侧是发送器缓冲区(由空白和浅蓝色区域填充),然后右侧是接收器缓冲区。众所周知,我们要传输的数据应该分成几个数据包,并按顺序标记它们以备传输。但是,我对以下问题感到怀疑。
(我的意思是,包发件人缓冲区应该按标记的序列号保持顺序?还是乱序?)
(我的意思是,数据包接收者按数据包序列号顺序接收和存储在缓冲区中吗?如果是,这意味着缓冲区使数据包重组更容易了吗?)
答案 0 :(得分:1)
不幸的是,您的问题中没有太多可用的上下文,并且不清楚该图像的来源。但是我认为映像是指内核中的套接字发送和接收缓冲区。
由于应用程序在套接字上发送了连续的数据,并且内核将数据按给定的顺序发送到对等方,因此发送缓冲区中所有尚未发送的数据都是按顺序发送的。请注意,这假设如果启用SACK,则系统不会进行任何优化。
与此相反,内核无法控制接收数据的顺序,并且可能发生的是,较早的数据比先前的数据更早地接收到较后的数据(较高的序列号),因为先前的数据丢失或由于传输中的重新排序。因此,在接收到的数据中可能存在间隙,一旦接收到未完成的数据,这些间隙有望被填补。