Victor Putrich e Bruno Lippert
O trabalho consiste em desenvolver um simulador de rede. O simulador deve receber como parâmetros de execução o nome de um arquivo de descrição de topologia (conforme formato especificado), um comando (ping ou traceroute), um nó origem e um nó destino. O simulador deve apresentar na saída as mensagens enviadas pelos nós e roteadores da topologia conforme o formato estabelecido.
Formato do arquivo de descrição de topologia
#NODE <node_name>,,<IP/prefix>, #ROUTER <router_name>,<num_ports>,,<IP0/prefix>,,<IP1/prefix>,,<IP2/prefix> … #ROUTERTABLE <router_name>,<net_dest/prefix>,, Formato de saída
Pacotes ARP Request: Note over <src_name> : ARP Request
Who has <dst_IP>? Tell <src_IP>
Pacotes ARP Reply: <src_name> ->> <dst_name> : ARP Reply
<src_IP> is at <src_MAC>
Pacotes ICMP Echo Request: <src_name> ->> <dst_name> : ICMP Echo Request
src=<src_IP> dst=<dst_IP> ttl=
Pacotes ICMP Echo Reply: <src_name> ->> <dst_name> : ICMP Echo Reply
src=<src_IP> dst=<dst_IP> ttl=
Pacotes ICMP Time Exceeded: <src_name> ->> <dst_name> : ICMP Time Exceeded
src=<src_IP> dst=<dst_IP> ttl=
Modo de execução do simulador
$ simulador
EXEMPLO:
Arquivo topologia.txt
#NODE n1,00:00:00:00:00:01,192.168.0.2/24,192.168.0.1 n2,00:00:00:00:00:02,192.168.0.3/24,192.168.0.1 n3,00:00:00:00:00:03,192.168.1.2/24,192.168.1.1 n4,00:00:00:00:00:04,192.168.1.3/24,192.168.1.1 #ROUTER r1,2,00:00:00:00:00:05,192.168.0.1/24,00:00:00:00:00:06,192.168.1.1/24 #ROUTERTABLE r1,192.168.0.0/24,0.0.0.0,0 r1,192.168.1.0/24,0.0.0.0,1 Exemplos de execução:
$ simulador topologia.txt ping n1 n2
Note over n1 : ARP Request
Who has 192.168.0.3? Tell 192.168.0.2
n2 ->> n1 : ARP Reply
192.168.0.3 is at 00:00:00:00:00:02
n1 ->> n2 : ICMP Echo Request
src=192.168.0.2 dst=192.168.0.3 ttl=8
n2 ->> n1 : ICMP Echo Reply
src=192.168.0.3 dst=192.168.0.2 ttl=8
$ simulador topologia.txt ping n1 n3
Note over n1 : ARP Request
Who has 192.168.0.1? Tell 192.168.0.2
r1 ->> n1 : ARP Reply
192.168.0.1 is at 00:00:00:00:00:05
n1 ->> r1 : ICMP Echo Request
src=192.168.0.2 dst=192.168.1.2 ttl=8
Note over r1 : ARP Request
Who has 192.168.1.2? Tell 192.168.1.1
n3 ->> r1 : ARP Reply
192.168.1.2 is at 00:00:00:00:00:03
r1 ->> n3 : ICMP Echo Request
src=192.168.0.2 dst=192.168.1.2 ttl=7
n3 ->> r1 : ICMP Echo Reply
src=192.168.1.2 dst=192.168.0.2 ttl=8
r1 ->> n1 : ICMP Echo Reply
src=192.168.1.2 dst=192.168.0.2 ttl=7
$ simulador topologia.txt traceroute n1 n3
Note over n1 : ARP Request
Who has 192.168.0.1? Tell 192.168.0.2
r1 ->> n1 : ARP Reply
192.168.0.1 is at 00:00:00:00:00:05
n1 ->> r1 : ICMP Echo Request
src=192.168.0.2 dst=192.168.1.2 ttl=1
r1 ->> n1 : ICMP Time Exceeded
>src=192.168.0.1 dst=192.168.0.2 ttl=8
n1 ->> r1 : ICMP Echo Request
src=192.168.0.2 dst=192.168.1.2 ttl=2
Note over r1 : ARP Request
Who has 192.168.1.2? Tell 192.168.1.1
n3 ->> r1 : ARP Reply
192.168.1.2 is at 00:00:00:00:00:03
r1 ->> n3 : ICMP Echo Request
src=192.168.0.2 dst=192.168.1.2 ttl=1
n3 ->> r1 : ICMP Echo Reply
src=192.168.1.2 dst=192.168.0.2 ttl=8
r1 ->> n1 : ICMP Echo Reply
src=192.168.1.2 dst=192.168.0.2 ttl=7
Detalhes para construção do simulador:
TTL inicial dos pacotes IP deve ser igual a 8 o simulador deverá suportar o uso de subredes na composição da topologia a topologia poderá apresentar loops de roteamento a tabela de roteamento pode conter uma rota default representada por 0.0.0.0/0 o simulador deve ser executado a partir de um terminal por linha de comando de acordo com o exemplo apresentado - não deve ser necessário utilizar uma IDE para executar o simulador!!! o simulador pode ser implementado em qualquer linguagem a entrada e saída devem respeitar EXATAMENTE os formatos apresentados (inclusive espaços) o formato de saída é baseado na linguagem mermaid (https://mermaid-js.github.io/mermaid). Sugere-se verificar se a saída está correta através do site https://mermaid-js.github.io/mermaid-live-editor/ (incluir "sequenceDiagram" no topo da saída)