Могут ли сокеты TCP и UDP использовать один и тот же порт? - PullRequest
85 голосов
/ 22 июня 2011

Прежде всего, есть ли проблемы с использованием UDP и TCP на одном сервере?

Во-вторых, могу ли я использовать тот же номер порта?

Ответы [ 2 ]

90 голосов
/ 22 июня 2011

Да, вы можете использовать один и тот же номер порта для TCP и UDP. Многие протоколы уже делают это, например, DNS работает на udp / 53 и tcp / 53.

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

При написании вашего сервера имейте в виду, что последовательность событий для сокета TCP намного сложнее, чем для сокета UDP, поскольку, как и при обычных вызовах socket и bind, вам также необходимо listen и accept.

Кроме того, вызов accept вернет новый сокет, а этот сокет , который вам затем придется также опрашивать для получения событий. Ваш сервер должен быть готов к продолжению accept подключений на исходном сокете, одновременно обслуживая несколько клиентов, каждый из которых будет инициировать получение событий на своих собственных сокетах.

6 голосов
/ 01 сентября 2014

Во-первых, нет проблем с использованием как tcp, так и udp на сервере.

Во-вторых, у нас могут быть как UDP, так и TCP-запросы на один и тот же порт, потому что каждый запрос идентифицируется пятеркой, содержащейся в исходном IP, IP-адрес назначения, исходный порт, порт назначения, PROTOCOL (в качестве протокола может использоваться TCP или UDP).

...