Skip to content

fersegundo22/gpon-dba

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simulador GPON DBA - Asignación Dinámica de Ancho de Banda

Python Licencia

Simulador del algoritmo DBA (Dynamic Bandwidth Allocation) de GPON. Implementa 4 algoritmos de asignación de ancho de banda usados en OLTs reales. Simula tramas GTC, REPORT/GATE, T-CONTs y mide rendimiento.


El DBA: el corazón de la OLT

En GPON, el upstream es TDMA — solo una ONT transmite a la vez. El DBA decide cuánto ancho de banda y cuándo transmite cada ONT en cada trama de 125 µs. Un mal algoritmo causa latencia, jitter y desperdicio de fibra.


Algoritmos Implementados

Algoritmo Tipo Descripción
SR-DBA Status Reporting Usa reportes explícitos de cola (ITU-T G.984.3)
NSR-DBA Non-Status Reporting Estima tráfico sin reportes, por patrón de uso
GIANT-DBA Predictivo Predicción EWMA con margen de ráfaga
Round-Robin Simple Reparto equitativo (referencia)

Características

  • Tramas GTC: downstream (2.488 Gbps) y upstream (1.244 Gbps), 125 µs
  • T-CONT tipos 1-5: fijo, asegurado, no-asegurado, best-effort, super
  • BWmap: construcción del mapa de ancho de banda por trama
  • REPORT/GATE: intercambio de reportes de cola
  • Ranging: cálculo de equalization delay por distancia
  • Métricas: utilización, retardo, jitter, fairness (Jain), pérdida
  • Comparativa: ejecuta los 4 algoritmos sobre la misma red y compara
  • Generadores de tráfico: CBR, VBR, bursty para simular servicios reales

Instalación

git clone https://github.com/fersegundo22/gpon-dba.git
cd gpon-dba

Sin dependencias externas. Solo Python 3.8+.


Uso

# Comparativa de los 4 algoritmos
python examples/demo.py --comparativa

# Demo rapida (solo SR-DBA)
python examples/demo.py --rapido
from simulador_gpon import SimuladorGPON, DBA_SR, DBA_GIANT
from simulador_gpon.tcont import TipoTCONT, TrafficGenerator

sim = SimuladorGPON(DBA_SR(), semilla=42)

# Agregar ONTs con perfiles de servicio
sim.agregar_ont(
    distancia_km=3.0, descripcion="Cliente FTTH",
    tconts_config=[{
        "alloc_id": 1, "tipo": TipoTCONT.BEST_EFFORT,
        "ancho_maximo_bps": 200_000_000
    }],
    generadores=[(1, TrafficGenerator(80_000_000, tipo="bursty"))]
)

# Simular 1 segundo (8000 tramas)
metricas = sim.simular(num_tramas=8000, verbose=True)
print(metricas.resumen())

Topología simulada

                    OLT (DBA)
                      |
          =========== PON =========== (fibra GPON)
          |       |       |      |
        ONT1    ONT2   ONT3   ONT16
       (100M)  (200M)  (50M)  (300M)
       
   T-CONTs por ONT: voz(fijo) + IPTV(asegurado) + internet(best-effort)

Métricas de salida

  METRICAS DBA: SR-DBA
  ============================================================
  Tramas simuladas:     8000
  Utilizacion promedio: 78.3%
  Retardo promedio:     245.1 us
  Jitter promedio:      52.3 us
  Indice de Jain:       0.9234
  Perdida global:       1.23%

Estructura

gpon-dba/
├── simulador_gpon/
│   ├── __init__.py
│   ├── trama.py          # GTC frames, BWmap, REPORT
│   ├── tcont.py          # T-CONT tipos y generadores
│   ├── ont.py            # ONT simulada (EQD, T-CONTs)
│   ├── dba.py            # Algoritmos DBA (SR, NSR, GIANT, RR)
│   ├── simulador.py      # Simulador principal
│   └── metricas.py       # Métricas y Jain fairness
├── examples/
│   └── demo.py
├── tests/
│   └── test_gpon.py
└── README.md

Licencia

MIT

About

Simulador del algoritmo DBA de GPON: 4 algoritmos de asignación dinámica de ancho de banda (SR, NSR, GIANT, Round-Robin). Tramas GTC, T-CONT, REPORT/GATE, ranging y métricas de rendimiento

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages