I was reading a textbook which says about TCP protocol "Selective Repeat":
We have assumed that packets cannot be reordered within the channel between the sender and receiver. This is generally a reasonable assumption when the sender and receiver are connected by a single physical wire. However, when the “channel” connecting the two is a network, packet reordering can occur. The approach taken in practice is to ensure that a sequence number is not reused until the sender is “sure” that any previously sent packets with sequence number x are no longer in the network. This is done by assuming that a packet cannot “live” in the network for longer than some fixed maximum amount of time.
I am confused and below are my two questions.
Q1-What does " the channel can be thought of as essentially buffering packets and spontaneously emitting these packets at any point in the future." mean? Why do we need to buffer an old packet? Isn't it better that the receiver just ignore it?
Q2-Let's say the window size is 2 and the available sequence number is 0,1,2,3. The sender firstly sends packet 0, packet 1, while packet 0 is struck somehow and takes much time to arrive, so timeout occurs the sender has to send packet 0 again, but this time packet 0(new) arrives on time. Then the sender sends packet 2, packet 3, all received by the receiver. And then the sender is about to send packet 0(new), and packet 1(new), but the old packet 0 arrives at receiver now, so receive could not know that this packet is the old packet or the new packet. So how does " assuming that a packet cannot “live” in the network for longer than some fixed maximum amount of time" can fix this issue? Does it mean that the packet header contains the time that it was sent?