Что такое UDP-порт и как порты работают в UDP, если соединения нет?
Если в UDP нет соединения, то зачем тогда порты? Чем UDP-порт отличается от TCP-порта? И могут ли порт 53 для TCP и порт 53 для UDP быть заняты одновременно разными службами?
2 ответа
Порт нужен не для соединения, а для адресации приложения внутри хоста. IP-адрес говорит «какой компьютер», а порт — «какая программа на этом компьютере».
В заголовке UDP-дейтаграммы всего 4 поля, и два из них — это порты:
| Поле | Размер |
|---|---|
| Порт источника | 2 байта |
| Порт назначения | 2 байта |
| Длина | 2 байта |
| Контрольная сумма | 2 байта |
Когда дейтаграмма приходит на хост, ОС смотрит на порт назначения и отдаёт данные тому процессу, который этот порт слушает. Никакого соединения для этого не требуется — порт это просто числовой «адрес окошка» от 0 до 65535.
Про ваш вопрос с 53: да, TCP-53 и UDP-53 — это абсолютно разные, независимые пространства портов. Их различает поле «протокол» в IP-заголовке. DNS как раз классический пример: обычные запросы идут по UDP/53, а передача зоны и большие ответы — по TCP/53. Так что одна служба может слушать оба, и конфликта нет.
Известные UDP-порты: 53 (DNS), 67/68 (DHCP), 123 (NTP), 161 (SNMP).
Добавлю практический момент: поскольку в UDP нет состояния соединения, файрволы и NAT работают с ним хитрее. Для UDP нет понятия «открыто/закрыто соединение», поэтому NAT держит временную запись по паре (IP:порт источника → IP:порт назначения) и удаляет её по таймауту, если трафик прекратился. Из-за этого, например, в играх и VoIP периодически шлют keep-alive пакеты, чтобы «дырка» в NAT не закрылась.