Introducci´on a las redes TCP/IP en Linux
Dise˜no y Administraci´on de Sistemas y Redes
Subsistema de red
Los subsistemas m´as importantes del kernel de Linux son: gesti
´on de procesos, gesti ´on de memoria, sistemas de ficheros,
dispositivos, y el subsistema de red.
Existen varias llamadas al sistema espec´?ficas para realizar
conexiones y comunicaciones usando la red, como son socket(),
connect(), send(), recv(), etc.
Para que funcione el subsistema de red, es necesario que se
haya configurado previamente, para que el sistema sea capaz
de usar los dispositivos de red de que se dispongan, asociados
a direcciones y rutas.
Dispositivos de red
Para poder acceder a una red, es necesario que haya hardware
espec´?fico para conectarse a ella.
Este hardware pueden ser tarjetas ethernet, token-ring, tarjetas
wireless, infrarrojos, bluetooth, etc.
Cuando el kernel reconoce una tarjeta de red, le da un nombre
para poder acceder a ella desde el sistema (“ethN” para Ethernet),
pero NO existe ning´un dispositivo (fichero del /dev) para
poder acceder a ella.
Dispositivos de red (2)
Se puede ver las tarjetas de red existentes mirando en los buses
del sistema: PCI (lspci), USB (lsusb), etc.
Cuando el kernel identifica y reconoce una tarjeta de red, muestra
un mensaje por pantalla:
e100: eth0: e100_probe: addr 0xd0205000, irq 9, MAC addr 08:00:46:F3:F9:22
Se puede consultar la lista de tarjetas de red existentes y reconocidas
por el kernel en el fichero /proc/net/dev.
Para consultar estad´?sticas, configuraci ´on, etc. de cada tarjeta
de red: “ifconfig” o “netstat -i”.
ifconfig
Se puede usar para ver la configuraci ´on de las tarjetas de red,
o para modificar configuraci ´on de alguna de ellas.
Sin argumentos, muestra todas las tarjetas activas.
Con el nombre de una tarjeta de red, muestra esa tarjeta.
Con la opci ´on “-a”, muestra todas las tarjetas de red.
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:46:F3:F9:22
inet addr:192.168.64.10 Bcast:192.168.62.255 Mask:255.255.255.0
inet6 addr: fe80::a00:46ff:fef3:f922/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:178320 errors:4212 dropped:4323 overruns:0 frame:4212
TX packets:146240 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:116171954 (110.7 MiB) TX bytes:21182840 (20.2 MiB)
ifconfig (2)
La salida de ifconfig, por cada tarjeta de red, se divide en 4
partes:
• Tipo de tarjeta y direcci ´on hardware.
• Configuraci ´on: direcci ´on IP, netmask, broadcast, configuraci
´on IPv6.
• Flags: UP (tarjeta activa), BROADCAST( broadcast en uso),
MULTICAST (multicast en uso), PROMISC (modo promiscuo,
etc.
• Estad´?sticas: paquetes y bytes recibidos y enviados, errores,
colisiones, etc.
Direcci ´on IP, netmask, broadcast
inet addr: Direcci ´on IP local. Dos usos:
• Todos los paquetes que tengan esa direcci ´on IP de destino
se entregan localmente a la m´aquina.
• Los paquetes que se originen localmente y salgan por esa
tarjeta de red, tienen esta direcci ´on IP como origen.
broadcast: Direcci ´on IP para alcanzar a toda la red. Todos
los paquetes que se env´?en a esta direcci ´on llegar ´an a todas
las m´aquinas (incluida la m´aquina local).
netmask: Indica cu´al es el rango de direcciones IP que pertenecen
a la red local en la que estamos situados.
Primera direcci ´on de la red: (ip addr AND netmask)
´U
ltima direcci ´on de la red: (ip addr OR (NOT netmask))
Dispositivo local (lo)
No todos los dispositivos de red se corresponden con tarjetas
f´?sicas.
Dispositivo “lo”: utilizado para establecer conexiones de red
entre dos procesos de la misma m´aquina.
Todo el tr ´afico enviado hacia el interfaz “lo” es recibido de nuevo
por ese interfaz.
Habitualmente se utiliza la direcci ´on “127.0.0.1” para indicar la
m´aquina local, o “localhost”, y se asigna esta direcci ´on al interfaz
“lo”, pero en algunos casos podr´?a tener otra.
Tabla de rutas
La configuraci ´on de cada tarjeta de red solo sirve para identificar
qu´e paquetes van hacia la m´aquina, pero no qu´e hacer con
los paquetes que van hacia fuera.
La tabla de rutas indica qu´e hacer con cada paquete que no
vaya dirigido a la m´aquina local, seg´un su direcci ´on IP destino.
La tabla de rutas nos la proporciona el kernel en el fichero
“/proc/net/route”, y se puede consultar mediante las ´ordenes
“route” o “netstat -r”.
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.64.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.64.1 0.0.0.0 UG 0 0 0 eth0
Tabla de rutas (2)
Cada ruta contiene 4 partes importantes:
Destino: direcci ´on IP base del rango que queremos indicar en
esta ruta.
M´ascara: m´ascara asociada a la direcci ´on destino para formar
la red.
Gateway: Direcci ´on IP a la que mandar los paquetes que correspondan
con esta ruta.
Interface: Interfaz de red por el que enviar los paquetes de esta
ruta.
Si el gateway no est ´a especificado, indica que el paquete ha de
enviarse localmente a la red a la que pertenece el interfaz.
Tabla de rutas (3)
La m´ascara (netmask) asociada a una tabla de rutas ha de ser
siempre una direcci ´on con una serie de bits a “1” seguido de
una serie de bits a “0”.
El n´umero de “1”s de la m´ascara indica lo gen´erica que es la
red:
• ning´un “1” indicar´?a que esta es “toda la red”, tambi ´en especificada
como “default gateway”.
• Todos los bits a “1” indica una ruta a “host”, esto es, hacia
una ´unica m´aquina y no una red de varias m´aquinas.
Cuando un paquete tiene que rutarse y compararse con todas
las rutas de la tabla, en caso de que coincida con varias, se usa
siempre la ruta m´as espec´?fica, esto es, la que m´as bits tiene a
“1”.
Env´?o de paquetes a una red local
Cada tipo de tarjeta de red tendr ´a sus m´etodos para enviar paquetes
locales.
Lo m´as habitual es utilizar redes ethernet o compatibles, en las
que se utiliza el protocolo ARP:
• “ARP REQUEST” para averiguar qu´e direcci ´on hardware
corresponde con una determinada direcci ´on IP.
• “ARP REPLY” para contestar a una petici ´on previa de “ARP
REQUEST”.
Las tablas ARP se almacenan en el fichero /proc/net/arp,
y se consultan mediante la orden “arp”.
La orden “arping” se puede usar para enviar paquetes “ARP
REQUEST” y ver los “ARP REPLY” de respuesta.
Conexiones UDP y TCP
En la pr ´actica totalidad de comunicaciones entre dos m´aquinas
se utiliza los protocolos UDP o TCP.
El estado de las conexiones entre la m´aquina local y otras
m´aquinas remotas usando UDP y TCP nos lo proporciona el
kernel a trav´es de los ficheros “/proc/net/{udp,tcp}”, y se
pueden consultar con la orden “netstat”:
• netstat -u: Muestra las conexiones UDP establecidas,
• netstat -t: Muestra las conexiones TCP establecidas.
• netstat -l: Muestra las conexiones en estado de espera.
• netstat -a: Muestra todas las conexiones.
• netstat -n: Muestra direcciones IP en lugar de nombres
de m´aquina.
Resoluci ´on de nombres
Normalmente, se utilizan nombres de m´aquinas en lugar de direcciones
IP para establecer comunicaciones
La traducci ´on entre nombres y direcciones NO la realiza el kernel,
sino las funciones de la libc. El kernel no sabe nada de
nombres de m´aquina.
Todas las aplicaciones utilizan funciones de la libc, como pueden
ser gethostbyname() y gethostbyaddr(). Estas funciones
leen el fichero “/etc/nsswitch.conf”, y act ´uan de
distinta manera seg´un el contenido de ´este.
/etc/nsswitch.conf
Base de datos para configuraci ´on de determinados servicios:
passwd, group, hosts. . .
Para cada servicio hay una l´?nea en este fichero, con el nombre
de dicho servicio, el car ´acter “:”, y la lista de maneras de
acceder a ese servicio, separadas por espacio. Se prueban todas
las maneras presentes en el fichero, hasta que una de ellas
funciona.
Ejemplo de /etc/nsswitch.conf:
passwd: compat
group: compat
shadow: compat
hosts: files dns
/etc/hosts
Si en el fichero “/etc/nsswitch.conf” aparece una l´?nea
con “hosts: files”, se consulta el fichero “/etc/hosts”
para realizar la conversi ´on entre nombres de m´aquina y direcciones
IP (y viceversa).
Formato del fichero /etc/hosts: una l´?nea por direcci ´on IP,
en la que aparezca:
direcci´on-IP nombre-m´aquina [alias1 alias2...]
Ejemplo:
127.0.0.1 localhost
193.147.71.64 gsyc.escet.urjc.es gsyc
193.147.71.90 orion.cespedes.org orion mipc
/etc/resolv.conf
Si en el fichero “/etc/nsswitch.conf” aparece una l´?nea
con “hosts: dns”, indica que se han de hacer las consultas
de resoluci ´on de nombres a un servidor de DNS. En el fichero
“/etc/resolv.conf” se indica qu´e servidores de DNS se
deben consultar.
Formato del /etc/resolv.conf: l´?neas con campos separados
por espacios. El primero de los campos es una opci ´on de
configuraci ´on del DNS, y puede ser “nameserver”, “domain”,
“search”, y algunas otras.
La opci ´on m´as relevante es “nameserver”. A continuaci ´on hay
que indicar la direcci ´on IP de un servidor de DNS al que realizar
las peticiones. Si queremos usar varios servidores de DNS, hay
que tener una l´?nea “nameserver” por cada uno de ellos.
C´omo examinar el tr ´afico de una red
Si queremos saber qu´e est ´a pasando por la red, para depurar alg´un
problema o por cualquier otro motivo, podemos usar:
tcpdump: Permite capturar todos los paquetes o los de un determinado
tipo, de un interfaz de red en concreto, mostrando
por pantalla las cabeceras o guardando cada paquete en un
fichero para examinarlo posteriormente. Muy potente.
iptraf: Genera estad´?sticas del tr ´afico recibido por uno o varios
interfaces de red, a pantalla completa y con colores.
ethereal: Programa interactivo y gr ´afico para examinar el tr ´afico.
Permite hacer todo lo que hace tcpdump, pero de manera
gr ´afica, mucho m´as f ´acil e intuitiva.
Herramientas de diagn´ostico
netstat: Muestra diversas configuraciones y estad´?sticas de
la red: interfaces (“-i”), rutas (“-r”), conexiones TCP (“-t”),
UDP (“-u”), etc.
ping: env´?a paquetes ICMP ECHO REQUEST, recibe ICMP
ECHO REPLY, habitualmente usado para comprobar la conectividad
entre dos m´aquinas.
traceroute, mtr: Env´?an paquetes con el campo TTL creciente,
a partir de TTL=1, con el objeto de mostrar el camino
que siguen los paquetes para llegar hasta su objetivo.
telnet: Establece una conexi ´on TCP con una m´aquina y un
puerto dado.
host, dig: Realizan consultas a un servidor DNS.
Resoluci ´on de problemas
¿Tarjeta de red instalada correctamente en el equipo? (conectada
al cable de red, link de conexi ´on, lspci, lsusb. . . ).
¿Tarjeta de red reconocida por el kernel? (dmesg, contenido
del /proc/net/dev, “ifconfig -a”).
¿Configurada correctamente? (ifconfig, “route -n”).
¿Recibe tr ´afico, muestra errores? (ifconfig).
¿Conectividad con la red local? (arping, ping al gateway).
¿Conectividad en Internet? (ping, traceroute, mtr, con direcciones
IP en lugar de nombres).
¿DNS configurado correctamente? (/etc/nsswitch.conf,
/etc/resolv.conf, ping, host, dig).