2011-04-28 25 views
14

Me acabo de enterar de esta cosa extraña que llegué a ver la aplicación es que por defecto usan la función SOCK_STREAM. ¿Por que es esto entonces? ¿Esto SOCK_STREAM solo crea múltiples transmisiones? o es la función estándar SOCK_STREAM disponible para crear secuencias TCP?Cosa extraña: SOCK_DGRAM y SOCK_STREAM?

Pensé que el tsunami se basa en UDP pero todavía tiene algunas características como la de TCP, p. Ej. TCP equidad, amistad, etc.

¿Alguien podría arrojar algo de luz sobre este tema? Estoy totalmente confundido sobre este .. un total de no ir por mi cuenta :(

Respuesta

6

Actualización: mi respuesta no más parece relevante, pero la pregunta original que se refiere UDT, que es un protocolo orientado a la conexión construido sobre . encima de UDP Más información aquí: http://en.wikipedia.org/wiki/UDP-based_Data_Transfer_Protocol


UDT parece proporcionar API, que imita clásico sockets BSD API, por lo que puede ser utilizado como un reemplazo directo, tanto para aplicaciones orientadas datagramas corriente y Check ejemplo. sendmsg y recvmsg - ambos lanzan una excepción si se usan en un socket creado con SOCK_STREAM, y toda la corriente orienta Las API ted arrojan una excepción para el socket creado con SOCK_DGRAM también.

En caso de SOCK_DGRAM que realizar algún procesamiento adicional sin embargo, no se limita a envolver el socket UDP de forma transparente en este caso - por lo que yo entiendo el código después de una revisión rápida (no estoy familiarizado con las partes internas o UDT especificación de protocolo). Leer el technical papers podría ayudar mucho.

La biblioteca siempre crea su zócalo subyacente, "real" como datagrama (ver channel.cpp, CChannel::open).

25

TCP casi siempre usa SOCK_STREAM y UDP usa SOCK_DGRAM.

TCP/SOCK_STREAM es un protocolo basado en la conexión. La conexión se establece y las dos partes mantienen una conversación hasta que la conexión termina por una de las partes o por un error de red.

UDP/SOCK_DGRAM es un protocolo basado en datagramas. Usted envía un datagrama y obtiene una respuesta y luego la conexión finaliza.

  • Si envía varios paquetes, TCP se compromete a entregarlos en orden. UDP no, por lo que el receptor debe verificarlos, si el orden es .

  • Si se pierde un paquete TCP, el remitente puede decirlo. No es así para UDP.

  • Los datagramas UDP tienen un tamaño limitado, de la memoria creo que es 512 bytes. TCP puede enviar bultos mucho más grandes que eso.

  • TCP es un poco más robusto y realiza más comprobaciones. UDP es un tono más liviano (menos estrés en la computadora y en la red).

Elija el protocolo adecuado para la forma en que desea interactuar con la otra computadora.

+0

Uso una pila IP de EMBOS. Creé un socket de tipo SOCK_DGRAM.Pero la función de selección se invoca solo la primera vez que recibo un paquete UDP ... ¿Hay algo que ver con el tipo de socket en este caso? –

+0

@GinuJacob - No sé nada sobre EMBOS. Crea una nueva pregunta y selecciona etiquetas (como "EMBOS") que atraerán a personas con las habilidades adecuadas para ayudarte. –

+1

UDP/SOCK_DGRAM es un protocolo basado en datagramas, que implica NO conexión. Envía cualquier cantidad de datagramas y recibe cualquier cantidad de datagramas. Es un "servicio poco confiable". –

Cuestiones relacionadas