Почему можно использовать один и тот же порт на TCP и UDP одновременно?

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

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

пожалуйста, объясните подробно, если это возможно, или свяжите хорошую статью по этой теме.

3 ответов


другие ответы правильные, но несколько неполные.

IP (aka "INET") сокет "соединение" (т. е. связь между двумя процессами, возможно, на разных машинах) определяется 5-кортежем: протокол, IP источника, порт источника, ip назначения, порт назначения. Вы можете видеть, что это не ограничивается stateful подключение, такое как TCP.

Это означает, что вы можете привязать различные процессы к любому уникальному экземпляру этого 5-кортеж. Поскольку "протокол" (например, TCP и UDP) является частью дифференцирующего фактора, каждый из них может иметь другой процесс.

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

Это стандартная практика, однако, всегда использовать одну и ту же услугу на том же номере порта. Если поддерживаются UDP и TCP, это просто разные способы связи с той же службой. DNS, например, использует UDP на порту 53 для поиска, потому что это небольшие запросы, и это быстрее, чем создание TCP-соединения, но DNS также использует TCP на порту 53 для "передач", которые нечасты и могут иметь большие объемы данных.

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

и тогда существуют разные "домены" сокетов, такие как домен сокетов "unix", который полностью отличается от "inet" и использует файловую систему для адресации.


назначение не определяется только IP Addr: Port. Есть еще одна вещь-заголовок IP имеет поле под названием Protocol который дифференцирует конечную точку TCP и UDP. Таким образом, становится возможным для двух процессов привязываться к одному IP:Порту, пока протокол связи отличается.


конечная точка соединения для UDP и TCP, определенных IP, протоколом (TCP или UDP) и портом. Это означает, что пока вы используете другой протокол, конечная точка связи также отличается.