Мой браузер Firefox с 3 открытыми вкладками:
tab1-->google.com
tab2-->yahoo.com
tab3-->msn.com
Все они используют port 80
, как и Photoshop: Как компьютер узнает, какие данные принадлежат какому процессу?
Соединение TCP однозначно идентифицируется как (Локальный хост, Локальный порт, Удаленный хост, Удаленный порт). (Технически протокол также является частью критериев, но если мы ограничимся TCP, это, конечно, TCP.)
Пример соединения с роутером:
Если вы откроете другое соединение с Google, он будет использовать другой исходящий порт, поэтому он все еще может быть однозначно идентифицирован.
Это также то, что ваша операционная система использует для маршрутизации ответных пакетов обратно к правильному приложению.
Я исправлю вашу схему, см. Рис ниже.
Полезно использовать слово пакет в общем смысле, в смысле электронной инженерии, без особой путаницы в терминологии "слой" ISO OSI.
У одного есть пакет, и у него есть такая информация, как IP-адрес источника, IP-адрес Dest, и после этого у вас есть некоторые другие поля, которые можно назвать сегментом TCP, и у них есть такие поля, как порт источника TCP, порт TCP dest.
Добавлено примечание
В немного более сложных сценариях у вас может быть два соединения и один и тот же исходный IP-адрес, доступ к одному и тому же IP-адресу и порту назначения. но одно соединение будет иметь один локальный порт TCP, а другое - другой локальный порт TCP. Это может произойти, если в веб-браузере открыто несколько вкладок с доступом к одному веб-серверу. Другой сценарий, если у вас есть несколько сетевых карт. Помните, что IP-адреса принадлежат сетевым интерфейсам (это точнее, чем говорить, что они принадлежат «компьютерам»). У компьютера может быть много сетевых интерфейсов, много IP-адресов. Соединение происходит между сетевыми интерфейсами.
Процесс веб-сервера на сервере прослушивает порт 80 для соединений на свой собственный IP-адрес. Соединение - это IP-адрес И порт, а не только один или другой. Таким образом, ваш компьютер может без проблем подключиться к порту 80 на 3 разных IP-адресах.
Ваш компьютер не использует порт 80 на локальном конце соединения. ОС будет использовать следующий свободный локальный порт в диапазоне, который написан для использования. В Windows для подключения используются порты, начинающиеся с 1024 (более старые версии) или с 16536 (более новые версии). Linux-боксы, как правило, используют порты в диапазоне выше 38000 или около того.
Вы можете подтвердить это в Windows (powershell) с помощью:
netstat -a | findstr <the servers IP address>
или в Linux (как root):
netstat -ntup | grep <the servers IP address>
и отмечая местный порт. Это не порт 80.
Кроме того, некоторые серверы только прослушивают новые соединения через порт (например, FTP) и открывают новое соединение для фактической передачи данных или предоставления услуг. Однако это поведение полностью зависит от рассматриваемого демона. если служба хочет использовать другие средства для отслеживания отдельных сеансов, она может делать это бесплатно и хранить весь трафик на одном порту, например TCP/80.
Изменить: чтобы ответить на ваш расширенный вопрос:
Ваш браузер знает сайт по домену и IP-адресу, а не по номеру порта. Каждая ОС или среда выполнения приложения предоставляет версию метода BerHley Sockets GetHostByName(string name)
которую он использует для поиска удаленного сервера по имени домена.
На уровне TCP, поскольку, как я уже упоминал, вы не используете TCP/80 локально (только серверы используют 80, и сервер MSN никак не может понять, является ли это Google), здесь нет двусмысленности.
Примечательно, что когда программа использует порт для отправки данных, похоже, что она отправляет поток данных на локальный порт, но важно помнить, что во время создания этого порта между узлами IP было установлено TCP-соединение. таким образом, порт уже знает (только) удаленный IP-адрес, к которому подключен этот локальный порт.
Все приложения будут использовать случайный порт для "внутреннего использования". Это известно как локальный порт.
Посмотрев Resmon.exe, на вкладке Network
вы можете увидеть список TCP-соединений. Это открытые TCP-соединения, которые есть у каждой программы. Это будет отображать:
В целом, каждое приложение /TCP-соединение (поскольку у некоторых приложений может быть несколько, например, веб-браузер с несколькими вкладками) получает произвольный локальный порт, который можно использовать для каждого открытого TCP-соединения.
РЕДАКТИРОВАТЬ:
Спасибо @Hennes за то, что определили, что порты больше 1023 и меньше 65536.
Все порты до 1023 зарезервированы, такие как порт 80 и т.д. И 65535 - это максимальный номер порта.