Tutorial de Redes
La pila de protocolos TCP/IP (Transfer Control Protocol / Internet Protocol) es el estándar de-facto utilizado en la mayor parte de redes y en Internet.
En la práctica y pese al modelo de 7 capas ISO/OSI, conviene entender estas las redes en un contexto de 4 capas:
- Capa Aplicación (la más alta): DHCP (asignación automática de IPs), DNS (relación nombres de dominios con direcciones IP), FTP (transferencia de ficheros punto a punto), HTTP (habitual para contenidos web como páginas HTML), IMAP (para email), IRC (para chats), LDAP (listados de emails), SMTP (también para email), SSH (terminal remota segura), Telnet (terminal remota)...
- Capa Transporte: TCP (más fiablilidad), UDP (más rapidez)...
- Capa Internet: IP (IPv4, IPv6)...
- Capa Enlace: MAC...
Estas capas se montan encima de una capa física (cable ethernet o wifi). Como nota adicional, en comunicaciones TCP/IP se suele hablar de "puertos". Permiten distintos canales de comunicación entre máquinas con IPs. Como nomenclatura adicional, cabe destacar que se suele llamar "socket" al par IP+puerto. Las comunicaciones HTTP suelen utilizar el puerto 80 (o 8080 cuando éste está ocupado).
Configurar el acceso a Internet en una máquina con Linux
La mayoría de distribuciones actuales de GNU/Linux disponen de interfaces gráficas para la configuración de redes. Sin embargo, en la mayoría de los casos siguen presentes los mecanismos de bajo nivel. Muchos comandos están disponibles también en Windows (e.g. existe ipconfig en lugar de ifconfig).
Lo primero será ver los dispositivos disponibles:
$ ifconfig
Lo habitual es ver nuestra tarjeta de red como dispositivo de nombre eth0 o similar (el dispositivo lo no sirve para realizar conexiones de cara al exterior; un dispositivo inalámbrico wlan0 sí lo podemos utilizar). Si no aparece ningún nombre semejante, es posible que esté deshabilitado. Podemos descubrir más dispositivos con:
$ ip l
Pongamos que aquí sí apareciese el dispositivo eth0. Si figura como DOWN, comprueba el cable hasta que figure como UP. Si no está habilitado (está en ip l pero no aparece al teclear ifconfig), podemos habilitarlo mediante el comando:
$ sudo ifconfig eth0 up # o como usuario root en caso de no poder hacer sudo; omitiremos este comentario de aquí en adelante puesto que aplica a todo comando sudo.
La MAC está ligada al hardware, con ip l se ve como una dirección con el formato 00:11:22:33:22:11. La dirección IP del dispositivo se ve con el comando ifconfig, tiene el formato 192.168.0.22. Si no aparece, es posible que no se le haya sido asignada por el router o semejante (que de hecho se realiza por el protocolo DHCP). Podemos configurar la IP manualmente:
$ sudo ifconfig eth0 192.168.0.22
También es conveniente configurar nuestra máscara de red. Si suponemos que la subred es pequeña, podemos asignar la 255.255.255.0 (muchas veces 255.255.0.0 se pone por defecto):
$ sudo ifconfig eth0 netmask 255.255.255.0
Esto siginificaría que nuestra subred ejemplo abarca desde 192.168.0.0 hasta 192.168.0.254 (una máscara 255.255.0.0 abarcaría de 192.168.0.0 hasta 192.168.255.254). Llegado a este punto podemos comprobar nuestra conectividad, probando a hacer un ping a la dirección IP nuestro router. No hay un estándar en direcciones IP de routers por defecto, pero sí existen listados por fabricante (i.e. http://www.techspot.com/guides/287-default-router-ip-addresses/). Si alguien ha cambiado la configuración del router y desconocemos su nueva IP, es posible que tengamos que resetearlo a través de un mecanismo explicado en su manual (habitualmente, pulsar el botón de reset durante un tiempo). Si sabemos que la IP del router es la 192.168.0.1, entonces escribiremos:
$ ping 192.168.0.1
El router contestará si hay conectividad, que existe si se dan varias condiciones:
- Debe haber conexión física.
- Debemos estar en la misma subred.
Si todo ha ido bien hasta aquí, podemos establecer nuestra puerta de enlace. Suponiendo que queramos usar el propio router y su IP es la 192.168.0.1, podemos escribir:
$ sudo route add default gateway 192.168.0.1
Bajo los mismos supuestos, podremos hacer "ping" a cualquier IP globalmente accesible. ¿Qué nos falta para conectar con "google.com"? Establecer nuestros servidores de nombres (DNS). Podemos configurar los DNS editando el fichero /etc/resolv.conf. Si sabemos que un servidor con IP 194.179.50.2 puede actuar de DNS, podemos añadir una línea con esa información a /etc/resolv.conf mediante la siguiente línea:
$ sudo echo "nameserver 194.179.50.2" >> /etc/resolv.conf
Ahora comprobaremos que hemos configurado bien nuestro DNS:
$ ping google.com
Y si ha resultado, ¡a navegar!
Nótese que los cambios realizados mediante los comandos de la sección anterior se borrarán al reiniciar el equipo. Podemos actualizar el fichero /etc/network/interfaces con las configuraciones que nos interesen, que se cargarán al arranque, o al deshabilitar la interfaz:
$ sudo ifdown eth1
Y volverla a habilitar:
$ sudo ifup eth1
Ejemplos de fichero de configuración /etc/network/interfaces
- Muestra de /etc/network/interfaces donde se trata de configurar la IP de eth0 mediante DHCP:
auto eth0 # encender interfaz eth0 iface eth0 inet dhcp # que eth0 trate de obtener IP por DHCP
- Muestra de /etc/network/interfaces donde se configura la IP de eth0 de forma manual (estática) con los datos del ejemplo de esta wiki:
auto eth0 iface eth0 inet static address 192.168.0.22 netmask 255.255.255.0 gateway 192.168.0.1 nameserver 194.179.50.2
¿Ahora qué puedo hacer?
- Si tienes dos máquinas en red, puedes abrir una consola de una en la otra mediante telnet:
telnet ip.de.otra.máquina
- Si tienes dos máquinas en red, puedes abrir una consola segura de una en la otra mediante ssh:
ssh usuario@ip.de.otra.máquina
- Si tienes máquinas en red y sabes programar, puedes crear un programa servidor en cualquier lenguaje, y comunicarte con él desde clientes escritos en cualquier lenguaje.
- Si tienes máquinas en red y sabes programar en C/C++, puedes usar YARP (tutorial ASROB de YARP) o ROS para conexiones muchos-a-muchos (nota: en realidad ambas existen para multitud de lenguajes, pero su instalación es más compleja).
- Si no sabes programar, puedes empezar con Compilación C/C++ en Linux (ASROB).