Чи можуть сокети TCP та UDP використовувати один і той же порт?


104

Перш за все, чи є якась проблема із використанням як UDP, так і TCP на одному сервері?

По-друге, чи можу я використовувати той же номер порту?

Відповіді:


110

Так, ви можете використовувати один і той же номер порту як для TCP, так і для UDP. Багато протоколів вже роблять це, наприклад, DNS працює на udp / 53 та tcp / 53.

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

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

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


2
@Eric Fortis RFC 1700 повна прикладів, давайте не будемо перераховувати їх усіх, чи не так? ;-)
Маркіз Лорн

2
@Eric Fortist. Чому саме повинні "всі знати про" номери портів NetBIOS?
Маркіз Лорн

4
Будь ласка, опублікуйте це як запитання, щоб ви могли надати мені відповідь
Ерік Фортіс

6
Щось ця відповідь не пояснює: семантичний "порт" специфічний для кожного протоколу (але деякі можуть не мати цього семантичного) транспортного рівня (модель OSI 4 рівень). Отже, TCP має свої порти, які інтерпретуються стеком TCP; UDP має свої порти, які інтерпретуються стеком UDP. Так би мовити, порти не поділяються між UDP та TCP; просто буває, що обидва протоколи мають однакове визначення поняття "порти", і щоб спростити, ми використовуємо одне і те ж значення порту для декількох підключень різних типів до однієї служби.
моала

2
@EricFortis Оскільки таке питання не цікавить мене чи когось іншого, як і ваші причини вважати його цікавим, і висловлюватимете свої заперечення щодо цитування однієї RFC, яка є саме для тієї мети, яку ми обговорюємо.
Маркіз Лорн

8

По-перше, немає жодної проблеми з використанням як tcp, так і udp на сервері.

По-друге, у нас може бути як UDP, так і TCP-запити на одному порту, оскільки кожен запит ідентифікується чотирьома, що містяться в джерелі IP, Destination IP, Source Source, Port Destination, PROTOCOL (оскільки протоколом може бути TCP або UDP).


3
Причина, яку ви заявляєте, часто дається, але вона справді безглузда. Не існує такого поняття, як з'єднання UDP, і немає контексту, в якому з'єднання розглядаються незалежно від пов'язаного протоколу. Справа в тому, що порти є артефактами TCP та UDP окремо, і тому немає можливості їх коли-небудь плутати.
Маркіз Лорн

Дякую, що вказали на мою помилку. Правильно, що через UDP немає зв’язку.
aMooly
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.