Programación de comunicacións en rede
Sumario
Distintos modelos de comunicacións entre procesos
Na unidade didáctica primeira:
- aprendeuse a desenvolver aplicacións compostas de múltiples procesos que se comunican entre si mediante mecanismos de entrada/saída (E/S) secuenciais, de xeito que uns procesos poden ler datos de ficheiros ou streams xenerados por outros.
- analizáronse os distintos tipos de sistemas existentes dependendo de se tiñan un procesador (sistemas monoprocesadores) ou varios (sistemas multiprocesadores). E neste último caso, segundo:
- se compartían memoria e sistema de E/S (sistemas multiprocesadores fortemente acoplados)
- se non compartían (sistemas multiprocesadores débilmente acopaldos)
- e un caso particular destes últimos, son os sistemas distrbuídos
- aprendeuse a desenvolver aplicacións compostas de múltiples fíos que se comunican entre sí mediante memoria compartida, de xeito que o que un fío esribe na memoria pódeno ler directamente os demáis; a memoria compartida permite a comunicación entre obxectos, e polo tanto de máis alto nivel, flexible e natural.
Os modelos anteriores (procesos que se comunican mediante E/S e fíos que se comunican mediante memoria compartida) son axeitados para sistemas monoprocesadores e tamén para sistemas multiprocesadores fortemente acoplados que comparten memoria e o sistema de E/S, baixo o control dun único sistema operativo.
Nesta unidade aprenderase a desenvolver aplicacións concurrentes apropiadas para sistemas distribuidos; os procesos executanse en distintos procesadores de sistemas independentes, e comunícanse a través dunha rede mediante protocolos estándares de comunicacións.
É posible distinguir dous modelos particulares:
- o modelo cliente/servidor (C/S), onde algúns procesos (procesos servidores) proporcionan servizos a outros (procesos clientes)
- o modelo entre iguais ou P2P (peer to peer), onde todos os procesos cooperan entre si y funcionan de xeito similar, sen que haiba unha especialización dos procesos.
Modelos desde a perspectiva histórica
Os distintos modelos pódense enmarcar nunha perspectiva histórica, en tres etapas:
- Computación illada. Ata os anos 80 os ordenadores funcionaban de xeito independente e non estaban conectados entre si. Non había comunicación entre procesos que se executaban en ordenadores distintos.
- Computación en redes locais C/S. A partir dos anos 80 xeneralizanse as redes locais no ámbito empresarial; nestas redes existían ordenadores especializados nos que se executan procesos servidores, que proporcionaban servizos a outros procesos dentro da red local (clientes). A comunicación entre procesos realizábase mediante protocolos de rede privativos (non estándares).
- Computación distribuida. A irrupción da web durante os anos noventa extendeu o uso de internet máis alá dos ambitos militares, académicos e de investigación xeneralizándose o seu uso doméstico e empresarial. Os novos protocolos de rede estándares de internet sustituíron os protocolos privativos nas redes locais, o que fixo posible unha comunicación en rede non restrinxida ós limitesdas redes locais, e que permite a comunicación a través de internet entre procesos que se poden executan en dous ordenadores calquera do mundo.
Esta evolución non implica que os modelos de computación illada e en redes locais C/S) desapareceran; simplemente gañou relevancia o modelo distribuído de computación.
A xeneralización de internet fixo que os protocolos de rede estándares sobre os que está baseada sexan os que se utlizan para a comunicación entre procesos: aa familia de protocolos TCP/IP.
Estes permiten o funcionamento das aplicacións independentemente de onde se executen os procesos. Na actualidade a familia de protocolos de TCP/IP está disponible de serie en calquera sistema operativo e permite polo tanto a comunicación entre procesos:
- en ordenadores de distintas redes locais
- dunha mesma rede local
- ou nun mesmo ordenador
Modelo de niveles de TCP/IP
As comunicacións a través de redes de ordenadores realízanse a través dun modelo en capas ou niveis (layers):
- cada nivel proporciona determinados servizos os niveles superiores
- o nivel máis baixo é o físico, ó que pertencen o hardware de ordenadores e de redes
- o máis alto é o de aplicación, que proporciona servizos a programas de aplicación que se comunican entre sí
- no medio hai varios niveles, cada un dos cales utiliza servizos proporcionados polo nivel inferior e proporciona servizos ó nivel superior.
- ós servizos que proporciona un nivel accédese utilizando determinados protocolos.
O primeiro modelo por niveles para comunicacións en rede foi o modelo OSI (Open Systems Interconnection) proposto pola organización ISO (International Organization for Standardization).
Na actualidade impúxose o modelo de TCP/IP sobre o que se construíu internet. O seu nivel superior (aplicación) inclúe os tres niveles superiores do modelo OSI (aplicación, presentación e sesión). As entidades que funcionan en cada nivel acceden os servizos proporcionados por entidades do nivel inferior mediante protocolos. Para este modelo desenvolveuse un conxunto ou pila de protocolos (protocol suite ou protocol stack). En cada nivel hai un ou varios protocolos baseados nos protocolos do nivel inferior e nos que se basean os protocolos do nivel superior.
[correspondencia entre os niveles do modelo de TCP/IP e os do modelo OSI].
Dispositivos por capas
Existen diferentes dispositivos que interveñen nas comunicacións de rede, cada un traballando en diferentes niveles do modelo de TCP/IP.
- os hubs interconectan os ordenadores dunha rede local do xeito máis sinxelo: replica e trasmite instantáneamente o resto de ordenadores da rede local a información que lle chega. Funcionan a nivel de capa física
- os switches fan a mesma misión pero de xeito "máis intelixente": a información enviada polo ordenador de orixe vai directamente ó ordenador de destino sen replicarse no resto de equipos que estén conectados. Implementan os niveles físico e de enlace
- os routeres fan posible a interconexión entre distintas redes. Implementan os niveles físico, de enlace e de rede.
- os hosts son ordenadores conectados a unha rede e implementan todos os niveis. Engaden pois os niveles de transporte e de aplicación.
Servizos proporcionados por cada nivel
O nivel de rede non pode garantir por si mesmo a entrega de todos os paquetes de datos enviados nin que se reciben en destino na mesma orde na que se envían. O nivel de transporte pode proporcionar un servizo de comunicación fiable de extremo a extremo entre dous hosts que pode garantizar a recepción de todos os datos enviados e na mismo orden na que se envían.
| Nivel | Entidades conectadas | Agrupación de datos | Servizo que proporciona o nivel |
|---|---|---|---|
| Enlace | Interfaces de red | Trama | Comunicación entre dúas interfaces ou tarxetas de rede dunha mesma rede local, con conexión física directa a través dun switch ou de varios switches interconectados entre sí. O nivel de enlace pode proporcionar un servizo de entrega fiable de tramas sobre un nivel físico non fiable, detectar as tramas con erros e as tramas non recibidas, e solicitar a súa retransmisión. |
| Rede | Hosts | Datagrama IP (paquete de datos) | Comunicación entre dúas interfaces de rede, host interfaces ou hosts. O término host pódese referir a unha interfaz de rede conectada a unha rede (host interface) ou ordenador ó que pertence a interfaz (host computer). A cada interfaz de red se lle asigna un enderezo IP. O nivel de rede comunica distintas interfaces mediante o protocolo IP, cun servizo de entrega de paquetes de datos ou datagramas que non garantiza a súa entrega (poden non chegar o seu destino) nin a súa entrega en orde (poden non chegar na mesma orde en que foron enviados). As interfaces poden pertencer a unha mesma rede local ou a distintas redes locales interconectadas a través dun ou máis routers ou encamiñadores intermedios. Un router permite conectar redes distintas: dispón de varias interfaces de rede, e cada unha pode estar conectada a unha rede distinta. |
| Transporte | Portos nun host | Segmento | Transmisión de datos entre dous portos, cada un nun host. Existen dous protocolos no nivel de transporte:
|
| Aplicación | Procesos | Datos | Transmisión fiable dunha secuencia de bytes entre dous procesos, cada un dos cales execútase nun host ou ordenador distinto. |
Nivel de enlace
O nivel de enlace comunica interfaces de rede directamente conectadas físicamente entre si mediante un mesmo switch ou ben a través de varios switches interconectados entre si. Unha interfaz de rede corresponde a unha tarxeta física de rede.
Cada tarxeta de rede ven identificada por un enderezo MAC de 48 bits (6 bytes) única, fixa e que ven grabada de fábrica. Adoita representarse cada byte con dous díxitos hexadecimais, e todos os bytes separados por dous puntos.
98:28:a6:18:5f:18
O enderezo mac pódese consultar cos comandos: ipconfig /all (en windows) ifconfig ou ip (en linux)
Nivel de rede
As tarxetas de rede comunícanse a nivel de rede mediante o protocolo IP. Cada tarxeta identificarase por un enderezo IP e unha máscara de rede: é o sistema operativo o que asigna esta configuración de IP á tarxeta de rede:
- mediante configuración manual
- ou de xeito automático mediante protocolos coma DHCP
Existe unha interfaz de red especial non asociada a ningún dispositivo físico :a interfaz de loopback, que se pode utilizar para comunicarse con procesos que se executan na mesma máquina. Adoita utilizarse o alias localhost para referirse a esta interfaz.
Hay dúas versións do protocolo IP: IPv4 e IPv6. O formato de enderezo IP é distinto para cada unha, e tamén o son as súas posibilidades.
IPv4: IP versión 4
É a versión máis ampliamente utilizada: un enderezo IPv4 é un identificador de 32 bits (4 bytes). Adoita escribirse polo formato coñecido coma notación decimal punteada: catro números decimais (un por cada byte, de 0 a 255) separados por puntos.
192.168.21.42
Esta enderezo divídese en dúas partes:
- unha parte ó principio que identifica á rede
- e o resto que identifica ó host dentro da rede
O número de bits da primeira parte é a lonxitude de máscara. A máscara de rede é un número binario formado por tantos bits a un coma a lonxitude da máscara de rede, tendo o resto a cero.
Por exemplo se a máscara de rede para o anterior enderezo IP e de 24 bits, pódese representar en notación decimal punteada coma
255.255.255.0 os 24 primeros bits a un e os oito últimos a cero
Póedese amosar tamén indicando a lonxitude da máscara tras o enderezo IP:
192.168.21.42/24 A rede é 192.168.21.0/24 O valor dos últimos 8 bytes (42) indica o host dentro da rede
Existe un enderezo especial dentro de cada rede local: o enderezo de de broadcast. Utilízase para facer referencia a todos os hosts da rede, e obtense poñendo a un todos os bits da parte de host.
Seguido o exemplo, o enderezo de broadcast para a rede 192.168.21.0/24 é:
192.168.21.255
A interfaz de loopback ten tamén un enderezo especial:
127.0.0.1
Existen varios rangos de enderezos reservados para o seu uso en redes locales, especificados na RFC 1918. Estes son enderezos privados o locais:
| Tipo | Lonxitude de máscara | Redes posibles | Rango de enderezos para hosts | Enderezo de broadcast para unha rede |
|---|---|---|---|---|
| A | 8 | 1 red de tipo A: 10.0.0.0/8 | 10.0.0.1 a 10.255.255.254 |
10.255.255.255 |
| B | 16 | 16 posibles redes de tipo B: 172.X.0.0/16, con 16 <= X <= 31 |
172.X.0.1 a 172.X.255.254 |
172.X.255.255 |
| C | 24 | 256 posibles redes de tipo C: 192.168.X.0/24, con 0 <= X <= 255 |
192.168.X.1 a 192.168.X.254 |
192.168.X.255 |
IPv6: IP versión 6
Está reemplazando gradualmente a IPv4. Un enderezo IPv6 consta de 128 bits (16 bytes). Os sistemas operativos actuais configuran as interfaces tanto para IPv4 coma para IPv6.
Os enderezos IPv6 adoitan mostrarse en grupos de 2 bytes, representado cada byte por un par de díxitos hexadecimales cos grupos separados por dous puntos. Os grupos que conteñen só ceros pódense omitir. Por exemplo:
fe80::3a4d:4aff:feb5:634a
O enderezo IPv6 para a interfaz de loopback é
::1 En binario son cento vintesete ceros seguidos dun díxito uno
Os enderezos de rede (IP) pódense amosar cos mesmos comandos que os enderezos de enlace (MAC). O resultado amosa información da capa de rede coma:
- enderezo ip (v4 ou v6)
- máscara de rede (para v4)
- enderezo de broadcast (para v4)
Nivel de transporte
As comunicacións no nivel de transporte (cos protocolos de transporte UDP e TCP) realízanse entre un porto nun host e outro porto doutro host. Un porto identifícase por un número de porto de 16 bits (con valor de 0 a 65.535).
A combinación dunha IP máis un número de porto é un socket. Porén, a comunicación a nivel de transporte é entre dous sockets.
As diferenzas entre os protocolos son:
- UDP (user datagram protocol). É un protocolo non orientado a conexión que engade moi pouco ó servizo proporcionado polo nivel de rede. Envía paquetes de datos independentes chamados datagramas de UDP ou datagramas de usuario (user datagrams). Non realiza control de erros que se podan dar na capa de rede nin xestiona a retransmisión doos paquetes de datos que non chegan ou chegan con erros; e tampouco garantiza a entrega dos paquetes ó receptor na mesma orde en que os enviou o emisor.
- TCP (transport control protocol). É un protocolo orientado a conexión que, antes de realizar a transmisión de paquetes de datos, establece unha conexión lóxica. Todos os paquetes transmitidos son dentro desa conexión lóxica e teñen un número de secuencia. Este protocolo proporciona transmisión de datos fiable. Os datos recíbense no destino na mesma orde na que se enviaron na orixe. Para os paquetes perdidos ou erróneos solicítase a retransmisión.
Distínguense tres rangos de portos para os protocolos de transporte TCP y UDP, utilizados con distintos fines:
- Portos do sistema ou well known ports (0 a 1023). Asignados a determinados servizos ou protocolos estándares de nivel de aplicación. Un proceso servidor debe executarse con privilexios de superusuario para recibir comunicacións desde outros procesos (clientes) por portos neste rango. Veremos no nivel de aplicación os protocolos máis coñecidos, e a qué porto están asociados.
- Portos rexistrados (1024 a 49.151). Reservados por empresas e organizacións para os seus propios servizos. Por exemplo, un servidor de bases de datos MariaDB ou MySQL acepta peticións de conexión no porto 3306 de TCP.
- Portos efímeros (49.152 a 65.535). Poeden usalos libremente procesos clientes e servidores.
Os programas servidores ofrecen os seus servizos en portos nos anteriores rangos (de sistema ou rexistrados). Os procesos clientes comunícanse con eles desde portos efímeros. Cando un proceso servidor co protocolo TCP recibe unha petición de conexión dun proceso cliente, reserva un porto efímero para a comunicación con ese cliente, confirma a conexión ó cliente e indícalle ese número de porto. A partir dese intre a comunicación entre os procesos cliente e servidor lévase a cabo entre ambos portos efímeros.
Nivel de aplicación
Os protocolos de nivel de aplicación impleméntanse sobre os protocolos de transporte:
- UDP
- para protolos nos que prima a rapidez de transmisión sobre a fiabilidade
- e cando a cantidade de datos que transmitir é pequena, ou se non importa que os datos se reciban na mesma orde en que se envían
- TCP
- os que requiren unha comunicación fiable
- ou a transmisión dunha cantidade considerable de datos en secuencia
Exemplos de utlización de TCP * Transferencia de ficheiros con FTP * Navegación web con HTTP ou HTTPs
Exemplos de utilización de UDP * asignación de ips con DHCP * resolución de nomes con DNS * videoconferencia con RTP (Real-time Transport Protocol)
Resolución de nomes
É moi habitual referirse a un host mediante un nome no nivel de aplicación (coma por exemplo cando navegamos por internet introducimos o nome da web e non a súa ip); mais nos niveles inferiores de transporte e de rede un host ven identificado por un enderezo IP.
Cun exemplo, cando accedemos mediante un navegador web a http://www.udc.es, www.udc.es é un nome que identifica un host; pero para establecer unha comunicación con él a nivel de transporte debe ser identificado mediante un enderezo IP.
Existen no sistema operativo servizos de resolución de nomes que permiten obter o enderezo (ou enderezos) IP correspondentes a un nome dado. Imos ver dous mecanismos distintos.
Resolución de nomes local
Basease no contido de ficheiros locais nos que se especifican asociacións entre nomes e enderezos IP:
/etc/hosts (en Linux) C:\Windows\System32\drivers\etc\hosts (en windows)
Un exemplo do contido deste ficheiro:
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost 127.0.0.1 www.probasitioiis.com 192.168.10.10 homestead.test
O contido deste ficheiro permiten acceder a un servidor web de IIS (www.probasitioiis.com) na propia máquina con introducir 127.0.01 ou a homestead.test en lugar de http://192.168.10.10.
Cal é o inconvinte deste sistema? A súa xestión manual faino incapaz de abarcar a resolución de todos os enderezos de internet.
O protocolo DNS
Permite obter o enderezo IP para un nome en formato DNS (Domain Name System), coma por exemplo
www.wikipedia.org
Podense obter do servidor de DNS 8.8.8.8 (este é o de google, pero pódese usar outro) os enderezos IPv4 e IPv6 correspondentes o anterior nome co comando nslookup (ou cos comandos dig ou host):
$ nslookup www.wikipedia.org 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: www.wikipedia.org canonical name = dyna.wikimedia.org. Name: dyna.wikimedia.org Address: 91.198.174.192 Name: dyna.wikimedia.org Address: 2620:0:862:ed1a::1
É preciso configurar axeitadamente unha máquina coma cliente do protocolo DNS para poder navegar de xeito efectivo por internet introducindo nomes en lugar de ips. Esta configuración consiste en especificar o enderezo IP de un ou máis servidores de DNS os que se consulta mediante o protocolo DNS para obter o enderezo IP correspondente a un nome dado.
Práctica
Resumo
- Os protocolos de comunicación de nivel de transporte UDP y TCP permiten a comunicación entre procesos que se executan en distintos ordenadores (e que por tanto non comparten memoria).
- DNS
- é un protocolo importante que proporciona resolución de nomes a enderezos IP.
- fai posible o uso de nomes en lugar de enderezos IP para facer referencia a máquinas determinadas.
- A comunicación entre procesos con estos protocolos faise a través de sockets.
- Un socket para un protocolo de transporte (sexa UDP ou TCP) está ligado a:
- a unha interfaz de rede
- a un número de porto
- UDP
- é un protocolo de transporte non orientado a conexión que proporciona un servizo de entrega de paquetes individuais de datos chamados datagramas de UDP ou datagramas de usuario
- Non garantiza a súa entrega nin que cheguen ó seu destino no mesmo orden en que se envían desde a orixe.
- No propio datagrama está o enderezo IP e o porto de orixe; isto é todo o preciso para enviar datagramas de resposta.
- TCP
- é un protocolo de transporte orientado a conexión que proporciona un servicio de entrega fiable de segmentos de datos, unha vez establecida unha conexión, a través de streams asociados á conexión; de xeito que o que un proceso escribe nun stream de saída obteno o outro dun stream de entrada, estando ambos streams conectados.
- Con TCP hay dous tipos de sockets:
- Os sockets de servidor serven para recibir peticións de conexión por parte de clientes.
- Unha vez establecida a conexión, cliente e servidor comunícanse a través de sendos sockets de comunicación, cada un ligado a un stream binario de saída e outro de entrada, de xeito que o stream de salida de un está conectado o de entrada do outro; o que permite para ambos procesos o envío e recepción de datos en modo full duplex.
- Existen:
- protocolos de aplicación baseados en texto e protocolos binarios, xa usen UDP ou TCP
- protocolos de aplicación con estado e sen estado. Os protocolos con estado son más difíciles de programar; podense facer con base nunha máquina de estados baseada no diagrama de estados para o servidor do protocolo.
- Pódense programar servidores multifío para protocolos de aplicación
- baseados en UDP, que poden crear novos fíos para responder a datagramas de UDP particulares; isto mellora o tempo de resposta e proporciona un mellor servizo.
- baseados en TCP, que crean novos fíos para xestionar novas conexións de clientes; isto permite atender a máis dun cliente á vez.