Pruebas de fragmentación de tráfico en un túnel EoIP

Fecha: 3 y 4 de abril del 2024

 

Escenario

 

Este laboratorio es el tercero en la trilogía EoIP y analiza el aumento de bytes de una trama/paquete al pasar por el túnel,

ya que se le agregan nuevas cabeceras de layers 2, 3 y “3 ½”. También el aumento de 4 bytes por el etiquetado 802.1q

ya que el túnel pasar tramas de diferentes VLANs, y que sucede al excedernos en la MTU.

 

 

 

1.- Tomemos como ejemplo una trama/paquete con un ping “cargado” (MTU al máximo):

 

1.1.- Se genera en el host origen (VLAN 1 sin etiquetar de extremo a extremo):

 

C:\> ping 192.168.0.100 -f -l 1472

 

Haciendo ping a 192.168.0.100 con 1472 bytes de datos:

Respuesta desde 192.168.0.100: bytes=1472 tiempo=2ms TTL=128

Respuesta desde 192.168.0.100: bytes=1472 tiempo=9ms TTL=128

Respuesta desde 192.168.0.100: bytes=1472 tiempo=2ms TTL=128

Respuesta desde 192.168.0.100: bytes=1472 tiempo=2ms TTL=128

 

 

Podemos ver la trama/paquete a su máxima capacidad ya que faltan los 4 bytes del CRC que completa los 1518 bytes.

 

 

1.2.- En tránsito:

 

 

Aquí vemos que existe fragmentación ya que al tunelarse se agregan nuevas cabeceras y la trama/paquete “crece” 42 bytes, y por lo tanto

La cuenta es 1518 + 42 = 1560 > 1518.

 

 

 

1.2.1.- Detalle curioso (o rebuscado) de como Wireshark nos muestra las tramas/paquetes fragmentados:

 

Frame 1: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits)

Ethernet II, Src: 18:fd:74:03:b7:9a, Dst: 18:fd:74:03:b9:2a                          (layer 2, 14 bytes)

Internet Protocol Version 4, Src: 181.10.139.236, Dst: 181.111.221.110  (layer 3, 20 bytes)

Data (1480 bytes)

 

0000  18 fd 74 03 b9 2a 18 fd 74 03 b7 9a 08 00 45 00

0010  05 dc cd 03 20 00 fe 2f f6 19 b5 0a 8b ec b5 6f  (el 2f resaltado indica que el payload es protocolo 47 (GRE/EoIP))

0020  dd 6e 20 01 64 00 05 ea 00 00 e8 6a 64 dc e2 f5

0030  00 23 cd b0 08 89 08 00 45 00 05 dc 9f 2f 40 00

0040  80 01 d3 c1 c0 a8 00 7b c0 a8 00 64 08 00 15 aa

0050  00 01 2a 9d 61 62 63 64 65 66 67 68 69 6a 6b 6c

0060  6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65

---resumido---

05d0  62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71

05e0  72 73 74 75 76 77 61 62 63 64                 

 

1.2.2.- Donde entre los datos podemos ver:

 

La cabecera GRE, layer 2 original, layer 3 original, ICMP y datos comenzando en 61

 

0000  18 fd 74 03 b9 2a 18 fd 74 03 b7 9a 08 00 45 00

0010  05 dc cd 03 20 00 fe 2f f6 19 b5 0a 8b ec b5 6f

0020  dd 6e 20 01 64 00 05 ea 00 00 e8 6a 64 dc e2 f5

0030  00 23 cd b0 08 89 08 00 45 00 05 dc 9f 2f 40 00

0040  80 01 d3 c1 c0 a8 00 7b c0 a8 00 64 08 00 15 aa

0050  00 01 2a 9d 61 62 63 64 65 66 67 68 69 6a 6b 6c

0060  6d 6e 6f 70 71 72 73 74 75 76 77 61 62 63 64 65

---resumido---

05d0  62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71

05e0  72 73 74 75 76 77 61 62 63 64 (ver que los datos del payload terminan en 64)              

 

Frame 2: 76 bytes on wire (608 bits), 76 bytes captured (608 bits)

Ethernet II, Src: 18:fd:74:03:b7:9a, Dst: 18:fd:74:03:b9:2a                           (layer 2,     14 bytes)

Internet Protocol Version 4, Src: 181.10.139.236, Dst: 181.111.221.110  (layer 3,      20 bytes)

Generic Routing Encapsulation (MIKROTIK EoIP)                                    (layer “3 ½”, 8 bytes)

Ethernet II, Src: 00:23:cd:b0:08:89, Dst: e8:6a:64:dc:e2:f5                         

Internet Protocol Version 4, Src: 192.168.0.123, Dst: 192.168.0.100

Internet Control Message Protocol )                                                           (layer “3 ½”, 8 bytes)

    Type: 8 (Echo (ping) request)

    Code: 0

    Checksum: 0x15aa [correct]

    [Checksum Status: Good]

    Identifier (BE): 1 (0x0001)

    Identifier (LE): 256 (0x0100)

    Sequence Number (BE): 10909 (0x2a9d)

    Sequence Number (LE): 40234 (0x9d2a)

    [Response frame: 4]

    Data (1472 bytes)

 

Frame (76 bytes):

0000  18 fd 74 03 b9 2a 18 fd 74 03 b7 9a 08 00 45 00

0010  00 3e cd 03 00 b9 fe 2f 1a ff b5 0a 8b ec b5 6f

0020  dd 6e 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 (ver que es continuación de 64 del paquete anterior)

0030  73 74 75 76 77 61 62 63 64 65 66 67 68 69 6a 6b

0040  6c 6d 6e 6f 70 71 72 73 74 75 76 77

           

1.2.3.- Que le sucede a la trama/paquete:

 

1.2.4.- Cuando sale del origen:

 

 

1.2.5.- Cuando llega al router:

 

 

1.2.6.- Cuando se encapsula en EoIP:

 

 

1.2.7.- Cuando se transmite:

 

 

1.2.8.- Cuando se recibe:

 

 

 

1.3.- En destino:

 

 

Aquí vemos que la trama vuelve a la normalidad, igual que cuando se transmitió en el host origen. Otro dato que nos llevamos es que no existe

reesamblado de las tramas/paquetes en el host final tal como otros casos sino que esto se produce en el terminador del túnel EoIP.

 

 

 

 

2.- Con VLAN etiquetada:

 

2.1.- Se genera tráfico en el host origen:

 

 

 

 

Frame 9: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits) on interface id 0

Ethernet II, Src: 00:23:cd:b0:08:89, Dst: e8:6a:64:dc:e2:f5                       (layer  2,      14 bytes)

Internet Protocol Version 4, Src: 192.168.10.123, Dst: 192.168.10.100 (layer  3,      20 bytes)

Internet Control Message Protocol                                                         (layer “3 ½”’,  8 bytes)

Data (1472 bytes)                                                                                       (payload, 1472 bytes)

                                                                                                                         Total: 1514 bytes

0000  e8 6a 64 dc e2 f5 00 23 cd b0 08 89 08 00 45 00 

0010  00 3c b9 ab 00 00 80 01 00 00 c0 a8 0a 7b c0 a8

0020  0a 64 08 00 22 f0 00 01 2a 6b 61 62 63 64 65 66

0030  67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76

0040  77 61 62 63 64 65 66 67 68 69

---resumido---

05d0  75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d

05e0  6e 6f 70 71 72 73 74 75 76 77                    

 

2.2.- Cuando sale del switch hacia el router:

 

Cuando se transmite del switch hacia el router ahora la trama está etiquetada con 802.1q (10T de tagged)

 

 

 

Se puede ver que de 1514 bytes (1518 con el CRC) “crece” a 1518 bytes (1522 con el CRC).

 

 

 

Frame 1: 1518 bytes on wire (12144 bits), 1518 bytes captured (12144 bits)

Ethernet II, Src: 00:23:cd:b0:08:89, Dst: e8:6a:64:dc:e2:0f

    Destination: e8:6a:64:dc:e2:0f

    Source: 00:23:cd:b0:08:89

    Type: 802.1Q Virtual LAN (0x8100) (ver ethertype más abajo)

802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10

    000. .... .... .... = Priority: Best Effort (default) (0)

    ...0 .... .... .... = DEI: Ineligible

    .... 0000 0000 1010 = ID: 10

    Type: IPv4 (0x0800) (ver ethertype más abajo)

Internet Protocol Version 4, Src: 192.168.10.123, Dst: 192.168.10.100

Internet Control Message Protocol

Data (1472 bytes)

 

 

Fuente: https://en.wikipedia.org/wiki/EtherType

 

 

 

2.3.- Cuando transita por el túnel EoIP:

 

La trama de la VLAN 10 al salir del switch ya está etiquetada (tagged, 10T) por lo que el túnel la encapsulará etiquetada, agregándole

las cabeceras L2, L3 y GRE lo que le da un aumento de 74 a 120 bytes en tránsito.

 

 

 

En este ejemplo además de las nueva cabeceras agregamos la etiqueta (tag) de 4 bytes correspondiente a la VLAN10.

 

 

 

Frame 17: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits)

Ethernet II, Src: 18:fd:74:03:b7:9a, Dst: 18:fd:74:03:b9:2a

    Destination: 18:fd:74:03:b9:2a

    Source: 18:fd:74:03:b7:9a

    Type: IPv4 (0x0800) (este es el ethertype para IP)

Internet Protocol Version 4, Src: 181.10.139.236, Dst: 181.111.221.110

    0100 .... = Version: 4

    .... 0101 = Header Length: 20 bytes (5)

    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)

    Total Length: 1500

    Identification: 0xcd03 (52483)

    001. .... = Flags: 0x1, More fragments

    ...0 0000 0000 0000 = Fragment Offset: 0

    Time to Live: 254

    Protocol: Generic Routing Encapsulation (47)

    Header Checksum: 0xf619

    Source Address: 181.10.139.236

    Destination Address: 181.111.221.110

