Pregunta
Me estoy confundiendo entre TCP orientado a la conexión y UDP sin conexión, así que alguien aclare esto.
-
Toda comunicación entre dos computadoras, ya sea TCP o UDP, es a través de paquetes. No hay conexión de cable duro entre dos pares, ya sea TCP o UDP. Entonces, ¿por qué se dice que TCP está orientado a la conexión solo porque retransmite los paquetes si no se recibe confirmación o incrusta el número de secuencia dentro de los paquetes?
-
¿Cuál es el significado real de la conexión? ¿Los enrutadores a lo largo del camino entre dos pares comunicantes reservados durante algún tiempo para aceptar paquetes para esa conexión en particular?
EDITAR
- ¿Cuándo dice que se establece la conexión entre dos puntos?
Gracias
Solución
Una conexión es simplemente una ruta virtual entre dos puntos finales. Con TCP, abre la conexión y comienza a enviar datos. Se garantiza que llegará al otro extremo en orden (suponiendo que la red no falle). Luego cierra la conexión.
Durante la duración de la conexión, los dos extremos se comunican entre sí, acusando recibo de los paquetes, para garantizar que no haya pérdida ni duplicación.
Con UDP, es ligeramente diferente. Básicamente, simplemente arroja un paquete con una dirección de destino y puede o no llegar: esa es la U en UDP (poco confiable).
No debe dejarse llevar por el pensamiento de que la conexión de TCP da como resultado que todos los paquetes tomen la misma ruta física. Se enrutarán alrededor de las áreas problemáticas si es necesario.
En cuanto a su actualización, la conexión se establece después de lo siguiente:
- un paquete
SYN
ha sido enviado desde el iniciador. - el respondedor ha enviado un paquete
SYN-ACK
. - el iniciador ha enviado otro paquete
ACK
.
Este es el protocolo de establecimiento de sesión para TCP. Los paquetes en sí son paquetes normales con las banderas SYN
y / o ACK
establecidas en el encabezado.
El libro fundamental sobre TCP (y otros protocolos) es Stevens , consíguete una copia de esto si quieres una versión de árbol muerto, la he tenido por siglos. O, por supuesto, está el Wikipedia . Ambos son bastante pesados ??para el investigador casual, pero vale la pena si estás interesado en profundizar; mi preferencia sería para el libro, está a la altura de Knuth en mi estantería.
Otros consejos
Sí, TCP incrusta números de secuencia y realiza muchos otros procesos para simular " una conexión punto a punto dedicada a través de una red orientada a paquetes y sin conexión.
UDP no lo hace; cada datagrama se entrega de forma totalmente independiente de cualquier otro datagrama.
Primero responderé tu segunda pregunta. Lo que escribió ("establecer una ruta") que ocurre en algunas arquitecturas de red (llamadas de voz GSM, por ejemplo) pero no en Internet se llama conmutación de circuitos . Con la conmutación de circuitos, la propia infraestructura de red es consciente de que se está produciendo una comunicación entre los dos puntos finales. La pila TCP / IP, sin embargo, está diseñada para ser paquete conmutado . Significa que cada paquete es una información separada que se entrega al otro punto final y no está relacionado con ningún otro paquete (como publicar un mensaje).
Como consecuencia, los protocolos de nivel inferior en la pila de IP no garantizan que:
- los paquetes se reciben en el destino
- los paquetes se reciben en un orden particular
- los paquetes se reciben en el destino solo una vez
UDP en particular, no intenta resolver estos problemas. Por otro lado, el protocolo TCP tiene que deshacerse de estos problemas. Utiliza acuses de recibo y números de secuencia de paquetes para manejarlos. En TCP, un solo paquete no está relacionado con otros paquetes. Como resultado, ambas partes deben negociar una ruta de comunicación simulada integrada en la IP sin estado. Esta negociación se llama conexión. Básicamente se trata de establecer una relación entre los paquetes en una cadena.
Los enrutadores no tienen conocimiento de la conexión. La conexión es un concepto lógico TCP que agrega la confiabilidad de la entrega de paquetes que UDP carece. Sin embargo, los enrutadores solo están interesados ??en IP, TCP, UDP, cualquier otra cosa que sean capas encima de IP. Los enrutadores enrutan paquetes IP sin tener en cuenta los altos protocolos que contienen.
El dos las definiciones de Wikipedia me parecen claras
En telecomunicaciones, sin conexión describe la comunicación entre dos puntos finales de red en los que un mensaje se puede enviar desde un punto final a otro sin previo acuerdo. los dispositivo en un extremo de la comunicación transmite datos al otro, sin primero asegurándose de que el destinatario disponible y listo para recibir el datos. El dispositivo enviando un mensaje simplemente lo envía dirigido a la destinatario previsto.
...
Una red de conexión orientada protocolo es uno que ofrece una secuencia de datos en el mismo orden en que estaba enviado, después de establecer un sesión de comunicación.
No creo que pueda mejorar esas definiciones, pero permítanme intentar explicarlo desde la perspectiva de la programación de socket, entendiendo que socket es la interfaz de programación para TCP / UDP . Específicamente, si programa sockets del servidor, digamos en Java, notará cómo esta naturaleza orientada a la conexión y sin conexión de TCP y UDP afecta respectivamente el modelo de programación.
En una aplicación cliente-servidor basada en TCP, antes de realizar cualquier comunicación de datos, debe establecerse una conexión entre un socket de cliente con un socket de servidor, correspondiente a ese socket de cliente. En el servidor, necesitaría crear un ServerSocket
y luego llamar a accept ()
para obtener un Socket
correspondiente a la conexión de un cliente. Uno de estos sockets se crea para comunicarse con cada conexión desde cualquier cliente remoto en particular (que se inicia creando instancias de la clase Socket
). Puede consultar esta muestra de código para obtener detalles. .
Por otro lado, si programa UPD, el socket de su servidor es básicamente un objeto DatagramSocket
que escucha en un puerto y recibe todos los datagramas que se le envían, así como también puede enviar datagramas a el socket de cualquier cliente en particular. Es decir, un socket de servidor que sirve a todos los clientes porque no hay una conexión de extremo a extremo entre ninguna conexión de cliente y el servidor. (Tenga en cuenta que tampoco es necesario el paso `` serverSocket # accept ()
''). En otras palabras, cada cliente y servidor puede enviar datagramas sin tener que preocuparse de si el otro punto final está listo para recibir los datagramas o no. Puede consultar esta muestra de código para obtener detalles. .