Xeración de servizos en rede

De MediaWiki
Ir a la navegación Ir a la búsqueda

Servizos en rede e protocolos estándares de nivel de aplicación

A unidade didáctica anterior adicouse á programación de aplicacións que se comunican entre sí utilizando os protocolos de transporte UDP e TCP. Desenvolveronse programas por parellas:

  • un programa servidor
  • un programa cliente

Ambos seguen unhas determinadas convencións para comunicarse entre sí. Estas convenciones establecen:

  • qué parte pode comunicarse coa outra en cada momento
  • o tipo de información que pode enviarlle
  • as accións que a outra parte pode ou debe realizar ó recibila
  • a información que debe enviar como resposta

En definitiva, pódese dicir que implementan un protocolo de nivel de aplicación sobre un protocolo de nivel de transporte, actuando un dos programas como servidor dese protocolo e o outro coma cliente.

Protocolos estándares de nivel de aplicación

Existen protocolos estándares de nivel de aplicación baseados nos protocolos de transporte UDP e TCP que proporcionan diferentes servizos ás aplicacións. Estos son estándares de internet especificados nun documento RFC (Request for Comments) do IETF (Internet Engineering Task Force).

Moitos dos protocolos máis utilizados de nivel de aplicación funcionan sobre TCP; os que funcionan sobre UDP normalmente só realizan transferencias de pequenas cantidades de datos, nas que prima a rapidez sobre a fiabilidade. Un exemplo é o protocolo DNS no que a aplicación de cliente envía un nome de dominio e recibe o enderezo IP asociado e algunha outra información.

Os portos do 0 ó 1023 son coñecidos coma portos do sistema e están reservados para protocolos estándares de nivel de aplicación.

TLS/SSL sobre o protocolo de transporte TCP

É posible utilizar o protocolo estándar TLS/SSL sobre o protocolo de transporte TCP permitindo así que os datos transmitidos por TCP vaian encriptados. Existen variantes dos protocolos estándares que utilizan TLS/SSL sobre TCP, que adoitan ter o mesmo nome engadíndolle unha S (por exemplo HTTP e HTTPS).

A variante que utiliza TLS/SSL usará un porto distinto. Por exemplo:

  • o protocolo estándar HTTP funciona sobre TCP e utiliza o puerto 80
  • HTTPS é unha variante de HTTP que utiliza TLS/SSL sobre TCP e utiliza o porto 443

Debido á propia natureza do protocolo UDP (non fiable e non orientado a conexión) non existe nada análogo a TLS/SSL para UDP.

Pricipales protocolos de aplicación

Algúns dos principales protocolos de aplicación son:

Principais protocolos de aplicación
Nome Nome completo Descrición Portos do servidor RFC (orixinal) Aplicación de cliente
DNS Domain Name System ou sistema de nomes de dominio Permite obtener la dirección IP para un nombre en formato DNS, como por ejemplo www.w3c.org.

DNS utiliza un formato de nomes xerárquico que consta de varias partes separadas por puntos, que especifican un recorrido dentro dunha estrutura xerárquica. No primero nivel desta xerarquía están os dominios de máis alto nivel ou top level domains coma son .org, .com, .net, .eu, etc. Algunhas clases da biblioteca estándar de clases de Java utilizan a resolución de nomes do sistema operativo, que a súa vez utiliza o protocolo DNS.

UDP 53 TCP 53 1034 e 1035 nslookup dig host
TELNET Teletype network Protocolo para terminal remoto TCP 23 854 telnet
SSH Secure shell ou shell segura Protocolo para terminal remoto e para encriptación de datos transmitidos polo protocolo de transporte TCP.

Este protocolo desplazou o vetusto TELNET e ós r-commands do Unix de Berkeley; ambos non son seguros porque transmiten a información sen encriptar.

