[e2e] TCP sequence number reset
Joe Touch
touch at isi.edu
Wed Mar 30 00:47:28 PDT 2011
Hi, Kacheong,
On 3/30/2011 12:33 AM, Kacheong Poon wrote:
...
> Each bytes sent in a TCP connection has a TCP sequence number
> attached to it. In the example case below,
>
>
>> X thinks the PMTU is 6
>> X sends
>> ABCDEF seqno 0
>> X receives an ICMP 'too big', saying 3 bytes are OK
>> X times out, and so sends:
>> ABC seqno 0
>> DEF seqno 4
>>
>> Now let's look at the receive side:
>>
>> Y reads ABCDEF
>>
>> What is the seqno of D?
>
>
> It is still 4. Regardless of the TCP level segmentation, each
> bytes has its own TCP sequence number.
The receiver already knows that; it can just count as it reads bytes.
That's the point I made very early on...
>> Well, if the first ABCDEF went through, then it's 0
>> If it was lost, and then the other two packets arrive out of order,
>> then the entire ABCDEF is presented to the user when DEF shows up, at
>> which point ABC all have seqno 0 and DEF all have seqno 4
>
>
> The simple mapping I suggested was to send up the same TCP level
> sequence number to the app. So regardless of the order a segment
> arrives, the sequence number won't change.
AOK - you clearly don't need to even send that. It's trivial to
determine now without augmenting the API:
tot_offset = 0
while (count = read(buf)) {
offset of buf[i] is "tot_offset + i"
just before looping:
tot_offset += count;
}
So your simple map is already possible.
What you *really* want is:
a boundary in the TCP stream
and everything before that boundary is part of one thing (the first
stream) and everything after that boundary is part of the second.
This has *nothing* to do with resetting the seqno. The seqno is
irrelevant to establishing this boundary.
Many have tried to find a way to put such a boundary in TCP, and it
basically requires adding another state to the state diagram, and
dealing with entering and leaving that state. The work required is the
same as a 3WHS, which is why this has been abandoned.
Joe
More information about the end2end-interest
mailing list