¿Cómo diferencia el protocolo TCP/IP entre clientes?

¿Cómo diferencia el protocolo TCP/IP entre clientes?

Si creamos un socket de escucha, nos devolverá un descriptor (digamos un descriptor raíz) y vincularemos este descriptor a una dirección. Siempre que hay una nueva conexión de cliente disponible, el descriptor raíz nos informa, aceptamos esa nueva conexión y recibimos un descriptor único (digamos descriptor de cliente) para cada cliente. De ahora en adelante podremos comunicarnos con ese cliente usando ese descriptor. La información del cliente se almacena en el inodo separado que señala el descriptor del cliente. Debido a esto, Linux pudo entregar los datos respectivos del cliente a un descriptor respectivo.

Si lo anterior que mencioné es correcto (corríjame amablemente si no entiendo bien), entonces tengo una duda. ¿Cuál es la información del cliente almacenada en el inodo? ¿Cómo identifica Linux al cliente de forma única?

Respuesta1

Los protocolos TCP/IP y UDP/IP conocen una "sesión" que está definida por la dirección IP y el puerto local y remoto [1]. Un paquete TCP/IP, por ejemplo, contendrá la dirección IP y el puerto [2] de origen y de destino. Un servidor o cliente (digamos, Firefox) que tiene más de una conexión abierta distinguirá en la capa de sesión OSI [3] por dirección y puerto.

Abra un shell y ejecútelo como root mientras usa un navegador web.

netstat -tulpan

para ver las conexiones actuales y activas [4].

Salida de ejemplo:

# 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          

Las líneas muestran conexiones "ESTABLECIDAS" por Firefox con diferentes puertos locales para que Firefox reconozca qué paquete es la respuesta a qué solicitud.

Otras líneas con el estado LISTEN son programas locales que se ejecutan como un proceso de servidor, incluidos sshd(Secure Shell Server), cupsd(printer daemon) y named(Bind name server). Estos aceptarán conexiones entrantes.

Referencias para saber más:

[1]https://en.wikipedia.org/wiki/Port_(computer_networking)

[2]https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structureasí comohttps://en.wikipedia.org/wiki/IPv4_header#Header

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

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

Respuesta2

Cuando haces un listenespecificas un puerto, ya que el puerto tiene que ser bien conocido. Este extremo tiene una IP (o más de una) y un puerto.

Cuando haces un, connectespecificas la IP y el puerto del listenservidor remoto. La IP local la determina el sistema operativo y se asigna un puerto (puede ser cualquier número).

La conexión se puede identificar mediante ( (remote IP, remote port), (local IP, local port) )Esto establece un límite superior de 64 K de conexiones a cada puerto remoto, desde cualquier dirección IP.

información relacionada