Imagine un escenario (simplificado) en el que le gustaría enviar dinero a una cuenta en una transferencia bancaria. Su computadora intenta establecer una conexión TCP con su banco. El primer SYN de su computadora se pierde y, por lo tanto, se retransmite después de un par de segundos. La conexión se establece y su computadora envía el pedido. Nuevamente, el paquete TCP con el pedido se pierde y se reenvía. Entonces la conexión se cierra y todo está bien. La orden ha sido ejecutada.
Desafortunadamente, el primer SYN no se perdió, sino que fue muy lento. Ahora llega al banco. El servidor del banco cree que esta es una nueva solicitud de conexión y responde con un SYN-ACK. Si TCP solo requiere un protocolo de enlace bidireccional, el servidor del banco ahora consideraría la conexión como establecida. Ahora imagine que el paquete TCP con la orden de transferencia de dinero tampoco se perdió, sino que nuevamente fue lento. Ahora llegaría al banco y se trataría como un paquete válido, ya que la conexión ya está establecida. Como resultado, la orden se ejecutaría por segunda vez.
El tercer paquete en el protocolo de enlace TCP evita este escenario, ya que su computadora enviaría un RST cuando reciba el SYN-ACK del banco por la conexión errónea. Por lo tanto, la segunda conexión no se establecerá.
- ¿Cuáles son los protocolos IoT adecuados para transmitir sin cobertura 2G (o superior)?
- En TCP, ¿hay alguna diferencia entre la retransmisión rápida y la recuperación rápida? ¿Cómo se implementan? ¿Puedes explicar?
- ¿Cómo desarrollaría un nuevo protocolo para una nueva aplicación?
- ¿Por qué el Protocolo de integridad de clave temporal era un protocolo de cifrado provisional?
- ¿Qué sucede cuando todos los puertos TCP están reservados?
TCP también usa otros mecanismos para prevenir este escenario. Se describen en RFC 793 (RFC 793 – Protocolo de control de transmisión), en particular cómo elegir el número de secuencia inicial y el retraso requerido antes de aceptar una nueva encarnación de la misma conexión. Sin embargo, el apretón de manos de tres vías es necesario ya que una computadora puede fallar y perder la información del estado después del reinicio. Los detalles se describen en RFC 793 y RFC 1122.