Назад | Перейти на главную страницу

Может ли TCP-пакет не достичь 7-го уровня OSI

Я столкнулся с ситуацией, когда клиент устанавливает TCP-соединение через telnet (или netcat), чтобы подключиться к серверу Linux. Затем сервер должен отправить обратно баннер, содержащий некоторую текстовую информацию ...

На каждом хосте я запускал Tcpdump для захвата трафика.

Сначала две машины выполнили традиционное TCP-рукопожатие. затем сервер отправил PUSH-пакет, содержащий баннер, в направлении клиента и получил ACK от клиента.

Странно то, что клиент так и не получил баннер (в telnet/nc), и tcpdump, запущенный на стороне клиента, не захватил ни PUSH-пакеты с сервера, ни ACK в направлении сервера. В то время как tcpdump на стороне сервера захватил все пакеты.

Я делал это несколько раз, и каждый раз ничего не менялось, похоже, не проблема tcpdump.

Интересно, вызвано ли это брандмауэром, поскольку между двумя машинами есть один (но почему сервер получает ACK !?)

Кроме того, возможно, что когда клиент получил PUSH-пакет, вместо того, чтобы отправлять его на 7-й уровень OSI (telnet) он по какой-то причине остановил его на 4-м уровне (TCP) и отправил обратно ACK? Связано ли это с фильтрацией приложений на стороне клиента?

Nb: Обе машины используют Linux From Scratch и не используйте iptables. Я не знаю, какую реализацию TCP они используют.

РЕДАКТИРОВАТЬ:

Вот схема общения:

Просмотр сервера:

    Server........................................................................client

    <-----------------------------------SYN (Ip ID=3333)---------------------------

    ----------------------------------SYN-ACK (IP ID=4444)--------------------------->

    <---------------------------------ACK (Ip ID=2222)-------------------------------

    -----------------------------PUSH (data) (100 bytes, IP ID=4445)------------------->

    <----------------------------ACK (Ip ID=2223, ack-num=101)------------------------

Вид клиента:

Server........................................................................client

<---------------------------------SYN (Ip ID=3333)-----------------------------

---------------------------------SYN-ACK (IP ID=4444)--------------------------->

<--------------------------------ACK (Ip ID=3334)-----------------------------

Внутри всех пакетов совпадает все, кроме идентификатора IP-пакета, номера подтверждения и порядкового номера.

Проблема не в 7-м уровне, а в сетевом уровне.

Предполагая, что ваш tcpdump на клиенте работает правильно, клиент не получает данные с сервера, поэтому нет вопросов, может ли он передавать данные или нет.

Как вы уже знаете, между ними есть брандмауэр, попробуйте его без брандмауэра. С брандмауэром можно многое делать. Если клиент не получает пакет данных и, следовательно, не отправляет ACK, но сервер получает ACK, он должен исходить от брандмауэра.