Tabla de Contenidos

16. El protocolo IPv4

Internet Protocol (IP)

Imagina una incipiente Internet en España. Cada router está en una universidad española de cada comunidad autónoma y hay una única sala con ordenadores conectada a ese router. La conexión entre los routers quedaría así.

Fíjate en que para conectarse el resto del mundo, hay una salida desde el router de Barcelona hasta Paris (pintado en azul).

Si quieres puedes ver un mapa de cables submarinos para que te hagas una idea de como es de verdad internet. Recuerda que el mapa es solo de cables submarinos, por tierra hay muchas mas conexiones de internet.

Veamos unos ejemplo de por donde podría ir un datagrama

Origen Destino Saltos Nº Saltos
Valencia Castilla-Leon Valencia,Madrid,Castilla-Leon 3
Valencia Castilla-Leon Valencia,Aragón , País Vasco,Castilla-Leon 4
Valencia País Vasco Valencia,Madrid,País Vasco 3
Valencia País Vasco Valencia,Aragón,País Vasco 3
Valencia Aragón Valencia,Aragón 2
Valencia Aragón Valencia,Cataluña,Aragón 3
Valencia Cataluña Valencia,Aragón,Cataluña 3
Valencia Cataluña Valencia,Cataluña 2
Valencia Cataluña Valencia,Madrid, Pais Vasco, Aragón,Cataluña 5
Valencia Murcia Valencia,Murcia 2
Valencia Murcia Valencia,Madrid, Sevilla,Murcia 4
Valencia Murcia Valencia,Cataluña, Aragón, Pais Vasco, Castilla-Leon, Madrid, Sevilla,Murcia 8

Los saltos se llaman a los routers por donde pasa para llegar desde el origen la destino.

Como podemos ver realmente hay muchos caminos para llegar desde el router origen hasta el router destino. ¿Cual elige el router? Hay varias estrategías:

Realmente no nos interesa saber exactamente como elige el router la mejor ruta. Lo importante es que para cada datagrama ,el router elige cual es la mejor ruta pero con el siguiente datagrama puede elegir otra ruta distinta aunque vaya al mismo destino.

Sigamos con el ejemplo de enviar un mensaje desde un ordenador de Valencia a otro de Cataluña. Ese mensaje de divide en 2 datagramas, vamos a llamarlos Datagrama A y Datagrama B. Y vamos a ver varios casos de lo que puede ocurrir.

Caso 1:

¿Que ha pasado? Que primero llega el Datagrama B y después el Datagrama A. Resumiendo: Los datagramas pueden llegar desordenados.

Caso 2:

¿Que ha pasado? Pues que el router de Zaragoza ha perdido el Datagrama A. Resumiendo: Los datagramas se pueden perderse

Caso 3:

¿Que ha pasado? Pues que el router de Zaragoza ha enviado dos veces el Datagrama A. Resumiendo: Los datagramas se pueden llegar duplicados.

Caso 4:

¿Que ha pasado? Pues que el router de Zaragoza ha encaminado mal un Datagrama. Resumiendo: Los datagramas pueden entrar en un buble , aunque en ese caso se acaban borrando.

Características y Deficiencias Protocolo IPv4

Por fin después de muchas explicaciones, vamos a resumir para que sirve el protocolo IP

Características del protocolo IP

Deficiencias del protocolo IP

¿Como resuelve el protocolo IP sus deficiencias? Obviamente no las resuelve , el que lo hace es el protocolo TCP.

Formato Datagrama IPv4

Al igual que vimos el formato de una trama Ethernet, vamos a ver ahora el formato de un datagrama IPv4.

Los campos que nos interesan son los siguientes:

Otros protocolos

Ahora vamos a ver una serie de ordenes de Linux. Si ya sabéis algo de Linux o miráis documentación en internet el fácil que os salgan otra serie de ordenes para hacer lo mismo. Realmente son las antiguas que se ha usado durante muchos años.

Algunas de las ordenes "antiguas" son las siguientes:

ARP

Hasta hora hemos visto como se envían datagramas a través de los routers, usando ethernet para la comunicación física. Es decir que realmente todo se envía a través de Ethernet entre Hosts.

NOTA1:Usamos la palabra Hosts para referirnos a Ordenadores o Routers.

NOTA2:Vamos a hablar siempre de Ethernet pero realmente es cualquier tecnología de red como Wifi, 3G, etc.

En esta comunicación el ordenador origen sabe su IP , la IP de destino y la IP de su puerta de enlace , pero ¿Como sabe la dirección MAC de la puerta de enlace? Es decir, siempre que un ordenador se comunica directamente con otro ordenador o con su gateway. ¿Como sabe cual es la dirección MAC de todos ellos? Ya que por mucho protocolo IP que haya, físicamente todo se envía por Ethernet y por lo tanto es necesario la dirección MAC.

