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

¿Fue útil?

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. .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top