Хобрук: Ваш путь к мастерству в программировании

Меняется ли порт, когда сервер принимает TCP-соединение?

Когда клиент подключается к серверу с помощью TCP, для потока TCP создается новый сокет. Остается ли соединение на том же порте, на котором было установлено соединение, или оно изменится на какой-то другой порт?


Ответы:


1

Новый сокет представляет собой концепцию уровня приложения, введенную потому, что для каждого установленного соединения требуется уникальный файловый дескриптор (также отличный от дескриптора прослушиваемого файла), который сопоставляется, но не совпадает с сеансом TCP. Сам сеанс идентифицируется комбинацией адреса источника и пункта назначения и порта. Порт источника (клиента) обычно выбирается случайным образом, а порт назначения (сервер) является портом прослушивания. Дополнительный порт не выделяется.

08.06.2010
  • Сеанс идентифицируется комбинацией IP-адреса источника и назначения и порта, И протокола. Следовательно, это 5-кортеж, который однозначно идентифицирует соединение, а не 4-кортеж. 09.06.2015
  • @treecoder Какой протокол уровня? Транспортный уровень? Или уровень приложения? Например. <ip1, port1, ip2, port2, tcp> или <ip1, port1, ip2, port2, http>? 11.11.2015
  • @treecoder Для TCP всегда используется протокол 6, поэтому он не имеет отношения к идентификации сеансов TCP. 10.01.2016
  • @smwikipedia Уровень 4 (транспорт). 10.01.2016
  • @KawaiKx Нет, это транспортный уровень, и он не имеет отношения к целям идентификации сеанса, поскольку протокол определен равным 6 для всех TCP-соединений. 10.01.2016

  • 2

    Сервер использует тот же порт для прослушивания и приема нового соединения и связи с удаленным клиентом.

    Приведу пример (в системе Linux):

    Сначала запустите http server с помощью python :

    xiongyu@ubuntu:~$ sudo python -m SimpleHTTPServer 500
    Serving HTTP on 0.0.0.0 port 500 ...
    

    Во-вторых, используйте команду nc для подключения к http server, здесь мы запускаем два клиента:

    xiongyu@ubuntu:~$ nc 0.0.0.0 500
    

    Используйте netstat, чтобы увидеть состояние порта 500:

    xiongyu@ubuntu:~$ netstat -natp |grep ':500'
    tcp    0      0 0.0.0.0:500         0.0.0.0:*          LISTEN      54661/python
    tcp    0      0 127.0.0.1:51586     127.0.0.1:500      ESTABLISHED 57078/nc
    tcp    0      0 127.0.0.1:51584     127.0.0.1:500      ESTABLISHED 54542/nc
    tcp    0      0 127.0.0.1:500       127.0.0.1:51586    ESTABLISHED -
    tcp    0      0 127.0.0.1:500       127.0.0.1:51584    ESTABLISHED 54661/python
    

    Вы можете видеть, что http-сервер использует порт 500–8_ для клиента, после того, как новый клиент подключился к серверу, он по-прежнему использует порт 500 для связи с клиентом, но с новым дескриптором файла.

    25.10.2018

    3

    Сокет, связанный с новым дескриптором, возвращенным accept на сервере, будет использовать тот же порт на стороне сервера соединения, что и исходный сокет (при "нормальных" определениях, когда клиент инициирует соединение). Новый сокет будет иметь другой номер клиентского порта (удаленный порт с точки зрения сервера).

    08.06.2010
    Новые материалы

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

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...