在使用TCP协议的网络中,接收端运输层如何处理失序到达的数据包,是丢弃还是等待所有数据包接收完毕后再重新排序?比如接收编号从1到10的10个数据包,如果数据包3先于数据包2到达接收端,那么接收端如何处理数据包3 呢?是先把它丢弃然后等待数据包2正确接收后再向发送端发命令让发送端重传数据包3?或者是先把失序到达的数据包3收下,等所有数据包接收完毕后再重新排序?这个问题困扰我好长时间了,资料也看了不少就是没有彻底搞明白,忘高人指点指点!
1 TCP具有乱序重组的功能。
(1)TCP具有缓冲区 (2)TCP报文具有序列号 所以,对于你说的问题,一种常见的处理方式是:TCP会先将报文段3缓存下来,当报文段2到达时,再根据序列号进行拼接。 2 当然缓冲区也有满的时候,这时接收端会直接丢弃报文,不做任何其他处理;发送方的定时器发现迟迟收不到接收方丢弃报文的确认号(ack number),就会重传该报文。这就是TCP的超时重传功能。