TCP 22 4250 ssh
FTP File Transfer Protocol ou protocolo para transferencia de ficheiros. Utilízase para a recepción ou descarga (download) e o envío ou subida (upload) de ficheiros. TCP 20 TCP 21 959 ftp
FTPS FTP seguro TCP 989 TCP 990 4217 sftp
HTTP HyperText Transport Protocol ou protocolo para transferencia de hipertexto Utilízase para a web, para transferencia de datos tanto de texto coma binarios. TCP 80 1945 Navegadores web
HTTPS HTTP seguro TCP 443 2818
SMTP Simple Mail Transfer Protocol ou protocolo simple para transferencia de correo Utilízase para envío de mensaxes de correo electrónico TCP 25 TCP 587 5321 Clientes de correo electrónico (MUA) coma Mozilla Thunderbird ou Microsoft Outlook.
SMTP sobre SSL SMTP seguro TCP 465 TCP 587 8314
POP3 Post Office Protocol version 3 ou protocolo de oficina de correos versión 3 Utilízase para recepción de mensaxes de correo electrónico desde un servidor. TCP 110 1939
POP3 sobre SSL POP3 seguro TCP 995 2595
IMAP4 Internet Message Access Protocol Utilízase tanto para envío coma para recepción de mensaxes de correo electrónico. TCP 143 3501
IMAP sobre SSL IMAP4 seguro TCP 993 2595
LDAP Lightweight Directory Access Protocol ou servizo lixeiro para acceso a directorios. Utilízase principalmente para gardar información de autenticación: nomes de usuarios e contrasinais. TCP 389 2251
LDAP seguro LDAP seguro TCP 636 2830
NTP Network Time Protocol Utilízase para obter a hora de servidores que proporcionan unha hora o máis exacta posible.
A hora procede de reloxos atómicos.
O protocolo ten en conta e compensa os retardos de comunicación entre cliente e servidor.
UDP 123 958 ntpdate
SNMP Simple Network Management Protocol ou protocolo simple de administración de red Permítelle os administradores obter información acerca do funcionamento de diversos dispositivos conectados a unha rede. UDP 161 UDP 162 1157

Instalación e xestión de servizos en rede

Para o resto da unidade didáctica é preciso ter programas servidores para algúns destes protocolos para poder interactuar con eles mediante aplicacións clientes, en particular as que desenvolvamos nos ó longo da unidada didáctica.

Os serviczos préstanse a través de programas servidores para determinados protocolos de rede de nivel de aplicación. E común empregar indistintamente ambos términos: servicio en rede e protocolo de nivel de aplicación mediante o cal se presta el servicio. Por exemplo, dise que se instala o servizo de HTTP cando se instala apache2 (que é un programa servidor para o protocolo HTTP).

Para a parte práctica pódese instalar os servidores en contornas Windows, Mac Os ou Linux. Moitas veces é de axuda facer esa instalación de sistemas operativos mediante o uso de máquinas virtuais mediante software de virtualización coma poden ser VirtualBox, KVM ou VMware. Será de axuda contar cunha idea xeral das redes en VirtualBox (ou no software di virtualización escollido) e cómo crear e configurar interfaces de rede en máquinas virtuales.

Finalmente, nos sistemas operativos existen mecanismos comúns para a instalación, configuración, xestión e monitorización dos servizos en rede (isto é, dos programas servidores para protocolos estándares de red de nivel de aplicación).

Supoñendo o uso dalgunha distribución linux, a instalación pódese facer mediante o comando apt ou mediante un xestor de paquetes coma pode ser synaptic. Podes atopar información máis detallada adaptada para cada sistema nesta web

Finalmente, unha vez instalado, pódese facer a xestión de servizos con systemctl.

Telnet

TELNET é un protocolo de nivel de aplicación baseado en TCP para terminal remoto en modo texto. O seu nome ven de teletype network ou teletipo a través da rede.

Cando un usuario inicia unha sesión de terminal, normalmente se lle solicita que introduzca datos para autenticarse; polo xeneral un nome de usuario e un contrasinal.