Para averiguar la dirección MAC sabiendo únicamente la IP se usa el protocolo ARP (del inglés Address Resolution Protocol). Cada ordenador tiene una tabla con IPs y su dirección MAC. Para rellenar esa table se usa el protocolo ARP que permite averiguar la MAC en función de la IP.

Veamos un ejemplo de como funciona ARP:Cuando el ordenador A tiene que enviar un datagrama al ordenador B:

  1. Mira si la MAC del ordenador B está en la tabla ARP, si está la usa y ya está.
  2. Si no está en la tabla, el ordenador A enviará una trama Ethernet a la dirección broadcast 1) (MAC = FF:FF:FF:FF:FF:FF). Los datos de esa trama seguirán el formato de del protocolo ARP e incluirá la IP del ordenador B.
  3. El ordenador B, responderá otra una trame Ethernet al ordenador A, para decirle que esa es su MAC.
  4. El ordenador A, añadirá la MAC en su tabla ARP.

Hay que hacer notar que cada cierto tiempo se borran las MAC por si el ordenador cambiar su tarjeta de red por otra.

Mas información:

ip neighbour

ip neighbour permite ver la tabla ARP de nuestro Linux.

logongas@beren:~$ ip neighbour
192.168.1.103 dev enp2s0 lladdr ec:fa:5c:e4:ad:95 REACHABLE
192.168.1.1 dev enp2s0 lladdr 84:16:f9:9b:be:c0 REACHABLE

Se ve por ejemplo que para la IP 192.168.1.103 , su MAC es ec:fa:5c:e4:ad:95

ICMP

ICMP es un protocolo un poco "extraño". Se usa sobre el protocolo IP pero solo es para notificar de errores e información de la propia red IP. Por ejemplo si a un router le llega un datagrama y no sabe por donde enviarlo , enviará un mensaje ICMP hasta el ordenador origen diciendo que el destino es inalcanzable. Y de esa forma los routers pueden saber que esa ruta no es válida.

Pero como usuarios, el protocolo ICMP no es útil ya que permite saber si funciona perfectamente toda la red hasta un ordenador destino. Es decir si funciona internet hasta el ordenador al que nos queremos conectar.

ping

ping es una orden que se usa para saber si funciona la red hasta un ordenador determinado.

ping

ping tiene como argumento la IP del ordenador del que queremos saber si todo funciona hasta él.

Lo que hace ping es mandar mensajes ICMP hasta el ordenador que hemos indicado en la IP. Por lo que tiene que pasar por todos los routers. Cuando llega el mensaje ICMP al ordenador destino, éste nos responde con mensaje ICMP. Si a nuestro ordenador nos llegan los mensajes ICMP del ordenador destino es que toda la red física de ethernet y los routers con el protocolo IP funcionan perfectamente.

logongas@beren:~$ ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=56 time=7.88 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=56 time=7.73 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=56 time=7.74 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=56 time=7.81 ms

La información que se obtiene es:

mtr

mtr es una orden que nos dice todos los routers por los que pasa un datagrama hasta un ordenador determinado.

mtr

mtr tiene como argumento la IP del ordenador del que queremos saber los routers por los que se pasa hasta llegar hasta él. Se puede incluir la opción "-n" para que muestre las IPs de los routers en vez de sus nombres.

logongas@beren:~$ mtr -n 1.1.1.1


                                       My traceroute  [v0.92]
beren (192.168.1.110)                                                      2020-04-22T13:04:02+0200
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                                           Packets               Pings
 Host                                                    Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 192.168.1.1                                           0.0%    12    0.2   0.2   0.2   0.3   0.0
 2. 192.168.3.1                                           0.0%    12    0.5   0.6   0.4   0.9   0.2
 3. 81.46.38.83                                           0.0%    12    2.2   3.4   1.2  11.2   3.3
 4. 81.46.69.201                                          0.0%    12   10.2  12.1   9.0  25.4   4.6
 5. ???
 6. ???
 7. 216.184.113.248                                      60.0%    11   17.5  11.9   7.7  17.5   4.9
 8. 81.173.106.39                                         0.0%    11    8.3   8.3   7.9   8.7   0.3
 9. 1.1.1.1                                               0.0%    11    7.7   8.0   7.5   8.7   0.4

La información que se obtiene es:

Otras órdenes

ip addr

ip addr Obtiene información sobre las tarjetas de red que hay ademas de añadir IPs.

logongas@beren:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 38:2c:4a:e7:d7:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.110/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 6157sec preferred_lft 6157sec
    inet6 fe80::8aa3:7526:47e5:ae18/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

La información que se obtiene es:

ip addr también permite añadir IPs a una tarjeta de red.

Hasta ahora hemos visto que una tarjeta de red tiene una única IP pero no hay problema en que la misma tarjeta de red tuviera mas de una IP. ¿Cual es la utilidad? Pues crear redes independientes que no se vean entre ellas.

