[[PageOutline]] '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy#ATutorialonSystematicExperimentalDesign A Tutorial on Systematic Experimental Design]''' '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/InstallSoftwareQuagga Step I: Single Node]''' '''[wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga Step II: Small Topology]''' * Back to: [wiki:PaperOSRMethodology/Design Design Summary] * Back to: [wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga/DesignSetup Design Step-by-Step Instructions] {{{ #!html
Image Map
}}} = 5. End-to-End Validation = We first validate end-to-end communication between `client` and server by running `ping` and `traceroute` at the `client`, and then run `iperf` on both `client` and `server`. Open two terminals, and login to `client` and `server`, respectively. == a. End-to-End `traceroute` and `ping` == * Run `ping` from `client` (192.168.10.11) to `server` (192.168.20.10). {{{ pjayant@client:~$ ping 192.168.20.10 PING 192.168.20.10 (192.168.20.10) 56(84) bytes of data. 64 bytes from 192.168.20.10: icmp_seq=1 ttl=61 time=3.12 ms 64 bytes from 192.168.20.10: icmp_seq=2 ttl=61 time=2.42 ms 64 bytes from 192.168.20.10: icmp_seq=3 ttl=61 time=2.37 ms ^C --- 192.168.20.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.375/2.641/3.123/0.341 ms }}} * Run `traceroute` from `client` (192.168.10.11) to `server` (192.168.20.10). {{{ pjayant@client:~$ traceroute 192.168.20.10 traceroute to 192.168.20.10 (192.168.20.10), 30 hops max, 60 byte packets 1 router-1-link-5 (192.168.10.10) 0.458 ms 0.528 ms 0.494 ms 2 router-2-link-0 (192.168.1.2) 0.961 ms 0.867 ms 1.020 ms 3 router-3-link-2 (192.168.3.1) 1.497 ms 1.461 ms 1.422 ms 4 Server-link-6 (192.168.20.10) 1.808 ms 1.661 ms 1.699 ms }}} == b. `iperf` Test == * `iperf` End-to-End TCP test Server Side: {{{ pjayant@server:~$ iperf -s -t 10 -i 1 ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 192.168.20.10 port 5001 connected with 192.168.10.11 port 53744 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 1.0 sec 11.5 MBytes 96.7 Mbits/sec [ 4] 1.0- 2.0 sec 11.6 MBytes 97.4 Mbits/sec [ 4] 2.0- 3.0 sec 11.8 MBytes 99.2 Mbits/sec [ 4] 3.0- 4.0 sec 11.8 MBytes 98.7 Mbits/sec [ 4] 4.0- 5.0 sec 11.8 MBytes 99.3 Mbits/sec [ 4] 5.0- 6.0 sec 11.6 MBytes 97.7 Mbits/sec [ 4] 6.0- 7.0 sec 11.8 MBytes 98.7 Mbits/sec [ 4] 7.0- 8.0 sec 11.7 MBytes 97.8 Mbits/sec [ 4] 8.0- 9.0 sec 11.8 MBytes 99.2 Mbits/sec [ 4] 9.0-10.0 sec 11.8 MBytes 99.4 Mbits/sec [ 4] 0.0-10.2 sec 119 MBytes 98.4 Mbits/sec }}} Client Side: {{{ pjayant@client:~$ iperf -c 192.168.20.10 -t 10 -i 1 ------------------------------------------------------------ Client connecting to 192.168.20.10, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.10.11 port 53744 connected with 192.168.20.10 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 12.0 MBytes 101 Mbits/sec [ 3] 1.0- 2.0 sec 11.8 MBytes 98.6 Mbits/sec [ 3] 2.0- 3.0 sec 11.8 MBytes 98.6 Mbits/sec [ 3] 3.0- 4.0 sec 12.0 MBytes 101 Mbits/sec [ 3] 4.0- 5.0 sec 11.8 MBytes 98.6 Mbits/sec [ 3] 5.0- 6.0 sec 11.8 MBytes 98.6 Mbits/sec [ 3] 6.0- 7.0 sec 12.0 MBytes 101 Mbits/sec [ 3] 7.0- 8.0 sec 11.5 MBytes 96.5 Mbits/sec [ 3] 8.0- 9.0 sec 12.4 MBytes 104 Mbits/sec [ 3] 9.0-10.0 sec 12.1 MBytes 102 Mbits/sec [ 3] 0.0-10.0 sec 119 MBytes 99.8 Mbits/sec }}} * `iperf` End-to-End UDP Test, where the bandwidth is set as 1Mbps by default. Server (192.168.20.10) Side: {{{ pjayant@server:~$ iperf -s -t 10 -i 1 -u ------------------------------------------------------------ Server listening on UDP port 5001 Receiving 1470 byte datagrams UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.20.10 port 5001 connected with 192.168.10.11 port 54422 [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 3] 0.0- 1.0 sec 128 KBytes 1.05 Mbits/sec 0.062 ms 0/ 89 (0%) [ 3] 1.0- 2.0 sec 128 KBytes 1.05 Mbits/sec 0.047 ms 0/ 89 (0%) [ 3] 2.0- 3.0 sec 128 KBytes 1.05 Mbits/sec 0.046 ms 0/ 89 (0%) [ 3] 3.0- 4.0 sec 128 KBytes 1.05 Mbits/sec 0.043 ms 0/ 89 (0%) [ 3] 4.0- 5.0 sec 128 KBytes 1.05 Mbits/sec 0.041 ms 0/ 89 (0%) [ 3] 5.0- 6.0 sec 128 KBytes 1.05 Mbits/sec 0.054 ms 0/ 89 (0%) [ 3] 6.0- 7.0 sec 128 KBytes 1.05 Mbits/sec 0.061 ms 0/ 89 (0%) [ 3] 7.0- 8.0 sec 184 KBytes 1.51 Mbits/sec 0.413 ms 12/ 140 (8.6%) [ 3] 8.0- 9.0 sec 128 KBytes 1.05 Mbits/sec 0.053 ms 0/ 89 (0%) [ 3] 0.0- 9.5 sec 1.24 MBytes 1.10 Mbits/sec 0.049 ms 12/ 893 (1.3%) }}} Client (192.168.10.11) Side: {{{ pjayant@client:~$ iperf -c 192.168.20.10 -t 10 -i 1 -u ------------------------------------------------------------ Client connecting to 192.168.20.10, UDP port 5001 Sending 1470 byte datagrams UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.10.11 port 54422 connected with 192.168.20.10 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 129 KBytes 1.06 Mbits/sec [ 3] 1.0- 2.0 sec 128 KBytes 1.05 Mbits/sec [ 3] 2.0- 3.0 sec 128 KBytes 1.05 Mbits/sec [ 3] 3.0- 4.0 sec 128 KBytes 1.05 Mbits/sec [ 3] 4.0- 5.0 sec 128 KBytes 1.05 Mbits/sec [ 3] 5.0- 6.0 sec 128 KBytes 1.05 Mbits/sec [ 3] 6.0- 7.0 sec 129 KBytes 1.06 Mbits/sec [ 3] 7.0- 8.0 sec 74.6 KBytes 612 Kbits/sec [ 3] 8.0- 9.0 sec 181 KBytes 1.48 Mbits/sec [ 3] 9.0-10.0 sec 128 KBytes 1.05 Mbits/sec [ 3] 0.0-10.0 sec 1.25 MBytes 1.05 Mbits/sec [ 3] Sent 893 datagrams [ 3] Server Report: [ 3] 0.0- 9.5 sec 1.24 MBytes 1.10 Mbits/sec 0.048 ms 12/ 893 (1.3%) }}} The `ping` and `iperf` results showed that the communication between the `client` and the `server` were good. Since the `client` and the server are not directly connected, they can communicate with each other means that the `OSPF` routing worked properly. The `traceroute` showed the hops from the `client` to the `server`, where the intermediate hops are `router-1`, `router-2` and `router-3`. This information also verified the routing path between the `client` and the `server`. = 6. Tracking Routing Table Updates = From the `traceroute` result above, we know that from `client` to `server`, the path is `client` --> `router-1` --> `router-2` --> `router-3` --> `server` Now let's try some failure events and see how many updates occurs at a particular router, and we select `Client` to view the updates, and trigger the failures at `router-2`. * Bring down the interface at router-2 We can make the link between `router-1` and `router-2` fail by bringing down the corresponding interface on `router-2`. We disable the virtual interface at `router-2`, which is associated with the virtual link (`192.168.1.0/24`) to `router-1`. Use `show ip ospf interface` to find the name of that interface. {{{ router-2.quagga.ch-geni-net.instageni.rnoc.gatech.edu(config-router)# do show ip ospf interface eth0 is up ifindex 2, MTU 1500 bytes, BW 0 Kbit OSPF not enabled on this interface eth1 is up ifindex 3, MTU 1500 bytes, BW 0 Kbit Internet Address 192.168.1.2/24, Broadcast 192.168.1.255, Area 0.0.0.0 MTU mismatch detection:enabled Router ID 192.168.5.1, Network Type BROADCAST, Cost: 10 Transmit Delay is 1 sec, State Backup, Priority 1 Designated Router (ID) 192.168.10.10, Interface Address 192.168.1.1 Backup Designated Router (ID) 192.168.5.1, Interface Address 192.168.1.2 Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 Hello due in 5.658s Neighbor Count is 1, Adjacent neighbor count is 1 eth2 is up ifindex 4, MTU 1500 bytes, BW 0 Kbit Internet Address 192.168.2.1/24, Broadcast 192.168.2.255, Area 0.0.0.0 MTU mismatch detection:enabled Router ID 192.168.5.1, Network Type BROADCAST, Cost: 10 Transmit Delay is 1 sec, State DR, Priority 1 Designated Router (ID) 192.168.5.1, Interface Address 192.168.2.1 Backup Designated Router (ID) 192.168.20.11, Interface Address 192.168.2.2 Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 Hello due in 0.410s Neighbor Count is 1, Adjacent neighbor count is 1 eth3 is up ifindex 5, MTU 1500 bytes, BW 0 Kbit Internet Address 192.168.5.1/24, Broadcast 192.168.5.255, Area 0.0.0.0 MTU mismatch detection:enabled Router ID 192.168.5.1, Network Type BROADCAST, Cost: 10 Transmit Delay is 1 sec, State DR, Priority 1 Designated Router (ID) 192.168.5.1, Interface Address 192.168.5.1 Backup Designated Router (ID) 192.168.5.2, Interface Address 192.168.5.2 Multicast group memberships: OSPFAllRouters OSPFDesignatedRouters Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 Hello due in 4.842s Neighbor Count is 1, Adjacent neighbor count is 1 lo is up ifindex 1, MTU 65536 bytes, BW 0 Kbit OSPF not enabled on this interface router-2.quagga.ch-geni-net.instageni.rnoc.gatech.edu(config-router)# }}} For example, in the above the appropriate interface is `eth1`. So the command to bring down the interface to `router-1` is: {{{ router-2.quagga.ch-geni-net.instageni.rnoc.gatech.edu(config-router)# int eth1 router-2.quagga.ch-geni-net.instageni.rnoc.gatech.edu(config-if)# shutdown }}} At this time, we can run `traceroute` from `client` to `server` again, and we see that the path is changed: `client` --> router-1 --> router-4 --> router-3 --> `server`. {{{ root@client:~# traceroute 192.168.20.10 traceroute to 192.168.20.10 (192.168.20.10), 30 hops max, 60 byte packets 1 router-1-link-5 (192.168.10.10) 0.525 ms 0.492 ms 0.511 ms 2 router-4-link-3 (192.168.4.1) 0.679 ms 0.669 ms 0.719 ms 3 router-3-link-2 (192.168.3.1) 1.123 ms 1.124 ms 1.034 ms 4 Server-link-6 (192.168.20.10) 1.298 ms 1.346 ms 1.380 ms }}} When we bring up `eth2` at `router-2` again, we notice another routing table update at `router-1` immediately. The command to bring the interface back up is: {{{ router-2.quagga.ch-geni-net.instageni.rnoc.gatech.edu(config)# int eth1 router-2.quagga.ch-geni-net.instageni.rnoc.gatech.edu(config-if)# no shutdown }}} * Run `traceroute` from `client` (192.168.10.11) to `server` (192.168.20.10). {{{ pjayant@client:~$ traceroute 192.168.20.10 traceroute to 192.168.20.10 (192.168.20.10), 30 hops max, 60 byte packets 1 router-1-link-5 (192.168.10.10) 0.458 ms 0.528 ms 0.494 ms 2 router-2-link-0 (192.168.1.2) 0.961 ms 0.867 ms 1.020 ms 3 router-3-link-2 (192.168.3.1) 1.497 ms 1.461 ms 1.422 ms 4 Server-link-6 (192.168.20.10) 1.808 ms 1.661 ms 1.699 ms }}} In this way, we can see routing table updates over time. '''Previous: [wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga/DesignSetup Small Topology: Design Step-by-Step Instructions]''' '''Next: [wiki:GENIExperimenter/Tutorials/SystematicExprCaseStudy/SmallTopoQuagga/Finish Small Topology: Finish]'''