Я читаю computer network a top down approach 6th edition
, и я на транспортном уровне. Я понимаю, как пакет от клиента отправляется на сервер через клиентский сокет, но когда сервер получает пакет, кто читает информацию о пакете и передает ее правильному процессу?
Что касается TCP, сначала устанавливается соединение между двумя процессами. Тот же вопрос здесь, кто или что делает мультиплексирование и передает пакет?
Каждое IP-соединение клиент / сервер идентифицируется кортежем, состоящим из пяти элементов:
Когда соединение установлено, стеки IP-адресов клиента и сервера запоминают соответствующий кортеж в определенной таблице в памяти. Позже, когда приходит пакет, он выполняет поиск в таблице соединений, чтобы найти правильный кортеж и увидеть, какой конкретный процесс его прослушивает.
В качестве практического примера рассмотрим выдачу команды netstat -n -t -p
на ящике linux. На моем ПК он показывает следующий результат:
[root@centos-webdev ~]# netstat -n -t -p Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 172.31.255.240:45414 1.1.8.246:25 TIME_WAIT - tcp 0 64 172.31.255.240:22 1.1.9.6:2205 ESTABLISHED 10604/sshd
Взгляните на последнюю строку: если показывает, что установлено SSH-соединение с удаленного адреса 1.1.9.6, порт 2205 и локальный IP-адрес 172.31.255.240, порт 22. В крайнем правом поле объясняется, что исполняемый файл ssh с PID 10604, прослушивает пакет, принадлежащий этому конкретному соединению.