Я использую необработанный сокет для создания пакетов TCP с акцентом на порядковый номер и флаги TCP (SYN, ACK)

Я использовал одну машину S для отправки пакета ACP tcp (флаг ACK установлен в 1) и другую машину R для ее получения. Эти две машины находятся в разных подсетях, все в моей школе

тем временем я использовал tcpdump для захвата пакетов.

Странные вещи случаются! На машине S перехваченный пакет, как и ожидалось, является пакетом ACK, однако на принимающей машине R пакет становится пакетом SYN, и порядковый номер изменяется, значение seq no на 1 меньше ожидаемого, и ack_seq становится 0!

что не так с этим? я предполагаю, что маршрутизатор / брандмауэр изменил пакет ACK на пакет SYN, потому что он никогда не видит обмен SYN SYN / ACK перед ACK? это возможно или нет?

два захваченных пакета:

https://docs.google.com/file/d/0B09y_TWqTtwlVnpuUlNwUmM1YUE/edit?usp=sharing https://docs.google.com/file/d/0B09y_TWqTtwlTXhjUms4ZnlkMVE/edit?us

1 ответ1

0

Я предполагаю, что у вас неправильные порядковые номера в вашем ACK-пакете. Таким образом, межсетевой экран между ними видит ваш ACK-пакет с неправильной последовательностью и решает, что SYN-ACK никогда не делал его вам, и поэтому повторно передает исходный SYN-пакет на сервер, чтобы заставить его повторно отправить SYN-ACK, который он делает.

Если вы посмотрите на свою трассировку в Wireshark, то сделаете тот же вывод - он не увидит ваш ACK как часть исходного сеанса, а новый сеанс, использующий те же порты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .