Datagrama IPv6 y fragmentación
Un datagrama IPv6 empieza con una cabecera base de 40 bytes fijos — sin opciones, sin IHL, sin campo de fragmentación— seguida de cero o más cabeceras de extensión encadenadas. Esa decisión de diseño es la que explica el tema que más confunde del protocolo: la fragmentación en IPv6 funciona al revés que en IPv4. Aquí los routers no fragmentan; solo el host origen lo hace, y solo si hace falta.
La cabecera base es la misma cosa vista como suma de campos: 8 bytes de control + 32 bytes de direcciones.
El campo cuenta solo lo que sigue a estos 40 bytes (extensiones + datos), a diferencia del Total Length de IPv4 que sí incluía su propia cabecera.
1. La cabecera base y la cadena Next Header
El campo estrella de IPv6 es Next Header: en vez de meter opciones dentro de la cabecera (como hacía IPv4 con su IHL variable), IPv6 las saca a cabeceras de extensión y las encadena con un puntero. Cada cabecera dice, con su Next Header, de qué tipo es la siguiente. Es, literalmente, una lista enlazada que termina en un protocolo de transporte (TCP=6, UDP=17, ICMPv6=58).
① La cabecera base IPv6 — 40 bytes fijos
Haz clic en un campo o en un byte del dump: ambos se resaltan a la vez. Fíjate en que no hay campo de fragmentación aquí dentro (ni IHL, ni opciones): IPv6 saca esos campos de la cabecera base y los mueve a cabeceras de extensión.
Ejemplo: 2001:db8::1 → 2001:db8::2, payload 1440 B. El byte 0x06 (Next Header) cambia al activar una cabecera de extensión.
El campo clave de IPv6: dice de qué tipo es la SIGUIENTE cabecera. Puede ser una cabecera de extensión (44 = Fragment, 0 = Hop-by-Hop, 43 = Routing…) o un protocolo de transporte (6 = TCP, 17 = UDP, 58 = ICMPv6). Es el puntero de una lista enlazada.
Esta es la cabecera que el origen inserta para fragmentar. Offset en unidades de 8 bytes; M = 1 en todos menos el último; el Identification (32 b) une los fragmentos del mismo datagrama.
Cada cabecera apunta a la siguiente con su Next Header. Para fragmentar, el origen inserta la cabecera Fragment (44) en esta cadena — no toca la cabecera base.
Las direcciones de origen y destino (128 bits cada una) salen de Direccionamiento IPv4 e IPv6, donde se ven bit a bit.
2. Fragmentación: el corazón del post
Cuando un datagrama es más grande que el MTU (Maximum Transmission Unit) del enlace, hay que partirlo en fragmentos. La pregunta es quién lo parte y dónde guarda la información para reensamblarlo. Ahí IPv4 e IPv6 toman caminos opuestos:
En ambos, el offset de cada fragmento se mide en unidades de 8 bytes y el último fragmento se marca con su bit de «no hay más»:
| Aspecto | IPv4 | IPv6 |
|---|---|---|
| ¿Quién fragmenta? | Origen y cualquier router del camino | Solo el host origen |
| ¿Dónde vive el campo? | Dentro de la cabecera (Identification, Flags, Fragment Offset) | En una cabecera de extensión Fragment (Next Header = 44) |
| Identification | 16 bits | 32 bits |
| Si no cabe en un router | El router lo fragmenta (salvo bit DF=1 → descarta + ICMP) | Lo descarta + ICMPv6 «Packet Too Big» |
| MTU mínimo garantizado | 576 B | 1280 B |
| ¿Quién reensambla? | Solo el destino | Solo el destino |
Mueve el MTU y el tamaño de la carga y compara cómo cada protocolo parte el mismo paquete. Fíjate en que IPv6 paga más overhead por fragmento (48 B contra 20 B), razón de más para preferir no fragmentar:
② Fragmentación: IPv4 vs IPv6 (mismo payload, mismo MTU) 🎯
cabecera/fragmento: 20 B · carga máx/fragmento: ⌊(1500−20)/8⌋×8
cabecera/fragmento: 40 + 8 B · carga máx/fragmento: ⌊(1500−48)/8⌋×8
La diferencia que importa: en IPv4 el campo de fragmentación (Identification, MF, Fragment Offset) vive dentro de la cabecera, así que cualquier router puede partir el paquete en vuelo. En IPv6 ese campo no existe en la cabecera base: para fragmentar hay que añadir la cabecera de extensión Fragment, y eso solo lo hace el origen. Un router que recibe un paquete IPv6 demasiado grande lo descarta y devuelve un ICMPv6 tipo 2 «Packet Too Big» con el MTU del enlace; el origen aprende ese MTU (Path MTU Discovery) y, si hace falta, fragmenta él mismo.
En ambos protocolos el offset va en unidades de 8 bytes y el reensamblaje ocurre solo en el destino. Lo que cambia es quiénfragmenta y dónde está el campo.
3. Path MTU Discovery
Si los routers IPv6 no fragmentan, ¿cómo sabe el origen qué tamaño usar? Lo aprende: manda un paquete, y si algún enlace del camino es demasiado estrecho, el router que lo descarta le devuelve un ICMPv6 «Packet Too Big» con el MTU de ese enlace. El origen baja su tamaño y reintenta. El Path MTU es el mínimo de todos los enlaces, y nunca baja de 1280 bytes:
③ Path MTU Discovery — cómo el origen aprende el MTU del camino
El Path MTU es el mínimo de todos los enlaces del camino. Como los routers IPv6 no fragmentan, el origen los «escucha» a través de los ICMPv6 Packet Too Big y ajusta su tamaño — ese es todo el truco de PMTUD.
Conclusión práctica. Como fragmentar en IPv6 es caro (overhead, riesgo de pérdida de un fragmento = pérdida de todo) y depende del origen, lo habitual es evitarlo: las aplicaciones usan PMTUD o segmentan en capas superiores (p. ej. TCP ajusta su MSS) para que el datagrama siempre quepa.
4. Tipos de dirección IPv6 (recap)
No todas las direcciones IPv6 sirven para lo mismo: los bits altos deciden el alcance. Esto se ve bit a bit en Direccionamiento IPv4 e IPv6; aquí basta el resumen porque NDP y SLAAC lo usan:
| Tipo | Prefijo | Para qué |
|---|---|---|
| Global unicast | 2000::/3 | Enrutable en Internet (la «pública»). |
| Link-local | fe80::/10 | Solo dentro del enlace; la forma cada interfaz por sí sola. La usa NDP. |
| ULA (única local) | fc00::/7 | Privada (el equivalente a 10.0.0.0/8 de IPv4). |
| Multicast | ff00::/8 | Uno-a-muchos; reemplaza al broadcast. ff02::1/2, solicited-node… |
IPv6 no tiene broadcast: todo lo que IPv4 hacía con difusión (ARP, DHCP discovery) aquí se hace con multicast.
5. NDP — descubrir vecinos y routers
¿Cómo averigua un host la MAC del vecino con quien quiere hablar, o quién es su router? IPv4 usaba ARP (con broadcast); IPv6 lo reemplaza por NDP (Neighbor Discovery Protocol), cuatro mensajes ICMPv6 sobre multicast: RS y RA (router) y NS y NA (vecino). Elige un escenario y mira el intercambio:
⑤ NDP — Neighbor Discovery (los cuatro mensajes ICMPv6)
«¿hay algún router? mándame el prefijo de la red»
anuncia el prefijo /64, el gateway, el MTU y los flags M/O
prefijo del RA + interface ID (EUI-64 o aleatorio)
| Mensaje NDP (ICMPv6) | Equivalente en IPv4 |
|---|---|
| RS / RA (133 / 134) | Router discovery (ICMP) |
| NS / NA (135 / 136) | ARP request / reply |
| Redirect (137) | ICMP Redirect |
IPv6 elimina ARP y el broadcast: NDP viaja sobre ICMPv6 y usa multicast (la dirección solicited-node) para molestar solo a los nodos relevantes. Con NS/NA un host descubre la MAC de un vecino; con RS/RA descubre el router y el prefijo para autoconfigurarse.
6. SLAAC — autoconfiguración sin DHCP
Con el prefijo que aprendió en un RA, un host IPv6 puede formar su propia dirección sin servidor DHCP: es SLAAC (Stateless Address Autoconfiguration). Solo necesita inventar los 64 bits del interface ID; el método clásico, EUI-64, lo deriva de la MAC. Cambia la MAC y míralo bit a bit:
④ SLAAC / EUI-64 — de la MAC a la dirección IPv6
El bit U/L marca si la MAC es universal (0, asignada de fábrica) o local (1). EUI-64 lo invierte por convención.
En SLAAC, el host toma el prefijo /64 que anuncia el router (en un RA) y le pega su interface ID para formar la dirección global — sin servidor DHCP. La link-local fe80:: la forma siempre, aun sin router. (Hoy muchos SO usan IIDs aleatorios por privacidad en vez de EUI-64, pero el mecanismo del prefijo + interface ID es el mismo.)
El paquete sigue su viaje
Ya tienes el datagrama IPv6 formado: cabecera base de 40 B, su cadena de extensiones y —si hizo falta— sus fragmentos. Con la dirección destino de 128 bits, el siguiente paso es enrutarlo: los mismos algoritmos de Dijkstra y Bellman-Ford que usa IPv4, ahora sobre RIPng y OSPFv3.
Antes de seguir, repasa el reparto de direcciones en Direccionamiento IPv4 e IPv6. En el laboratorio del curso esto se valida con el Lab N°4 — Enrutamiento estático en IPv6 (GNS3 / eNSP).