Añadir una nueva IP 192.168.1.220/24 a la tarjeta de red enp2s0

sudo ip addr add 192.168.1.220/24 dev enp2s0

Si ahora ejecutamos la orden ip addr veremos que en la tarjeta enp2s0 tiene dos IP.

logongas@beren:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 38:2c:4a:e7:d7:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.110/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0
       valid_lft 5156sec preferred_lft 5156sec
    inet 192.168.1.220/24 scope global secondary enp2s0
       valid_lft forever preferred_lft forever
    inet6 fe80::8aa3:7526:47e5:ae18/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Borrar la IP 192.168.1.220/24 a la tarjeta de red enp2s0

sudo ip addr del 192.168.1.220/24 dev enp2s0

ip link. Permite habilitar o deshabilitar una tarjeta de red.

El siguiente ejemplo deshabilita la tarjeta de red enp2s0

logongas@beren:~$ sudo ip link set enp2s0 down

El siguiente ejemplo habilita la tarjeta de red enp2s0

logongas@beren:~$ sudo ip link set enp2s0 up

ethtool

ethtool es una orden que permite configurar las tarjetas de red pero su mayor utilidad es saber la velocidad de las tarjetas de red

ethtool tiene como argumento el nombre de una tarjeta de red.

logongas@beren:~$ ethtool enp2s0
Settings for enp2s0:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full 
	                                     100baseT/Half 100baseT/Full 
	                                     1000baseT/Full 
	Link partner advertised pause frame use: Symmetric Receive-only
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Port: MII
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
Cannot get wake-on-lan settings: Operation not permitted
	Current message level: 0x00000033 (51)
			       drv probe ifdown ifup
	Link detected: yes

La información que se obtiene es:

¿Porque esos dos datos? Muy sencillo, tu tarjeta está fabricada para funcionar a 1000 Mb/s pero estar conectado a un switch que funcione a 100 Mb/s. Así que realmente funcionará a 100 Mb/s

route

route permite ver la tabla de encaminamiento. Se añade el parámetro -n para que se vean las IPs

logongas@beren:~$ route -n
Tabla de rutas IP del núcleo
Destino         Pasarela        Genmask         Indic Métric Ref    Uso Interfaz
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp2s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0

La información que se obtiene es:

Realmente no se debería usar la orden route sino ip route show que es la orden actual. Pero he explicado route ya que el formato en el que se muestran los datos es mas cómodo de leer.

logongas@beren:~$ ip route show
default via 192.168.1.1 dev enp2s0 proto dhcp metric 100 
169.254.0.0/16 dev enp2s0 scope link metric 1000 
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.110 metric 100 

Ejercicios

Para hacer algunos ejercicios necesitarás tener instalado el paquete 'inetutils-traceroute'

sudo apt install inetutils-traceroute

Ejercicio 1

Haz un mapa similar al de España con sus routers pero a nivel de Europa. Deberás poner al menos 8 routers y que en algunos haya mas de 2 conexiones a otros routers. El mapa deberás ser como un ejemplo de como llega internet a cada uno de los paises. El mapa que hagas deberá ser coherente con el que hay de España. Es decir que España se conecta a internet desde Paris.

Rellena la siguiente tabla con 2 ejemplos de llegar de un país al otro y para cada ejemplo que haya dos rutas distintas (saltos).

Router País Origen Router de País Destino Saltos Nº de Saltos
Pais 1 Pais 2
Pais 1 Pais 2
Pais 3 Pais 4
Pais 3 Pais 4

Según tu mapa , inventa un caso en el que los Datagramas podrían llegar desordenados Según tu mapa , inventa un caso en el que un Datagramas podría perderse

Ejercicio 2

Responde a las siguientes preguntas referidas al formato de un Datagrama IP:

  1. Según el tamaño del campo "longitud cabecera". ¿Cual sería el tamaño máximo teórico de la cabecera IP?
  2. ¿Para que crees que es útil es campo "relleno"?
  3. ¿Cual es el tamaño máximo que puede tener un datagrama?
  4. ¿Cuantos datos se pueden enviar como máximo en un datagrama IP?
  5. ¿Cual es el límite teórico de saltos que podría dar un datagrama IP?
  6. ¿Podríamos llegar a todos los destinos con un TTL de 3? En caso de que no podamos, ¿A que destino no podríamos llegar?
  7. ¿Por cuantos routers crees que puede pasar como máximo un Datagrama en Internet?
  8. Viendo la Cabecera IPv6, ¿Como se llama el campo TTL en IPv6?

Ejercicio 3

Ejercicio 4

Ejercicio 5

Ejercicio 6

Si desde tu ordenador tienes que enviar datagramas hasta la IP 8.8.8.8,

Ejercicio 7

Responde a las siguientes preguntas:

1)
Es una dirección especial que lo reciben todos los ordenadores de la red