Is TCP allowed to retransmit, using a segment that is different (larger) from the original segment? From a Wireshark capture I see a TCP segment which presumably is not ACK:ed within time so a retransmission is made but this time with a slightly larger payload?!? Both segments are ACK:ed separetly (one with SACK). I'm pretty sure that it is only the larger packet that is picked up at the application layer. What may be the cause of this?
asked 01 Dec '13, 12:46 ssh9614 edited 02 Dec '13, 09:55 Bill Meier ♦♦ |
One Answer:
My answer: The TCP data length in a retransmitted TCP segment can certainly be larger than in the originally transmitted TCP segment. Think of it this way: The sending application adds more data to the TCP send buffer between the first transmission and the retransmission and thus more data is available to be sent in the retransmission. The receiving TCP stack is responsible for properly re-constructing the data stream (handling data received twice & etc) before passing the data to the receiving application. One slightly interesting note: The window size advertised by the receiver (xx.46) is reduced by 64 to 63669 and remains at that value in the two acks thus suggesting that the receiving application (xx.46) has not yet read the data from the receive TCP buffer by the end of the sequence shown. answered 02 Dec '13, 10:32 Bill Meier ♦♦ |