¿Cómo funcionan los puertos TCP?

En un lenguaje simple, los puertos TCP son como los camareros que esperan en el servidor (restaurante) para ofrecer sus servicios a los clientes. Cada servicio se ofrece en un número particular llamado número de puerto TCP. Por ejemplo, cuando un navegador cliente necesita acceder a un sitio web (www.google.com), el servidor en el centro de datos de Google ofrece este sitio web (servicio http) en el puerto TCP número 80. Antes de acceder al sitio web, un proceso de conexión de tres pasos llamado Se realiza un movimiento de tres vías (Syn, Syn ack, ack). Después de que el cliente cierra el navegador, se realiza un proceso de terminación de 4 pasos para finalizar la conexión y es por eso que las conexiones del puerto TCP están orientadas a la conexión de llamadas. La imagen a continuación muestra algunos servicios populares y sus números de puerto.

Me gusta equiparar puertos a una persona en una casa. Vas a una casa en una dirección (dirección IP) y luego preguntas por Bob (puerto). Bob escucha tu llamada a la puerta y cuando la abre, puedes comunicarte con él.

En general, los puertos permiten que una computadora tenga hasta miles de conexiones concurrentes a la vez. Por ejemplo, ejecuto un servidor web y un servidor de correo en la misma computadora, pero ambos son accesibles porque escuchan en diferentes puertos.

TCP ocurre en la capa 4 del modelo OSI. Además del marco de Ethernet y el paquete IP, el segmento TCP agrega un número de puerto. Servicios como un servidor web (generalmente el puerto 80) o un servidor FTP (generalmente el puerto 21) escucharán una conexión, la establecerán mediante un protocolo de enlace y luego transferirán los datos. Digo generalmente porque, en teoría, un servicio puede escuchar en cualquier puerto, con mayor frecuencia aparecen en estos puertos “conocidos” designados por IANA.

No estoy seguro de si tiene curiosidad acerca de la idea de un puerto o el protocolo TCP, por lo que profundizaré un poco más.

Este protocolo de enlace de 3 vías se realiza mediante indicadores en el protocolo TCP. Cuando una computadora quiere iniciar una conexión, enviará un segmento TCP con la bandera SYN activada, abreviatura para sincronizar. Esto es equivalente a llamar a la puerta de Bob. Bob responderá a la puerta con las banderas SYN y ACK encendidas, reconociendo el golpe. Finalmente, saludamos a Bob enviando un segmento con solo la bandera ACK activada. Ahora la conexión está establecida y los datos reales pueden comenzar a transferirse.

En TCP, cada sección de datos que se envía es reconocida por la computadora receptora. Durante este apretón de manos, las computadoras deciden los números que usarán para identificar la primera sección. Después de eso, los segmentos solo aumentan en uno.

Este uso de envío y reconocimiento requiere un poco más de sobrecarga (potencia de procesamiento), pero garantiza que todos los datos se enviarán y organizarán en el orden correcto. Si la computadora que envía no recibe un ACK, reenviará el segmento. Usando esos números de segmento del apretón de manos, la computadora receptora puede colocar ese segmento en el lugar correcto incluso si llegó tarde.

Para cerrar una conexión, las computadoras usan las banderas FIN y ACK para terminar formalmente. Si una computadora desea finalizar antes de que se complete un protocolo de enlace, se utiliza el indicador RST.

El otro protocolo de transporte que opera en el nivel 4 es UDP. El protocolo UDP no tiene forma de reconocer si los datos se han recibido o no, por lo que hoy en día se usa con más frecuencia para transmisión de video o VOIP. Si se pierde un fotograma de una película o una pequeña pieza de audio, nadie se da cuenta realmente. También es mucho más rápido. Apenas hay gastos generales en comparación con TCP.

El lado del software de los puertos se llama sockets. Si quieres probar esto por ti mismo, el módulo de sockets Python es bastante fácil de implementar. Hay un montón de tutoriales sobre cómo crear un sistema servidor / cliente simple, incluso en la misma computadora, para enviar mensajes de ida y vuelta o hacer eco de lo que dices. Hay muchas cosas geniales que puedes hacer con él. Implementé el protocolo de correo SMTP para un proyecto este semestre.

Los puertos TCP y UDP son medios para compartir esos protocolos entre múltiples procesos y sesiones con múltiples hosts remotos.

Un flujo TCP y UDP se define como la combinación de IP local + PUERTO local + IP remota + PUERTO remoto.

Esto permite que un solo host tenga millones de conexiones separadas incluso con un límite de puerto de 16 bits (en teoría, 64k puertos).

Un solo proceso local puede usar un solo puerto para escuchar conexiones de millones de hosts, usando el mismo puerto local + ip local.

Desde el lado de la aplicación, la magia ocurre con sockets y descriptores de archivos que se refieren a un socket.

En UDP, un socket normalmente maneja todo el tráfico que se refiere a un solo puerto local o puerto local + ip local. El mismo socket puede recibir tráfico de millones de otros hosts. Depende de la aplicación identificar el puerto / ip remoto (con recvfrom / recvmsg) y separar una sesión de la otra.

Funcionan muy bien, pero solo después de un espresso.

Un puerto es solo un punto de código en un espacio de nombres. Un proceso del servidor espera una conexión entrante en un puerto. Una vez aceptado, las dos mitades de la conexión se unen y los datos pueden fluir.

Un puerto TCP es solo un número de 16 bits. Identifica un punto de acceso al servicio en la máquina al que se dirige el paquete TCP. Una aplicación de socket en esa máquina puede crear un socket TCP, vincularlo a ese número de puerto, luego escucharlo y puede recibir una solicitud de conexión TCP enviada a ese número de puerto. Hay algunos números de puerto reservados bien conocidos, por ejemplo, el número de puerto 7 se usa para el servicio de eco (repite los datos que envíe) y el número de puerto 23 se usa para el servicio Telnet.

Hace varios años tuve que explicar los puertos y sockets TCP () a varios graduados nuevos.

Utilicé la analogía de una radio con un condensador variable (VC) para explicar el papel de los puertos TCP.

A medida que encienda el VC, escuchará diferentes canales en diferentes frecuencias. Una vez que haya seleccionado un canal, comienza a escuchar. El canal de radio es similar a un puerto TCP que apunta a un servicio TCP particular (HTTP, SMTP, etc.). La analogía ayudó a explicar los puertos y sockets (dirección IP más puerto).