I cannot figure out why an pure ACK will increment the sequence number of the sending host by 1 when the TCP segment contains only 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 complet 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 header only. Why would its seq be different from that 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.