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.