A TCP header can contain the SACK option, which allows selective acknowledgement. As I've seen it in the wild, the SACK option usually contains two sequence numbers, lets say 0x00004000 and 0x00006000, and then this segments sequence number is e.g. 0x00002000, which means: I have everything up to 0x00002000, and I also have everything between 0x00004000 to 0x00006000, so start sending with 0x00002001.

On wikipedia I read that the SACK option can also contain 1, 3, or 4 addresses. What do they mean?

  • Did any answer help you? If so, you should accept the answer so that the question doesn't keep popping up forever, looking for an answer. Alternatively, you could provide and accept your own answer.
    – Ron Maupin
    Commented Apr 1, 2018 at 21:17

1 Answer 1


Okay, I just discovered the answer myself: the option contains between 1 and 4 spans of addresses.

Which means a SACK option with a length of 10 doesn't contain "one address", but "one address range", because a sequence number of course is just 4 bytes (+1 byte for type option, +1 byte for length of option), duh.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.