Se estos son os dun usuario existente no sistema, iníciase entón a execución dunha shell ou intérprete de liña de comandos, que amosa un prompt ou texto que adoita incluir o nome do sistema e o usuario, seguido dun cursor parpadeante que indica que se está á espera de que se introduza un comando. O comando introducido execútase, e a súa saída amósase en pantalla.

Uso de TELNET para execución dunha shell remota

Una terminal en modo texto permite enviar texto a un ordenador conectado físicamente e recibir texto de el. Pola contra con TELNET os textos envíanse e recibense a través dunha conexión de TCP. O funcionamento é polo demáis similar:

  • Cando se establece a conexión de TCP o proceso servidor solicita un nome de usuario e contrasinal
  • Estes envíanse do cliente ó servidor
  • Unha vez recibidos, se corresponden a un usuario existente, execútase unha shell ou intérprete de liña de comandos
  • O programa cliente envía cada comando ó programa servidor a través da conexión de TCP, además de amosalo en pantalla (eco local)
  • O programa servidor executa cada comando no servidor. O texto resultante da execución do comando envíallo de volta ó programa cliente poa mesma conexión de TCP, e este amósao en pantalla na terminal local.

Podes ver neste artigo como instalar e usar telnet

O uso de TELNET para terminal remoto está totalmente desaconellado porque non é un protocolo seguro (os datos transmítense en blanco, sen encriptar). Utilizando un programa que capture e analice o tráfico de rede (sniffer) coma por exemplo wireshark, pódense ver todos os datos transmitidos mediante o protocolo de transporte TCP (incluindo o nome de usuario e contrasinal enviados para o login no sistema remoto). Porén os sistemas actuales non adoitan ter habilitado un servidor para este protocolo; e para sesións de terminal remoto utilízanse alternativas seguras coma o protocolo SSH (no que os datos transmitidos por TCP están encriptados).

Uso de TELNET coma teletipo sobre TCP

Pode utilizarse telnet para permitir a interacción con calquier protocolo de aplicación de texto que funcione sobre o protocolo de transporte TCP (uso visto na unidade didáctica anterior).

Telnet (e tamén nc) permiten interactuar directamente cun servidor para un protocolo de texto sobre o protocolo de transporte TCP. Usanse así coma una especie de cliente universal para protocolos de aplicación baesados en texto que funcionan sobre TCP.

Por exemplo, pódese recibir unha paxina dun servidor web establecendo unha conexión de TCP mediante telnet co seu porto 80. Unha vez establecida la conexión, envíase ó comando

GET / HTTP/1.1

O servidor responderá cos contenidos da página principal, coma un documento de texto con código en HTML.

Explicitnado este caso de uso, un exemplo para o servidor web www.wikipedia.org (en grosa o que escribe o usuario.

$ telnet www.wikipedia.org 80
Trying 91.198.174.192...
Connected to dyna.wikimedia.org.
Escape character is ‘^]’.
GET / HTTP/1.1

HTTP/1.1 400 
Date: Sun, 24 Jan 2021 18:07:01 GMT 
Server: Varnish 
X-Varnish: 182835081 
X-Cache: cp3054 int 
X-Cache-Status: int-front 
Server-Timing: cache;desc=”int-front” 
Set-Cookie: WMF-Last-Access=24-Jan-2021;Path=/;HttpOnly;secure;Expires=Thu, 25 Feb 2021 12:00:00 GMT Set-Cookie: WMF-Last-Access-Global=24-Jan-2021;Path=/;Domain=.invalid;HttpOn ly;secure;Expires=Thu, 25 Feb 2021 12:00:00 GMT 
X-Client-IP: 87.218.14.205 
Content-Type: text/html; charset=utf-8 
Content-Length: 1804 
Connection: keep-alive
<!DOCTYPE html>
<html lang=”en”>
<meta charset=”utf-8”>
[...]