Data (1480 bytes)

 

0000  18 fd 74 03 b9 2a 18 fd 74 03 b7 9a 08 00 45 00   (layer 2) (layer 3)

0010  05 dc 5e 04 20 00 fe 2f 65 19 b5 0a 8b ec b5 6f   

0020  dd 6e 20 01 64 00 05 ee 00 00 e8 6a 64 dc e2 f5  (layer 3)(GRE)(layer 2)

0030  00 23 cd b0 08 89 81 00 00 0a 08 00 45 00 05 dc

0040  50 f3 40 00 80 01 0d fe c0 a8 0a 7b c0 a8 0a 64    (layer 3)

0050  08 00 15 a6 00 01 2a a1 61 62 63 64 65 66 67 68 (ICMP)(data)

0060  69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 61

---resumido---

05d0  75 76 77 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d

05e0  6e 6f 70 71 72 73 74 75 76 77  (ver que es 61 en la continuación de data en frame 18)

 

Frame 18: 80 bytes on wire (640 bits), 80 bytes captured (640 bits)

Frame 1: 120 bytes on wire (960 bits), 120 bytes captured (960 bits)

Ethernet II, Src: 18:fd:74:03:b7:9a, Dst: 18:fd:74:03:b9:2a

Internet Protocol Version 4, Src: 181.10.139.236, Dst: 181.111.221.110

Generic Routing Encapsulation (MIKROTIK EoIP) (todas estas cabeceras realmente están en Frame 17,

Ethernet II, Src: 00:23:cd:b0:08:89, Dst: e8:6a:64:dc:e2:f5       comportamiento del Wireshark sin entender)

    Destination: e8:6a:64:dc:e2:f5

    Source: 00:23:cd:b0:08:89

    Type: 802.1Q Virtual LAN (0x8100) (este es el ethertype para 802.1q)

802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10 (este es el VLAN id)                                              

Internet Protocol Version 4, Src: 192.168.10.123, Dst: 192.168.10.100

Internet Control Message Protocol                                                       

Data (1472 bytes)

 

0000  18 fd 74 03 b9 2a 18 fd 74 03 b7 9a 08 00 45 00   

0010  00 6a 98 54 00 00 fe 2f 50 3b b5 0a 8b ec b5 6f  

0020  dd 6e 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e

0030  6f 70 71 72 73 74 75 76 77 61 62 63 64 65 66 67

0040  68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77

        

2.4.- Cuando entra al switch desde el router:

 

 

Cuando sale del switch al host destino:

 

 

 

Cuando se recibe en la PC destino:

 

 

 

En este caso la trama/paquete es exactamente igual a la enviada (de hecho es la misma) ya que pertenece al mismo segmento

LAN, no hay saltos con decrementos TTL, etc... y la trama ya se encuentra sin etiquetar (untagged).

 

 

 

 

3.- Cómo buscamos la máxima MTU posible en el túnel:

 

Activamos el bit DF (Don’t Fragment) utilizando el argumento -f y buscamos con prueba y error un valor aproximado,

en este caso lo resumimos a los valores de la prueba, pero generalmente son varios intentos.

 

C:\> ping 192.168.10.251 -f -l 1473

 

Haciendo ping a 192.168.10.251 con 1473 bytes de datos:

Es necesario fragmentar el paquete pero se especificó DF.

Es necesario fragmentar el paquete pero se especificó DF.

Es necesario fragmentar el paquete pero se especificó DF.

Es necesario fragmentar el paquete pero se especificó DF.

 

C:\> ping 192.168.10.251 -f -l 1472 (este es el MTU máximo utilizando el túnel con tag 802.1q de 4 bytes extra)

 

Haciendo ping a 192.168.10.251 con 1472 bytes de datos:

Respuesta desde 192.168.10.251: bytes=1472 tiempo=5ms TTL=255

Respuesta desde 192.168.10.251: bytes=1472 tiempo=5ms TTL=255

Respuesta desde 192.168.10.251: bytes=1472 tiempo=5ms TTL=255

Respuesta desde 192.168.10.251: bytes=1472 tiempo=3ms TTL=255

 

 

4.- Resumen:

 

Cuando utilizamos la máxima capacidad de transmisión (MTU) debemos tener en cuenta que en el recorrido de extremo

a extremo podemos tener modificaciones tales como el etiquetado (802.1q) o reencapsulado del tráfico, o como también

el agregado de cabeceras (GRE/EoIP), lo que puede llevar a la fragmentación.

 

En este caso puntual, la fragmentación ocurre entre ambos terminadores GRE/EoIP y es transparente, pero hay casos

Donde la fragmentación permanece hasta el host final y eso a veces lleva a (fuertes) dolores de cabeza.

 

El tema de la fragmentación tiene mucho para experimentar, aquí dejo uno algo…áspero. Que lo disfruten…

 

 

(2024) I’dont need a doctor, I’m sure

Rosaro, Argentina