Этого я никогда не понимал: услугу, предлагаемую сервером, можно однозначно идентифицировать по его IP-адресу и порту, например 1.2.3.4:22, но несколько клиентов могут подключаться к одному и тому же порту одновременно. Когда разные клиенты отправляют новые данные на сервер, как сервер различает их, чтобы по-разному маршрутизировать данные?
Например, когда сервер разрешает SSH-соединения, он по умолчанию откроет порт 22. Несколько клиентов SSH могут подключаться, так что несколько человек могут использовать SSH одновременно, и все они будут использовать порт 22. I верить что на сервере разные сеансы различаются по разным Розетки, по одному на каждую сессию, хотя я могу ошибаться.
Но если это так, когда конкретный пользователь вводит новую команду во время своего сеанса SSH, как сервер узнает, в какой сокет направить эту команду? Компьютер пользователя не имеет доступа к дескриптору сокета, у него есть только IP-адрес и порт, поэтому я не понимаю, как они могут отправить достаточно информации на сервер, чтобы он мог различать их сеанс и другой сеанс. Различается ли сервер на основе IP-адреса и порта клиента, или он делает что-то еще?
Каждый конец соединения имеет свой IP-адрес и порт. «Клиент» (это не клиент, поскольку TCP / IP является одноранговым; это инициатор) имеет исходный IP-адрес и исходный порт в своей собственной системе, на которую адресуются пакеты. Соединение определяется всеми четырьмя: исходным IP-адресом, исходным портом, целевым IP-адресом и целевым портом, что упрощает устранение неоднозначности подключений.
Прочтите о TCP - это то, что создает и отслеживает сеансы. Клиент будет идентифицирован по его IP-адресу и порту отправки, так что это как минимум. Для некоторых протоколов / приложений есть дополнительные улучшения, такие как файлы cookie, ключи и т. Д.
https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Resource_usage
Большинство реализаций выделяют в таблице запись, которая сопоставляет сеанс с запущенным процессом операционной системы. Поскольку TCP-пакеты не включают идентификатор сеанса, обе конечные точки идентифицируют сеанс, используя адрес и порт клиента. Всякий раз, когда пакет получен, реализация TCP должна выполнить поиск в этой таблице, чтобы найти процесс назначения. Каждая запись в таблице называется блоком управления передачей или TCB. Он содержит информацию о конечных точках (IP и порт), статусе соединения, текущие данные о пакетах, которыми обмениваются, и буферы для отправки и получения данных.