Почему номер подтверждения уменьшен до 1? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь получить TCP.Из TCP RFC 793 сервер и клиент выбирают случайные порядковые номера и после этого увеличивают их каждый раз, когда получают новый байт (это неправильно, но только для примера).Для дампа пакетов TCP я использовал tcpdump -n -i eth0 tcp:

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
04:32:20.732914 IP 10.10.0.2.43168 > 10.50.0.2.9: S 372254521:372254521(0) 
    win 5840 <mss 1460,sackOK,timestamp 3644068 0,nop,wscale 1>
04:32:20.766194 IP 10.50.0.2.9 > 10.10.0.2.43168: S 363863555:363863555(0) 
    ack 372254522 win 5792 <mss 536,sackOK,timestamp 3644074 3644068,nop,wscale 1>
04:32:20.766416 IP 10.10.0.2.43168 > 10.50.0.2.9: . 
    ack 1 win 2920 <nop,nop,timestamp 3644073 3644074>
04:32:25.502532 IP 10.10.0.2.43168 > 10.50.0.2.9: P 1:7(6) 
    ack 1 win 2920 <nop,nop,timestamp 3644548 3644074>
04:32:25.503272 IP 10.50.0.2.9 > 10.10.0.2.43168: . 
    ack 7 win 2896 <nop,nop,timestamp 3644548 3644548>
04:32:29.510131 IP 10.10.0.2.43168 > 10.50.0.2.9: F 7:7(0) 
    ack 1 win 2920 <nop,nop,timestamp 3644949 3644548>
04:32:29.513123 IP 10.50.0.2.9 > 10.10.0.2.43168: F 1:1(0) 
    ack 8 win 2896 <nop,nop,timestamp 3644949 3644949>
04:32:29.513356 IP 10.10.0.2.43168 > 10.50.0.2.9: . 
    ack 2 win 2920 <nop,nop,timestamp 3644949 3644949>

Первые два пакета выглядят нормально, но с третьего, и так далее, он использует ack 1 вместо 363863556, и я не могу получить почему

1 Ответ

0 голосов
/ 17 февраля 2019

Не имеет.Вы запускаете tcpdump, не сообщая, что хотите видеть абсолютные порядковые номера (-S).

Поведение по умолчанию для tcpdump - перевод порядковых номеров в относительные порядковые номера, которые позволяют увидеть, сколько байтов данных было передано в любом направлении.В этом конкретном случае вы видите, что оно переходит к 1, потому что, согласно RFC-793, SYN потребляет один байт в потоке, поэтому правильный ответ - SEQ + 1.Вы увидите, что то же самое происходит в другом направлении.(Вы также обнаружите, что FIN потребляет один байт).После этого ACK увеличится на количество отправленных байтов.

Если вы хотите увидеть абсолютные порядковые номера, попробуйте еще раз выполнить tcpdump -n -i eth0 -S tcp

...