Comunicación con sockets
technokanoSíntesis4 de Septiembre de 2014
612 Palabras (3 Páginas)250 Visitas
Comunicación con sockets
Introducción a las comunicaciones en red
Un protocolo ampliamente extendido en Internet es el TCP (Transmition Control Protocol). Este protocolo orientado a conexión brinda al programador mayor sencillez en la implementación de aplicaciones distribuidas. Es por ello que se considera al protocolo UDP (Universal Datagram Protocol) como de más bajo nivel que el protocolo TCP, sin embargo ambos protocolo TCP y UDP se ubican en la capa de transporte según el modelo TCP/IP.
Algunas de las ventajas al utilizar TCP son que tiene implementado un acuse de recibo, de modo que no tendremos que preocuparnos por la llegada de los mensajes. Los mensajes enviados tienen asegurada una entrega en orden y sin duplicaciones. En el caso de que no se entreguen los datos, las funciones devuelven un valor de error, lo cual permite llevar a cabo acciones alternativas en nuestras aplicaciones. Por último aunque se envíen grandes bloques de bytes, no es necesaria la subdivisión dentro de la aplicación. El mismo protocolo se encarga de dividirlo en partes mas pequeñas para su correcto envío.
Quizás la principal desventaja de este protocolo es que debido a todos los mecanismos de control implementados, se provoca una mayor carga en la red y los tiempos de comunicación se vuelven más largos.
Cada computadora tiene una dirección ip única. El intercambio de datagramas se realiza a través de la IP del emisor y la IP del receptor. A través de IP se pueden perder, duplicar o desordenar datagramas y no se tienen mecanismos para determinar qué proceso dentro de la máquina es el destinatario del datagrama. Con el desarrollado del protocolo TCP se soluciona el problema anterior. Este es un canal confiable y bidireccional para la transmisión de octetos (no datagramas). Puede atender a varios procesos a la vez manteniendo múltiples conexiones simultáneas. Se maneja el concepto de puerto + IP. El protocolo IP encapsula al protocolo TCP y este a los segmentos de información.
Se tiene otra opción que es el protocolo UDP, el cual no es fiable pero no tiene sobrecarga sobre el proceso. Es parecido a usar IP directamente pero con un puerto de identificación. El encapsulamiento es similar a TCP.
El puerto son enteros cortos de 16 bits en formato big-endian. La dirección IP es un número entero largo de 32 bits (4 octetos) en big endian. Como no todos los sistemas manejan el mismo formato de información entonces se utilizan las siguientes funciones para conversión entre diferentes tipos de enteros tomando en cuenta el orden en los bytes del receptor y el emisor:
#include <netinet/in.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
Las funciones anteriores convierten valores cuyos bytes se encuentran en orden de host a valores cuyos bytes se encuentran en orden de red y viceversa. La función htonl() convierte el entero largo sin signo hostlong desde el orden de bytes del host al de la red. La función htons() convierte el entero corto sin signo hostshort desde el orden de bytes del host al de la red. La función ntohl() convierte el entero largo sin signo netlong desde el orden de bytes de la red al del host. La función ntohs() convierte el entero corto sin signo netshort desde el orden de bytes de la red al del host. En los i80x86 en el orden de bytes del host está primero el byte menos significativo (LSB), mientras que el orden de bytes de la red, tal como se usa en Internet, tiene primero el byte más significativo (MSB). El significado de cada función se muestra a continuación:
htons() host to network short
htonl() host to network long
ntohs() network to host short
...