-Host 10.10.10.1
----------------
-
-Rutas:
-
-* 10.10.10.1 0.0.0.0 0
-* 10.10.10.3 10.10.10.5 0
-* 10.10.10.5 0.0.0.0 0
-
-Envía "adios mundo cruel!!!" al host 10.10.10.3::
-
- $ ./test_ipout 10.10.10.1 10.10.10.3 25 ../rutas_ejemplo/route_10.10.10.1.txt
- Se agregó tabla para 10.10.10.1: gw = 0.0.0.0, metric = 0
- Se agregó tabla para 10.10.10.2: gw = 0.0.0.0, metric = 0
- Se agregó tabla para 10.10.10.3: gw = 10.10.10.5, metric = 0
- Se agregó tabla para 10.10.10.5: gw = 0.0.0.0, metric = 0
- adios mundo cruel!!!
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=40 id=56121 DF=0 MF=1 offset=0 TTL=64 proto=0 checksum=196 src=10.10.10.1 dst=10.10.10.3
- data (5) = adios
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=35 id=56121 DF=0 MF=1 offset=5 TTL=64 proto=0 checksum=231 src=10.10.10.1 dst=10.10.10.3
- data (5) = mund
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=30 id=56121 DF=0 MF=1 offset=10 TTL=64 proto=0 checksum=266 src=10.10.10.1 dst=10.10.10.3
- data (5) = o cru
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=25 id=56121 DF=0 MF=0 offset=15 TTL=64 proto=0 checksum=297 src=10.10.10.1 dst=10.10.10.3
- data (5) = el!!!
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- Enviado 'adios mundo cruel!!!' a 10.10.10.3
-
-El proceso test_ipin de este host no tiene relevancia.
-
-Router 10.10.10.5
------------------
-
-Rutas:
-
-* 10.10.10.1 0.0.0.0 0
-* 10.10.10.3 0.0.0.0 0
-* 10.10.10.5 0.0.0.0 0
-
-Recibe el mensaje::
-
- $ ./test_ipin 10.10.10.5 25 1 1
- Quedan 4 mensajes en la cola
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPIn::recv: IPHeader: version= total_len=40 id=56121 DF=0 MF=1 offset=0 TTL=64 proto=0 checksum=196 src=10.10.10.1 dst=10.10.10.3
- data (5) = adios
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPIn::recv: IPHeader: version= total_len=35 id=56121 DF=0 MF=1 offset=5 TTL=64 proto=0 checksum=231 src=10.10.10.1 dst=10.10.10.3
- data (5) = mund
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPIn::recv: IPHeader: version= total_len=30 id=56121 DF=0 MF=1 offset=10 TTL=64 proto=0 checksum=266 src=10.10.10.1 dst=10.10.10.3
- data (5) = o cru
- Dev::transmit(msgtype/mac = 168430085, size = 25)
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPIn::recv: IPHeader: version= total_len=25 id=56121 DF=0 MF=0 offset=15 TTL=64 proto=0 checksum=297 src=10.10.10.1 dst=10.10.10.3
- data (5) = el!!!
- Dev::transmit(msgtype/mac = 168430085, size = 25)
-
-Y lo forwardea (refragmentando porque tiene un MTU más pequeño)::
-
- $ ./test_ipout 10.10.10.5 10.10.10.1 23 ../rutas_ejemplo/route_10.10.10.5.txt
- Se agregó tabla para 10.10.10.1: gw = 0.0.0.0, metric = 0
- Se agregó tabla para 10.10.10.2: gw = 0.0.0.0, metric = 0
- Se agregó tabla para 10.10.10.3: gw = 0.0.0.0, metric = 0
- Se agregó tabla para 10.10.10.5: gw = 0.0.0.0, metric = 0
- a
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=21 id=56140 DF=0 MF=0 offset=0 TTL=64 proto=0 checksum=194 src=10.10.10.5 dst=10.10.10.1
- data (1) = a
- Dev::transmit(msgtype/mac = 168430081, size = 21)
- Enviado 'a' a 10.10.10.1
- a
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPOut::send: A forwardear
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=40 id=56121 DF=0 MF=1 offset=0 TTL=64 proto=0 checksum=196 src=10.10.10.1 dst=10.10.10.3
- data (3) = adi
- Dev::transmit(msgtype/mac = 168430083, size = 23)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=37 id=56121 DF=0 MF=1 offset=3 TTL=64 proto=0 checksum=217 src=10.10.10.1 dst=10.10.10.3
- data (2) = os
- Dev::transmit(msgtype/mac = 168430083, size = 22)
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPOut::send: A forwardear
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=35 id=56121 DF=0 MF=1 offset=5 TTL=64 proto=0 checksum=231 src=10.10.10.1 dst=10.10.10.3
- data (3) = mu
- Dev::transmit(msgtype/mac = 168430083, size = 23)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=32 id=56121 DF=0 MF=1 offset=8 TTL=64 proto=0 checksum=252 src=10.10.10.1 dst=10.10.10.3
- data (2) = nd
- Dev::transmit(msgtype/mac = 168430083, size = 22)
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPOut::send: A forwardear
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=30 id=56121 DF=0 MF=1 offset=10 TTL=64 proto=0 checksum=266 src=10.10.10.1 dst=10.10.10.3
- data (3) = o c
- Dev::transmit(msgtype/mac = 168430083, size = 23)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=27 id=56121 DF=0 MF=1 offset=13 TTL=64 proto=0 checksum=287 src=10.10.10.1 dst=10.10.10.3
- data (2) = ru
- Dev::transmit(msgtype/mac = 168430083, size = 22)
- Dev::receive(msgtype/mac = 168430085, size = 25)
- IPOut::send: A forwardear
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=25 id=56121 DF=0 MF=1 offset=15 TTL=64 proto=0 checksum=301 src=10.10.10.1 dst=10.10.10.3
- data (3) = el!
- Dev::transmit(msgtype/mac = 168430083, size = 23)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=22 id=56121 DF=0 MF=0 offset=18 TTL=64 proto=0 checksum=62 src=10.10.10.1 dst=10.10.10.3
- data (2) = !!
- Dev::transmit(msgtype/mac = 168430083, size = 22)
- IPOut::send: Fragmento 0 => IPHeader: version= total_len=21 id=56147 DF=0 MF=0 offset=0 TTL=64 proto=0 checksum=201 src=10.10.10.5 dst=10.10.10.1
- data (1) = a
- Dev::transmit(msgtype/mac = 168430081, size = 21)
- Enviado 'a' a 10.10.10.1
-
-(notar que para que haga el forwarding se tuvo que enviar un paquete
-*dummy* para que busque en la cola de paquetes a forwardear (es un error
-de diseño que tendré que corregir de alguna forma)
-
-Host 10.10.10.3
----------------
-
-Rutas:
-
-* 10.10.10.1 10.10.10.5 0
-* 10.10.10.3 0.0.0.0 0
-* 10.10.10.5 0.0.0.0 0
-
-Finalmente este host recibe todos los fragmentos, reensabla y pasa el
- paquete completo a la capa superior::
-
- $ ./test_ipin 10.10.10.3 23
- Quedan 8 mensajes en la cola
- Dev::receive(msgtype/mac = 168430083, size = 23)
- IPIn::recv: IPHeader: version= total_len=40 id=56121 DF=0 MF=1 offset=0 TTL=64 proto=0 checksum=196 src=10.10.10.1 dst=10.10.10.3
- data (3) = adi
- Dev::receive(msgtype/mac = 168430083, size = 22)
- IPIn::recv: IPHeader: version= total_len=37 id=56121 DF=0 MF=1 offset=3 TTL=64 proto=0 checksum=217 src=10.10.10.1 dst=10.10.10.3
- data (2) = os
- Dev::receive(msgtype/mac = 168430083, size = 23)
- IPIn::recv: IPHeader: version= total_len=35 id=56121 DF=0 MF=1 offset=5 TTL=64 proto=0 checksum=231 src=10.10.10.1 dst=10.10.10.3
- data (3) = mu
- Dev::receive(msgtype/mac = 168430083, size = 22)
- IPIn::recv: IPHeader: version= total_len=32 id=56121 DF=0 MF=1 offset=8 TTL=64 proto=0 checksum=252 src=10.10.10.1 dst=10.10.10.3
- data (2) = nd
- Dev::receive(msgtype/mac = 168430083, size = 23)
- IPIn::recv: IPHeader: version= total_len=30 id=56121 DF=0 MF=1 offset=10 TTL=64 proto=0 checksum=266 src=10.10.10.1 dst=10.10.10.3
- data (3) = o c
- Dev::receive(msgtype/mac = 168430083, size = 22)
- IPIn::recv: IPHeader: version= total_len=27 id=56121 DF=0 MF=1 offset=13 TTL=64 proto=0 checksum=287 src=10.10.10.1 dst=10.10.10.3
- data (2) = ru
- Dev::receive(msgtype/mac = 168430083, size = 23)
- IPIn::recv: IPHeader: version= total_len=25 id=56121 DF=0 MF=1 offset=15 TTL=64 proto=0 checksum=301 src=10.10.10.1 dst=10.10.10.3
- data (3) = el!
- Dev::receive(msgtype/mac = 168430083, size = 22)
- IPIn::recv: IPHeader: version= total_len=22 id=56121 DF=0 MF=0 offset=18 TTL=64 proto=0 checksum=62 src=10.10.10.1 dst=10.10.10.3
- data (2) = !!
- IPIn::recv: Paquete completo: data = 'adios mundo cruel!!!'
- Recibido 'adios mundo cruel!!!' (len 20) de 10.10.10.1 para 10.10.10.3 (proto = 0)
-
-El proceso test_ipout de este host no tiene relevancia.
-
-
-.. vim: filetype=rst :
+Archivo de configuración de zonas de 10.10.10.2::
+
+ homero.casa 600 10.10.10.1
+ tito A 10.10.100.1
+ juan A 10.10.100.2
+ juan A 10.10.100.3
+ pepe A 10.10.100.4
+ juan A 10.10.100.5
+ pepe A 10.10.100.6
+ marge NS 10.10.10.3
+ todos NS 10.10.10.1
+ todos NS 10.10.10.3
+ todos NS 10.10.10.141
+
+Línea de comandos::
+
+ ./dns 10.10.10.2 ../rutas_ejemplo/mi_lan.txt ../zonas_ejemplo/10.10.10.2.txt
+
+Resolución de un nombre local con una sola IP
+---------------------------------------------
+
+Línea de comandos::
+
+ ./dns 10.10.10.2 ../rutas_ejemplo/mi_lan.txt ../zonas_ejemplo/10.10.10.2.txt
+
+Salida::
+
+ tito.homero.casa
+ Resolviendo tito.homero.casa...
+ resolv_direct -> tratando de resolver: tito.homero.casa
+ resolv_direct found (local/hijo): ResolvProtoResponse(ret=2, ttl=600, 10.10.100.1)
+ resolv_recursive -> gotcha! ResolvProtoResponse(ret=2, ttl=600, 10.10.100.1)
+ Resultado: ResolvProtoResponse(ret=2, ttl=600, 10.10.100.1)
+
+Resolución de un nombre local con múltiples IP
+----------------------------------------------
+
+Salida::
+
+ juan.homero.casa
+ Resolviendo juan.homero.casa...
+ resolv_direct -> tratando de resolver: juan.homero.casa
+ resolv_direct found (local/hijo): ResolvProtoResponse(ret=2, ttl=600, 10.10.100.2, 10.10.100.3, 10.10.100.5)
+ resolv_recursive -> gotcha! ResolvProtoResponse(ret=2, ttl=600, 10.10.100.2, 10.10.100.3, 10.10.100.5)
+ Resultado: ResolvProtoResponse(ret=2, ttl=600, 10.10.100.2, 10.10.100.3, 10.10.100.5)
+
+Resolución de un nombre local no existente
+------------------------------------------
+
+Salida::
+
+ none.homero.casa
+ Resolviendo none.homero.casa...
+ resolv_direct -> tratando de resolver: none.homero.casa
+ resolv_direct NOT FOUND (es local pero no existe)
+ Resultado: ResolvProtoResponse(ret=4, ttl=0)
+
+Resolución de un nombre remoto con múltiples IP y 2 niveles de indirección
+--------------------------------------------------------------------------
+
+Archivo de configuración de zonas de 10.10.10.1::
+
+ casa 600 0.0.0.0
+ burns A 10.10.10.1
+ homero A 10.10.10.2
+ marge A 10.10.10.3
+ manuk A 10.10.10.141
+ juan A 100.10.100.5
+ pepe A 100.10.100.6
+ homero NS 10.10.10.2
+ marge NS 10.10.10.3
+ manuk NS 10.10.10.141
+
+ burns.casa 600 0.0.0.0
+ tito A 100.10.100.1
+ juan A 100.10.100.2
+ juan A 100.10.100.3
+ pepe A 100.10.100.4
+ juan A 100.10.100.5
+ pepe A 100.10.100.6
+
+ todos.homero.casa 9500 0.0.0.0
+ tito A 10.1.100.1
+ juan A 10.1.100.2
+ juan A 10.1.100.3
+ pepe A 10.1.100.4
+ juan A 10.1.100.5
+ pepe A 10.1.100.6
+
+Archivo de configuración de zonas de 10.10.10.3::
+
+ marge.casa 600 10.10.10.1
+ tito A 30.10.100.1
+ juan A 30.10.100.2
+ juan A 30.10.100.3
+ pepe A 30.10.100.4
+ juan A 30.10.100.5
+ pepe A 30.10.100.6
+ manuk NS 10.10.10.141
+ todos NS 10.10.10.1
+ todos NS 10.10.10.3
+ todos NS 10.10.10.141
+
+ todos.homero.casa 9500 10.10.10.2
+ tito A 10.1.100.1
+ juan A 10.1.100.2
+ juan A 10.1.100.3
+ pepe A 10.1.100.4
+ juan A 10.1.100.5
+ pepe A 10.1.100.6
+
+ marge.homero.casa 9500 10.10.10.2
+ tito A 10.3.100.1
+ juan A 10.3.100.2
+ juan A 10.3.100.3
+ pepe A 10.3.100.4
+ juan A 10.3.100.5
+ pepe A 10.3.100.6
+
+
+La petición se realiza desde 10.10.10.2, quien debe recurir a su nodo padre
+(10.10.10.1) que indica que el encargado de resolver esa zona es 10.10.10.3.
+
+Salida de 10.10.10.2::
+
+ pepe.marge.casa
+ Resolviendo pepe.marge.casa...
+ resolv_direct -> tratando de resolver: pepe.marge.casa
+ resolv_direct -> evaluando padre 10.10.10.1
+ resolv_direct found (al padre): 10.10.10.1
+ resolv_recursive -> redirect a ResolvProtoResponse(ret=3, ttl=600, 10.10.10.1)
+ query -> pidiendo ResolvProtoRequest(query_type=0, name=pepe.marge.casa) a 10.10.10.1
+ query -> recibido ResolvProtoResponse(ret=3, ttl=600, 10.10.10.3) de 10.10.10.1
+ resolv_recursive_r -> redirect a ResolvProtoResponse(ret=3, ttl=600, 10.10.10.3)
+ query -> pidiendo ResolvProtoRequest(query_type=0, name=pepe.marge.casa) a 10.10.10.3
+ query -> recibido ResolvProtoResponse(ret=2, ttl=600, 30.10.100.4, 30.10.100.6) de 10.10.10.3
+ resolv_recursive_r -> gotcha! ResolvProtoResponse(ret=2, ttl=600, 30.10.100.4, 30.10.100.6)
+ Resultado: ResolvProtoResponse(ret=2, ttl=600, 30.10.100.4, 30.10.100.6)
+
+Salida de 10.10.10.1::
+
+ NameServer::send_loop() -> recibido ResolvProtoRequest(query_type=0, name=pepe.marge.casa)
+ resolv_direct -> tratando de resolver: pepe.marge.casa
+ resolv_direct found (local/hijo): ResolvProtoResponse(ret=3, ttl=600, 10.10.10.3)
+ NameServer::send_loop() -> respondo ResolvProtoResponse(ret=3, ttl=600, 10.10.10.3)
+
+Salida de 10.10.10.3::
+
+ NameServer::send_loop() -> recibido ResolvProtoRequest(query_type=0, name=pepe.marge.casa)
+ resolv_direct -> tratando de resolver: pepe.marge.casa
+ resolv_direct found (local/hijo): ResolvProtoResponse(ret=2, ttl=600, 30.10.100.4, 30.10.100.6)
+ NameServer::send_loop() -> respondo ResolvProtoResponse(ret=2, ttl=600, 30.10.100.4, 30.10.100.6)
+
+.. vim: filetype=rst sw=2 sts=2 et :