TCP重传不同的payload

TCP retransmission different payload

我遇到一个奇怪的问题。当 tcp 重传发生时,应该发送相同的有效载荷和丢失的数据包。但是我看到重传在 windows 系统上发送了不同的负载。正常吗?和任何 RFC 解释这个?

示例 1:

  1. tcp.seq:605921 tcp.len:546 这个错过了
  2. tcp.seq:605921 tcp.len:1188 <- 超时重传,但有效负载长度不同
  3. tcp.ack:607109 <-- 服务器已确认 #2

示例 2:

  1. tcp.seq:4529820 tcp.len:419 这个错过了
  2. tcp.seq:4530239 tcp.len:1460
  3. tcp.ack:4529820
  4. tcp.seq:4531699 tcp.len:92
  5. tcp.seq:4529820 tcp.len:1460 <- 重传 #1 不同长度的有效载荷
  6. tcp.ack:4531791 <- 服务器已确认 #3.

TCP 重传不是关于再次发送丢失的数据包,而是关于发送丢失的数据。重传的数据很可能会与同一数据包中的后续数据合并。您的问题仅显示了不同的 length 有效负载,而不是(如标题中所述)不同的有效负载。生成的应用程序数据可能相同,只是为了传输而打包不同。