I cannot figure out why a pure ACK will increment the sequence number of the sending host by 1 when the TCP segment contains only a header, such as in the third segment in a three-way handshake for establishing a TCP connection.
For example:
- Host1 sends a SYN segment (seq = ISN(c), options) to Host2.
- Host2 sends a SYN+ACK segment (seq = ISN(s), ACK = ISN(c)+1, options) back to Host1.
- Host1 sends the last ACK segment (seq = ISN(c)
+1
, ACK = ISN(s)+1) to server to complete the handshake.
But there is no data contained in the 3rd segment, meaning Host1 does not inject more bytes into the communication path. What is being sent is the header only. Why would its seq
be different from segment 1?
SYN
in the 2nd segment which is incrementing the ACK in the third. Not the ACK in the 2nd segment. A TCP header which only consists of the ACK will not increment the SEQ/ACK. This answer may provide more details.