Universidad de Costa Rica | Escuela de Ingeniería Eléctrica IE-0117 Programación Bajo Plataformas Abiertas Redes TCP/IP 1. Los protocolos TCP/IP Las siglas TCP/IP se refieren al conjunto de protocolos de comunicación usados para la transmisión de datos en Internet y otras redes similares. TCP/IP se diseñó con el propósito de permitir la comunicación a través de redes heterogéneas, lo que permite su uso sobre una gran variedad de medios físicos. Hoy en día existen implementaciones de TCP/IP en todos los sistemas operativos modernos y ha desplazado completamente a otros protocolos en las redes locales. Los protocolos TCP/IP se desarrollaron durante los años setenta, dentro de ARPANET, la red precursora de Internet. En 1983 TCP/IP se convirtió en el conjunto de protocolos oficial de ARPANET (y posteriormente de Internet). El desarrollo de TCP/IP estuvo desde sus orígenes ligado a UNIX. A principios del los años ochenta se incluyó una implementación de TCP/IP en el kernel BSD. Desde entonces TCP/IP ha estado presente en la mayoría de los sistemas operativos tipo UNIX. El conjunto de protocolos TCP/IP puede modelarse como una serie de capas. Cada capa se encarga de una parte distinta del proceso de comunicación y todas son necesarias para que un mensaje pueda transmitirse de un punto a otro. El modelo TCP/IP tiene 4 capas: Enlace, Internet, Transporte y Aplicación: Conexiones de red Host A Router Host B Router Conexiones en las capas Aplicación Aplicación Punto-a-punto Transporte Transporte Internet Internet Internet Internet Enlace Enlace Enlace Enlace Ethernet Fibra, Satelite, etc. Ethernet Este modelo de abstracción permite a un usuario o programador tratar la comunicación como si se estuviera dando directamente desde una capa en un equipo a la capa equivalente en el otro equipo, sin importar que esté pasando en las otras capas. Por ejemplo, es posible navegar en Internet o enviar un correo electrónico (capa de aplicación) sin importar lo que esté sucediendo a nivel físico o en las capas de transporte e Internet. 1 IE-0117 Programación Bajo Plataformas Abiertas Redes TCP/IP 1.1. Capa de Enlace La capa de enlace es la capa de más bajo nivel dentro de la pila de protocolos TCP/IP. Los protocolos de la capa de enlace se encargan de todo lo relacionado con el acceso al medio físico y la interconexión de nodos adyacentes dentro de una red. Los protocolos de la capa de enlace dependen del tipo de conexión física utilizada. GNU/Linux soporta una gran gama de dispositivos: ethernet, wifi, fibra óptica, enlaces telefónicos punto-a-punto (PPP), etc. Si el kernel posee los controladores adecuados, los dispositivos de acceso a la red serán detectados y se les asignará un identificador, cuyo nombre depende del tipo de conexión. Por ejemplo, si una computadora con dos tarjetas de red ethernet, estas podrán accederse usando los identificadores eth0 para la primera tarjeta y eth1 para la segunda. De forma similar, una conexión punto-a-punto activa se denominaría ppp0 (o ppp1, ppp2, etc.). A nivel lógico dentro del sistema, cada dispositivo de acceso a la red se conoce como interfaz. 1.2. Capa de Internet La capa de Internet está a cargo del transporte de datos de un punto a otro. Para esto se utiliza primordialmente el protocolo IP (Internet Protocol). El protocolo IP especifica que los datos deben segmentarse en paquetes o datagramas, que serán enviados de forma independiente hacia el destino. IP es un protocolo no orientado a conexión. Esto significa que el canal por el cual se enviarán los datos no se establece previamente, sino que se construye sobre la marcha dependiendo de las decisiones tomadas por los nodos (routers) que se encuentran entre el origen y el destino. IP es un protocolo no confiable, pues no garantiza que un paquete llegue al destino. Es posible que una paquete sea descartado en el camino debido a congestión en un router, que se corrompa debido a un error en la transmisión de datos o que los paquetes lleguen en desorden debido a que se utilizaron rutas distintas durante la transmisión. Le corresponde a un protocolo de nivel superior verificar que los datos lleguen completos y pedir retransmisiones en caso de que se haya dado algún error. IP asigna a cada nodo conectado a la red una dirección única. De esta forma es posible encontrar el equipo al cual se desea enviar la información. Obviamente, debido al tamaño de la red, un equipo no tiene información de todos los nodos. El envío de los datos se lleva a cabo utilizando múltiples jerarquías de routers, que se encargan de enviar el paquete a su destino. En la actualidad se utiliza la versión 4 del protocolo IP. IPv4 utiliza direcciones de 32 bits, lo que permite un total de aprox. 4000 millones de direcciones. Se espera que en los próximos años se realice una migración a IPv6, que utiliza direcciones de 128 bits (3,4x1038 direcciones posibles) e introduce otras mejoras respecto a la versión actual. 1.2.1. Direccionamiento IPv4 Como se mencionó anteriormente, cada computadora en una red IPv4 tiene una dirección única de 32 bits. Normalmente, las direcciones IP se muestran en base 10, separando cada octeto (byte) con un punto. Por ejemplo, las siguientes son direcciones IP: 10.4.4.25 (00001010.00000100.00000100.00011001) 192.168.15.3 (11000000.10101000.00001111.00000011) 163.178.124.135 (10100011.10110010.01111100.10000111) Toda dirección IP está dividida en dos partes: la primera mitad (bits de la izquierda) corresponde a la red (network) y el resto (bits de la derecha) corresponde al equipo (host). Para determinar cuantos bits corresponden a cada parte es necesario tener un dato conocido como la máscara de red (network mask). La máscara de red se representa también como una dirección IP, en la cual, los bits de la parte de la red tienen un valor de 1 y los del equipo un 0: 16 bits para la red, 16 bits para el equipo: 255.255.0.0 (11111111.11111111.00000000.00000000) 24 bits para la red, 8 bits para el equipo: 2 IE-0117 Programación Bajo Plataformas Abiertas Redes TCP/IP 255.255.255.0 (11111111.11111111.11111111.00000000) 26 bits para la red, 6 bits para el equipo: 255.255.255.192 (11111111.11111111.11111111.11000000) La máscara de red también puede indicarse junto con la dirección IP de la siguiente forma: 10.4.4.25/16 (16 bits para la red: 255.255.0.0) 192.168.15.3/24 (24 bits para la red: 255.255.255.0) 163.178.124.135/26 (26 bits para la red: 255.255.255.192) Para configurar la red en una computadora es necesario contar tanto con la dirección IP como con la máscara de red. Usando una operación Y lógica (AND) entre ambos valores es posible determinar la dirección de red de la computadora: IP : 00001010.00000100.00000100.00011001 (10.4.4.25) MÁSCARA: 11111111.11111111.00000000.00000000 (255.255.0.0) ----------------------------------- (Y LÓGICO) RED : 00001010.00000100.00000000.00000000 (10.4.0.0) La dirección de red es importante al decidir como se va a enviar un paquete: Si la dirección IP destino tiene la misma dirección de red: el paquete se envía directamente. La computadora destino está en la misma red y los protocolos de la capa de enlace pueden encargarse de la entrega de los datos. Si la dirección IP destino tiene una dirección de red distinta: el paquete es enviado a un router para que se encargue de la entrega. La computadora destino está en una red diferente y la computadora fuente no puede hacer envío directamente. Además de la dirección de red, es posible extraer los siguientes datos a partir de la dirección IP y la máscara de red: Tamaño de la red: El tamaño de una red depende de la cantidad de bits disponibles para indicar el equipo: Red 10.4.0.0/16: 16 bits para equipo → 216 = 65536 direcciones Red 192.168.15.0/24: 8 bits para equipo → 28 = 256 direcciones Red 163.178.124.128/26: 6 bits para equipo → 26 = 64 direcciones Primera y última dirección de una red: La dirección de red siempre será la primera dirección. La última dependerá del tamaño de la red: Red 10.4.0.0/16: 10.4.0.0 → 10.4.255.255 Red 192.168.15.0/24: 192.168.15.0 → 192.168.15.255 Red 163.178.124.128/26: 163.178.124.128 → 163.178.124.191 Dirección de difusión (broadcast): La última dirección IP de una red es especial. Esta dirección no puede ser asignada a una computadora, sino que permite enviar datos a todas las computadoras de la red a la vez. Esta dirección se conoce como dirección de difusión o broadcast: Red 10.4.0.0/16: Dirección de difusión 10.4.255.255 Red 192.168.15.0/24: Dirección de difusión 192.168.15.255 Red 163.178.124.128/26: Dirección de difusión 163.178.124.191 3 IE-0117 Programación Bajo Plataformas Abiertas Redes TCP/IP 1.2.2. Puerta de enlace (gateway) Como se mencionó anteriormente, cuando se desea comunicarse con computadoras fuera de nuestra red local, debe utilizarse un router. Normalmente se define un único router, que se encargará de manejar toda la comunicación con redes externas. Este router predeterminado se conoce como puerta de enlace o gateway. Casi siempre se le asigna a la puerta de enlace la primera dirección IP de la red, aunque esto no siempre es así (la puerta de enlace es otro equipo de la red y puede tener cualquier dirección): Red 10.4.0.0/16: Puerta de enlace 10.4.0.1 Red 192.168.15.0/24: Puerta de enlace 192.168.15.1 Red 163.178.124.128/26: Puerta de enlace 163.178.124.129 1.2.3. Direcciones IP privadas Muy a menudo, las direcciones IP públicas disponibles no son suficientes para todas las computadoras de un lugar. Esto hace que sea necesario crear redes internas utilizando otras direcciones IP distintas. Es posible conectar estas redes a Internet a través de un router, sin embargo, es necesario asegurarse que las direcciones que se eligieron para la red interna no vayan a coincidir con las de equipos conectados a Internet. Para este fin existen las direcciones IP privadas: Las direcciones IP privadas están distribuidas en tres ámbitos de IP distintos: 10.0.0.0/8 172.16.0.0/16 192.168.0.0/16 Es posible crear subredes más pequeñas dentro de estos ámbitos cambiando la máscara de red. Una computadora con IP privada puede conectarse a Internet si cuenta con una puerta de enlace adecuada. Sin embargo, no es posible acceder directamente a una computadora con dirección privada desde Internet. Se espera que con la adopción de IPv6 se reduzca el uso de las direcciones privadas, debido a que aumentará la cantidad de direcciones disponibles. 1.2.4. Dirección de loopba (acceso local) Todas las computadoras tienen una interfaz de red especial (en GNU/Linux esta interfaz tiene el nombre lo) con la dirección 127.0.0.1 que permite efectuar conexiones de red internas dentro de la misma computadora. La conexión loopback es usada por varios programas para facilitar la comunicación entre procesos dentro de la computadora. Puede usarse también para realizar pruebas y evaluar programas que funcionan sobre la red sin necesidad de contar con varias computadoras. 1.3. Capa de Transporte La capa de transporte se encarga de enlazar el flujo de paquetes enviados o recibidos usando el protocolo IP con las aplicaciones que utilizan o generan estos datos. Para asociar ciertos datos a una aplicación específica, los protocolos de la capa de Transporte usan un identificador, conocido como puerto. En la capa de transporte se utilizan principalmente dos protocolos: TCP (Transmission Control Protocol): Este protocolo permite enviar datos de forma confiable a través de una red IP. TCP garantiza que los datos lleguen íntegros al destino, usando mecanismos de confirmación y control de errores que permiten solicitar la retransmisión de paquetes en caso de error o pérdida. Debido a esto, TCP es usado por la mayoría de aplicaciones (web, correo electrónico, transmisión de archivos, etc.) UDP (User Datagram Protocol): UDP funciona de manera similar a IP. Es un protocolo no confiable, que entrega cada paquete usando la mejor ruta posible y que no garantiza que los datos llegarán a su destino. Debido a sus características, es un protocolo más rápido que TCP y se usa en circunstancias es las que la velocidad es más importante que la integridad de los datos, como por ejemplo las aplicaciones de voz o video en tiempo real. 4 IE-0117 Programación Bajo Plataformas Abiertas Redes TCP/IP 1.4. Capa de Aplicación Los protocolos de la capa de aplicación definen la forma en que se enviarán o recibirán los datos de una aplicación específica, por ejemplo web o correo electrónico. Existen cientos de protocolos de aplicación distintos. Algunos de ellos son: HTTP (páginas web, puerto 80 TCP) SMTP (correo electrónico, puerto 25 TCP) SSH (shell seguro, puerto 22 TCP) DNS (servidor de nombre de dominio, puerto 53 UDP) SIP (VOIP, puerto 5060 TCP, UDP) 2. Lectura recomendada 1. Internet Protocol Suite. Wikipedia. http://en.wikipedia.org/wiki/Internet_Protocol_Suite. 2. ARPANET. Wikipedia. http://en.wikipedia.org/wiki/ARPANET. 3. Internet. Wikipedia. http://en.wikipedia.org/wiki/Internet. 4. Internet Protocol. Wikipedia. http://en.wikipedia.org/wiki/Internet_Protocol. 5. A Brief History of the Internet. Internet Society. http://www.isoc.org/internet/history/brief.shtml. 6. Internet History. http://www.livinginternet.com/i/ii.htm. 5