TCP против UDP. Отправка данных на закрытый порт

Я пытаюсь понять различия между пакетами TCP и UDP при проверке ошибок. Я знаю, что UDP-пакеты без установления соединения и не заботятся о том, чтобы пакет благополучно прибыл в пункт назначения. А TCP-пакет является противоположностью UDP.

Мой вопрос: если пакет отправляется в закрытый порт удаленного хоста, какое действие произойдет с пакетами UDP и TCP?

UDP пакет - ответ с ICMP (Код-3)? TCP пакет - ответ с RST пакетом?

3 ответа

В соответствии с правилами RFC 793 Reset Generation:

As a general rule, reset (RST) must be sent whenever a segment arrives
which apparently is not intended for the current connection.  A reset
must not be sent if it is not clear that this is the case.

There are three groups of states:

 1.  If the connection does not exist (CLOSED) then a reset is sent
 in response to any incoming segment except another reset.  In
 particular, SYNs addressed to a non-existent connection are rejected
 by this means.

Поскольку порт закрыт (не прослушивает и не осуществляет связь), соединения отсутствуют, и поэтому TCP должен отвечать пакетом RST.

RFC 768 для UDP не определяет никаких действий для закрытого порта, но ICMP RFC 792 определяет сообщение Тип 3 Код 3, пункт назначения недоступен: порт назначения недоступен, который может быть отправлен.

Однако порты фактически делают это только в том случае, если они не отфильтрованы. Отфильтрованные соединения не отвечают вообще и просто отбрасывают пакет. Фильтрация обычно выполняется любым брандмауэром, достойным этого названия, поскольку он усложняет работу злоумышленников, предоставляя меньше информации.

с UDP вы можете увидеть в Wireshark:

52081 14:12:05.897100 37.xxx.xxx.xxx 5060 port-xxxx.xxxnet.de ICMP 406 47445 Пункт назначения недоступен (порт недоступен)

Порт здесь 47445. 37.xxx.xxx.xxx — это ваш IP, порт — xxxx.xxxnet.de сервера, который пытается.

Стоит отметить, что даже если udp-порт сервера закрыт, вы все равно можете наблюдать udp-пакеты, отправленные клиентом на этот закрытый порт.

Пытаться:

Сервер:

      sudo tcpdump -n -i eth0 udp and dst port 8080 -X

заменятьeth0к интерфейсу вашей сетевой карты и8080к вашему закрытому порту на стороне сервера.

Клиент:

      echo "send from client, udp protocol" | nc -u [server ip] 8080
Другие вопросы по тегам