TCP соединение и номер подтверждения
В протоколе TCP есть что-то, чего я не понимаю. Если я сделаю следующее, просто простое соединение TCP, захваченное с помощью tcpdump:
22: 29: 20.185032 IP 172.10.10.11.43086> 172.10.10.21.http: Flags [S], seq 2173271328, победа 29200, варианты [mss 1460,sackOK,TS val 3615590 ecr 0,nop,wscale 7], длина 0
22: 29: 20.185090 IP 172.10.10.21.http> 172.10.10.11.43086: Flags [S.], seq 3246536796, ack 2173271329, победа 28960, опции [mss 1460,sackOK,TS val 3598763 ecr 3615590,nop,wscale 6], длина 0
22: 29: 20.186088 IP 172.10.10.11.43086> 172.10.10.21.http: Flags [.], Ack 1, win 229, опции [nop,nop,TS val 3615590 ecr 3598763], длина 0
Почему последний акк на 1? Разве это не должно быть в (3246536796+1)?
1 ответ
На самом деле это 3246536797. TCPDump поддерживает -S
возможность использовать абсолютные, а не относительные числа. Вы можете проверить это с помощью -x
или же -X
возможность увидеть необработанные данные пакета.
По умолчанию используются относительные числа на дисплее, чтобы было легче увидеть, сколько байтов было передано между двумя узлами. В этой конфигурации после того, как TCPDump определил два хоста и порядковые номера, он начинает показывать только смещения, а не абсолютное число в заголовке.