Pódese interactuar de xeito análogo con servidores doutros protocolos baseados en texto coma SMTP ou POP3, o que resulta moi útil para facer probas sinxelas.

Equivalente a TELNET coma teletipo sobre conexión segura con TLS/SSL

Que os datos se transmitan sen encriptar (en claro) a través dunha conexión de TCP) plantexa un problema de seguridade. Para solucionar este inconvinte adoita utilizarse unha capa de seguridade sobre TCP, baseada en TLS/SSL, que fai que os datos transportados por TCP vaian cifrados.

O tipo de cifrado e os parámetros utilizados establecense unha vez establecida a conexión de TCP, durante unha fase preliminar de negociación (handshake); aparte desta fase inicial de negociación e de que os datos se encriptan antes de seren transmitidos, os protocolos funcionan exactamente igual.

Non se pode establecer unha conexión sobre SSL/TLS con telnet , pero si con openssl , cun comando coma o se0guiente:

openssl s_client -connect servidor:porto -crlf -quiet

Unha vez establecida la conexión a operativa é idéntica que con telnet.

openssl desencripta os datos que se reciben do servidor e encripta os que se lle envían.

A páxina principal do servidor web www.wikipedia.org podese obter mediante HTTPS polo porto 443, en lugar de mediante HTTP polo puerto 80, do seguinte xeito (amosase en grosa o que escribe o usuario):

$ openssl s_client -connect www.wikipedia.org:443 -crlf -quiet
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA
verify return:1
depth=0 C = US, ST = California, L = San Francisco, O = “Wikimedia Foundation, Inc.”, CN = *.wikipedia.org
verify return:1
GET / HTTP/1.1

HTTP/1.1 400 
[...]

SSH

O protocolo SSH ten múltiples usos; mais todos parten do establecemento dunha comunicación segura sobre unha sesión de TCP baseada en TLS/SSL. Porén pode ser unha alternativa o uso do inseguro protocolo TELNET.

Podes atopar máis información neste artigo e neste outro artigo.

FTP

File Transfer Protocol (FTP) ou protocolo de transferencia de ficheiros é un protocolo da capa de aplicación sobre a capa TCP que permite a transferencia de ficheiros entre sistemas conectados entre sí.

Pódese atopar máis información nestes artigos desde un punto de vista:

Transferencia de ficheiros

Correo electrónico: POP3, IMAP e SMTP

Pódese atopar detallada información sobre o funcionamento do correo electrónico desde un punto de vista:

HTTP e HTTPS

Pódese atopar información do funcionamento teórico de HTTP e HTTPS na propia Wiki.

URI e URL

Un URI (Uniform Resource Identifier ou identificador universal de recurso) é un identificador para un recurso accesible nunha rede. Para os URI utilízase unha nomenclatura uniforme que permite a identificación de diferentes tipos de recursos.

Hai distintos tipos de URI, pero o máis habitual e o URL (Uniform Resource Locator ou localizador universal de recursos). Os URL conteñen a información necesaria para especificar a ubicación de recursos dentro dun servidor determinado, que permite o acceso a eles a través dun protocolo de rede especificado na propia URL.

Pódese atopar máis información neste artigo.

Glosario

