Resumen

  • RFC 3353 identificó un bloqueo de arranque: una rama LSP multicast activada por tráfico necesitaba recibir el paquete que aún no podía circular por esa rama inexistente.
  • El reenvío mixto L2/L3 o una iniciativa desde el router ascendente rompían el círculo, pero no convertían la llegada local, la señalización, la programación y la entrega a todos los receptores en un solo hecho.

Imaginemos un árbol con un flujo activo hacia un receptor. Otro miembro aparece en una rama nueva. Para no consumir etiquetas en grupos silenciosos, la red decide esperar datos. Cuando llegue el primer paquete, el router inferior detectará demanda y levantará su camino con etiqueta.

La secuencia no funciona tal como está formulada. El router inferior no puede observar por L2 un paquete que requiere ese mismo camino L2. El estándar lo describió como un problema de huevo y gallina. Más que una metáfora, era una advertencia contra una palabra peligrosa: «automático». Todo automatismo tiene un primer observador, una autoridad que actúa y un camino que existe antes del resultado definitivo.

RFC 3353 apareció en agosto de 2002 como documento informativo. No eligió un protocolo ganador ni afirmó que la red ya desplegara sus opciones. Ordenó el espacio de decisiones creado al proyectar árboles de multicast IP sobre caminos MPLS. Un flujo unicast se orientaba hacia un siguiente salto. Un flujo multicast podía salir por varias interfaces, cambiar al incorporarse o marcharse receptores y usar estados distintos según la fuente.

Un árbol compartido se representaba como (*,G); uno por fuente, como (S,G). El primero ahorraba etiquetas, pero exigía funciones multipunto y fusión. El segundo aislaba mejor cada origen, pero multiplicaba el estado. La tecnología subyacente también imponía límites: espacio de etiquetas, capacidad de fusión y tratamiento de TTL. La forma del árbol no era un detalle que MPLS pudiera borrar.

Los protocolos de inundación y poda volvían volátil ese estado. Un paquete podía crear una entrada; un temporizador de inactividad podía retirarla. Reflejar cada transición en L2 exigía señalización rápida y podía gastar etiquetas. Mantener previamente todos los LSP gastaba recursos aun sin tráfico. Esperar al primer paquete era eficiente en reposo y costoso en el instante de arranque.

El RFC separó tres familias de disparadores. Un disparador por solicitud observaba mensajes de Join, Prune o reserva. Uno por topología copiaba al plano L2 el árbol de la tabla multicast. Uno por tráfico reaccionaba a los datos. La elección cambiaba cuándo se gastaban etiquetas, qué protocolo debía modificarse, cuánto tardaba la primera entrega y quién podía iniciar la señalización.

La salida más flexible era el reenvío mixto. Un mismo router podía conmutar por L2 las ramas ya instaladas y reenviar por L3 la rama nueva. Así, el paquete inicial encontraba un paso provisional. Su llegada creaba el hecho observable que faltaba; después se podía solicitar la etiqueta, programar la réplica y mover el tráfico. La coexistencia de capas era una herramienta de transición, no un fallo de pureza arquitectónica.

Esa herramienta requería disciplina. El motor L3 debía excluir las interfaces que ya recibían copias en L2. De lo contrario, la transición duplicaría paquetes. Si el nodo no admitía reenvío mixto, el impulso debía proceder de arriba: el LSR ascendente solicitaba o anunciaba la etiqueta. La tabla de RFC 3353 mostraba que el disparador y el sentido de distribución no eran dos preferencias independientes.

Esta dependencia fija un límite de evidencia. El primer paquete confirma actividad en un punto y un momento. Un fallo de caché confirma que falta una entrada local. La tabla multicast confirma una decisión local de control. Un mensaje de etiqueta confirma una negociación parcial. La entrada del ASIC confirma programación en un dispositivo. Para afirmar entrega hacen falta además datos en cada receptor relevante. El árbol lógico no es una factura de transporte.

El ejemplo del Multicast Forwarding Cache de Unix revela un problema posterior. El paquete inicial generaba un fallo de caché; el demonio de multicast aportaba la ruta. Cuando MPLS empezaba a conmutar el flujo por L2, el camino IP dejaba de ver paquetes. Si la caché L3 usaba sus propios contadores para expirar, podía borrar un flujo activo.

RFC 3353 propuso alimentar esos contadores con mediciones L2. Era una reconciliación necesaria, pero no una medida neutra. El contador L3 pasaba a contener actividad declarada por otra capa. Debía conservarse su procedencia, intervalo, reinicio y asociación con la rama correcta. Una cifra actualizada no indicaba qué receptor vio cada copia.

PIM-SM añadía estados coexistentes. Durante el cambio desde el árbol compartido hacia uno de fuente, un router podía tener (*,G) y (S,G) al mismo tiempo. Durante unos instantes, una fuente podía llegar por ambas entradas. L3 podía aplicar la semántica del estado para evitar la copia indebida. Una solución L2 podía tolerar duplicados, asignar etiquetas por fuente o devolver parte del flujo a IP. La etiqueta aceleraba el reenvío; no tomaba la decisión semántica.

La encapsulación marcaba otra frontera. Los emisores podían tunelar hacia la raíz del árbol compartido, donde el paquete se desencapsulaba. Encapsular y desencapsular eran operaciones de L3, de modo que no existía un único LSP extremo a extremo que atravesara el punto sin interpretación. Podía etiquetarse el túnel o las ramas restantes, pero no negar el cambio de capa.

También el piggy-backing tenía una factura. Incluir la asociación de etiqueta en mensajes multicast sincronizaba ruta y label y reducía mensajes separados. A cambio, vinculaba la solución a cada protocolo, eliminaba combinaciones de disparadores y podía sustituir la comunicación fiable de LDP sobre TCP por anuncios periódicos de estado blando. Recibir ese anuncio seguía sin demostrar que el plano de datos replicara.

En medios compartidos, varios routers inferiores necesitaban aceptar la misma etiqueta para un flujo. Podían memorizar todas las asignaciones, repartir rangos o elegir un asignador. La asignación ascendente simplificaba el hecho de que solo había un nodo de entrada al árbol, pero un cambio topológico podía reemplazarlo. La asignación descendente soportaba mejor ese cambio, aunque varios receptores podían proponer valores distintos. El RFC dejó la elección fuera de alcance porque cada opción movía la complejidad.

Los estándares posteriores hicieron visibles más piezas. RFC 4461 formuló requisitos para LSP P2MP con ingeniería de tráfico. RFC 4875 convirtió un LSP P2MP en varios sub-LSP de fuente a hoja, unidos en routers de ramificación. Y dejó una separación decisiva: la señalización podía ramificarse sin que el plano de datos replicara en ese punto. Una rama en los mensajes no era una rama en ejecución.

RFC 5332 corrigió además una expectativa de 2002. La distinción original de RFC 3032 entre codepoints de enlace unicast y multicast no se había desplegado; el nuevo texto redefinió el segundo para etiquetas asignadas desde arriba en medios multiacceso. Más tarde RFC 6513 mantuvo para las VPN multicast la tensión entre árboles de distribución e ingress replication mediante túneles unicast. Se podía pagar con estado o con ancho de banda, pero no eliminar el coste.

La historia de RFC 3353 no es la victoria de una arquitectura. Es la exposición de un comienzo. Antes de la rama final había un paquete, un trayecto IP provisional o una decisión ascendente. Después del intercambio de etiquetas aún faltaban programación, réplica y verificación. La red solo era comprensible si se conservaba ese orden.

Fuentes