在使用TCP传送数据时,如果有一个确认报文段丢失了,也不会引起对方数据的重传,为什么?

来源:百度知道 编辑:UC知道 时间:2024/05/26 16:33:25

TCP数据传输发送方首先发送第一个包含序列号为1(可变化)和1460字节数据的TCP报文段给接收方。接收方以一个没有数据的TCP报文段来回复(只含报头),用确认号1461来表示已完全收到并请求下一个报文段。
发送方然后发送第二个包含序列号为1461和1460字节数据的TCP报文段给接收方。正常情况下,接收方以一个没有数据的TCP报文段来回复,用确认号2921来表示已完全收到并请求下一个报文段。发送接收这样继续下去。
然而当这些数据包都是相连的情况下,接收方没有必要每一次都回应。比如,他收到第1到5条TCP报文段,只需回应第五条就行了。在例子中第3条TCP报文段被丢失了,所以尽管他收到了第4和5条,然而他只能回应第2条。
发送方在发送了第三条以后,没能收到回应,因此当时钟(timer)过时(expire)时,他重发第三条。(每次发送者发送一条TCP报文段后,都会重启动一次时钟:RTT)。
这次第三条被成功接收,接收方可以直接确认第5条,因为4,5两条已收到。

这是一个例子,希望LZ先通过这个例子了解TCP是如何传输的。

然后所说的情况,比如传送方发送了5条TCP报文段,而接收方在接收到第3条报文段的时候发送出的确认报文丢失了,但是之后接收完全部5条报文段的时候又发出了一个对第5条的确认报文,那么发送方收到后就能够知道接收方已经成功收到了全部的5条TCP报文段,因此不会再去重传。