Cabeceras
Conxunto de pares clave-valor que proporciona información relevante para un protocolo ou relativa a outros datos proporcionados. Utilizadas entre outros no protocolo HTTP e nas mensaxes de correo electrónico.
Código de resposta
Código devolto nunha mensaxe do servidor dun protocolo que indica o resultado dunha operación solicitada polo cliente.
FTP (file transfer protocol)
Protocolo para transferencia de ficheiros entre equipos clientes e servidor.
HTTP (hypertext transfer protocol)
Protocolo para transferencia de hipertexto. Utilizado por servidores web e polos navegadores web coma aplicacións clientes.
IMAP (internet message access protocol)
Protocolo para entrega de correo electrónico a un axente de usuario de correo ou MUA.
MUA (mail user agent)
Axente de usuario de correo. Programa cliente dos protocolos para correo electrónico que utiliza un usuario. É cliente cando menos de:
un protocolo para entrega (POP3 o IMAP)
un protocolo para envío (SMTP).
POP3 (post office protocol, version 3)
Protocolo para entrega de correo electrónico a un agente de usuario de correo o MUA.
SMTP (simple mail transfer protocol)
Protocolo para envío e transferencia de correo
SSH
Protocolo que hace posible la encriptación de los datos transmitidos mediante el protocolo de transporte TCP.
TELNET (teletype network)
Protocolo para terminal remoto en modo texto.
TLS/SSL
Protocolo que funciona a nivel de aplicación e que permite encriptar todos os datos transmitidos sobre unha conexión do protocolo de transporte TCP.
URI (universal resource identifier)
Identificador dun recurso disponible a través de protocolos de rede.
URL (universal resource locator)
Localizador de recurso que permite acceder os seus contidos.

Resumo

  • Existen diversos protocolos estándares de nivel de aplicación baseados nos protocolos de transporte TCP e UDP
    • funcionan nos portos do sistema, numerados do 0 a 1023
    • están especificados en documentos RFC (Request for Comments) como estándares de internet
  • O protocolo TLS/SSL permite encriptar os datos transmitidos polo protocolo de transportes TCP
    • xusto despois de establecerse a conexión de TCP, lévase a cabo unha fase de handshaking ou negociación na que se acorda o tipo de cifrado e os parámetros utilizados
  • A biblioteca de clases Apache Commons Net
    • proporciona clases clientes para os principales protocolos estándares de rede de nivel de aplicación, baseados en TCP e en UDP
  • O protocolo TELNET (pouco usado na actualidade por non ser un protocolo seguro) pódese utilizar para
    • sesións de shell remotas
    • para enviar e recibir datos a través dunha conexión de TCP
  • O protocolo SSH utilízase en sustitución de TELNET para sesións de shell remotas
  • A utilidade openssl pódese utilizar en sustitución de TELNET para enviar e recibir texto a través dunha conexión segura con TLS/SSL sobre TCP
  • FTP
    • é un protocolo para transferencia de ficheiros baseado en TCP
    • utiliza unha conexión de TCP para comandos e outra para datos
    • ten dous modos de funcionamento: activo e pasivo
      • diferencianse na forma na que se establece a conexión de TCP para datos (sendo preferible pasivo xa que activo utiliza unha conexión entrante hacia o cliente desde o servidor)
  • O servizo de correo electrónico préstase mediante dous protocolos distintos:
    • para entrega de mensaxes desde un servidor a un programa cliente de usuario (POP3 ou IMAP)
    • para envío de mensaxes desde un programa cliente de usuario (SMTP)
  • Todos os protocolos para correo electrónico están baseados en texto
  • Unha mensaxe de correo electrónico consta dun conxunto de cabeceras ó principio, entre as que están algunhas para identificar ó remitente (From) e distintos tipos de destinatario (To, cc, bcc, etc.)
  • POP3 é un protocolo de correo moi simple co que normalmente as mensaxes bórranse do servidor una vez entregadas ó cliente
  • IMAP permite almacenar as mensaxes a largo prazo no servidor e organizalos nunha xerarquía de carpetas
  • SMTP é un protocolo de correo para o envío de mensaxes
  • A clase estándar URL de Java permite obter de xeito moi sinxelo o contido de recursos a partir da súa URL, independentemente do protocolo utilizado para iso, indicado na parte de esquema da URL
  • Co protocolo HTTP tanto peticións como respostas constan dunha liña inicial, cabeceras e corpo
    • Cada petición realízase cun método (os máis frecuentes son GET e POST)

Práctica

Creditos e referencias