Как протокол TCP/IP различает клиентов?

Как протокол TCP/IP различает клиентов?

Если мы создадим прослушивающий сокет, он вернет нам дескриптор (скажем, корневой дескриптор), и мы привяжем этот дескриптор к адресу. Всякий раз, когда доступно новое клиентское соединение, корневой дескриптор информирует нас, и мы принимаем это новое соединение и получаем уникальный дескриптор (скажем, клиентский дескриптор) для каждого клиента. С этого момента мы можем общаться с этим клиентом, используя этот дескриптор. Информация о клиенте хранится в отдельном inode, на который указывает клиентский дескриптор. Благодаря этому Linux смог доставить соответствующие клиентские данные в соответствующий дескриптор.

Если вышесказанное мной верно (поправьте меня, если я не так понял), то у меня возникли сомнения. Какая информация о клиенте хранится в inode? Как Linux однозначно идентифицирует клиента?

решение1

Протоколы TCP/IP и UDP/IP знают «сеанс», который определяется локальным и удаленным IP-адресом и портом [1]. Пакет TCP/IP, например, будет содержать исходный и целевой IP-адрес и порт [2]. Сервер или клиент (например, Firefox), у которого открыто более одного соединения, будет различать на уровне сеанса OSI [3] адрес и порт.

Откройте оболочку и запустите ее как root, используя веб-браузер.

netstat -tulpan

для просмотра текущих и активных подключений [4].

Пример вывода:

# netstat -tulpan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1966/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1902/cupsd          
tcp        0      0 192.168.1.16:57374      172.217.23.165:443      ESTABLISHED 4730/firefox-bin     
tcp        0      0 192.168.1.16:55478      104.26.11.30:443        ESTABLISHED 4730/firefox-bin     
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1996/named          

Строки показывают «УСТАНОВЛЕННЫЕ» соединения Firefox с различными локальными портами, чтобы Firefox мог распознать, какой пакет является ответом на какой запрос.

Другие строки с состоянием LISTEN — это локальные программы, работающие как серверный процесс, включая sshd(Secure Shell Server), cupsd(printer daemon) и named(Bind name server). Они будут принимать входящие соединения.

Ссылки, где можно узнать больше:

[1]https://en.wikipedia.org/wiki/Порт_(компьютерная_сеть)

[2]https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structureа такжеhttps://en.wikipedia.org/wiki/IPv4_header#Заголовок

[3]https://en.wikipedia.org/wiki/OSI_model

[4]https://en.wikipedia.org/wiki/Netstat

решение2

Когда вы делаете a, listenвы указываете порт, так как порт должен быть хорошо известен. Этот конец имеет IP (или более одного) и порт.

Когда вы делаете a, connectвы указываете IP и порт удаленного listener. Локальный IP определяется ОС, и назначается порт (это может быть любое число).

Соединение можно идентифицировать по ( (remote IP, remote port), (local IP, local port) )Это устанавливает верхний предел в 64 тыс. подключений к каждому удаленному порту с любого одного IP-адреса.

Связанный контент