# Part 3 : building a network and supporting applications

Professor at Université catholique de Louvain (UCL) and co-founder at Tessares
May. 7, 2021
1 of 63

### Part 3 : building a network and supporting applications

• 1. Week 3 Building a network Supporting applications
• 2. Agenda • Building a network • Network basics • Distance Vector routing • Link State routing • Supporting applications
• 5. Datagram mode • Early work on this concept that lead to the current Internet was done in France • Cyclades project lead by Louis Pouzin http://goo.gl/lwdlwS
• 6. Agenda • Building a network • Network basics • Distance Vector routing • Link State routing • Supporting applications
• 7. What is the distance vector sent by R5 after convergence ? R1 R2 R3 R4 R5 R6 4 4 1 0 9 Default link weight is 1
• 8. Question • How does a router using distance vectors detect the failure of a link ?
• 9. DV sent by R4 when link fails ? R1 R2 R3 R4 R5 R6 3 4 1 0 9 Default link weight is 1
• 10. How to react ? All routes that use a failed link are advertised with an infinite cost C D E Routing table A : 0 [ Local ] D : 1 [South] B : C : E : A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A : 2 [West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : 2 [North] A=0;B= ;C= ;D=1;E= Routing table B : 0 [Local] A : C : 1 [East] E : 1 [South] D : 2 [South]
• 11. Student question • What is the difference between a routing table and a forwarding table ?
• 12. Question • A distance vector router accepts a route towards destination d on link l if any of three conditions is met. What are these three conditions ? • d is not already in the routing table • d is already in the routing table, but with a shorter path • d is already in the routing table, but with a longer path • the sequence number of the distance vector is larger than the previous one • d is already in the routing table, but the route was learned from another link than l • d is already in the routing table, and the route was learned on link l
• 13. Reception of DV Received(Vector V[],link l) { /* received vector from link l */ for each destination=d in V[] { if (d isin R[]) { if ( ((V[d].cost+l.cost) < R[d].cost) OR ( R[d].link == l) ) { /* better route or change to current route */ R[d].cost=V[d].cost+l.cost; R[d].link=l; } } else { /* new route */ R[d].cost=V[d].cost+l.cost; R[d].link=l; } }
• 14. Example D must remove all the routes learned from North that are announced with an ∞ cost Routing table A : 0 [ Local ] D : 1 [South] B : C : E : A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A : 2 [West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : 2 [North] A=0;B= ;C= ;D=1;E= Routing table B : 0 [Local] A : C : 1 [East] E : 1 [South] D : 2 [South]
• 15. Example C D E Routing table A : 0 [ Local ] D : 1 [South] B : C : E : A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A : 2 [West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : D=0;B= ;A=1;C=2;E=11 Routing table B : 0 [Local] A : C : 1 [East] E : 1 [South] D : 2 [South]
• 16. Example C D E Routing table A : 0 [ Local ] D : 1 [South] B : C : 3 [South] E : 2 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A : 2 [West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : Routing table B : 0 [Local] A : C : 1 [East] E : 1 [South] D : 2 [South] B=0;A= ;C=1;E=1;D=2 B=0;A= ;C=1;E=1;D=2
• 17. Example C D E Routing table A : 0 [ Local ] D : 1 [South] B : C : 3 [South] E : 2 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A : B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : Routing table B : 0 [Local] A : C : 1 [East] E : 1 [South] D : 2 [South] E=0;A=2;D=1;C=1;B=1 E=0;A=2;D=1;C=1;B=1 E=0;A=2;D=1;C=1;B=1
• 18. Example C D E Routing table A : 0 [ Local ] D : 1 [South] B : C : 3 [South] E : 2 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A: 3 [South-West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : 2 [East] Routing table B : 0 [Local] A : 3 [South] C : 1 [East] E : 1 [South] D : 2 [South] A=1;B=2;C=2;D=1;E=1 • Everything is ok ?
• 19. Another failure C D E Routing table A : 0 [ Local ] D : 1 [South] B : 3 [South] C : 3 [South] E : 2 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A: 3 [South-West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 1 [East] C : 2 [East] B : 2 [East] Routing table B : 0 [Local] A : 3 [South] C : 1 [East] E : 1 [South] D : 2 [South] A=1;B= ;C= ;D=1;E=
• 20. Another failure But A could also send its distance vector before D C D E Routing table A : 0 [ Local ] D : 1 [South] B : 3 [South] C : 3 [South] E : 2 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A: 3 [South-West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : C : B : Routing table B : 0 [Local] A : 3 [South] C : 1 [East] E : 1 [South] D : 2 [South] A=0;D=1;B=3;C=3;E=2
• 21. Another failure D updates its routing table C D E Routing table A : 0 [ Local ] D : 1 [South] B : 3 [South] C : 3 [South] E : 2 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A: 3 [South-West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 3 [North] C : 4 [North] B : 4 [North] Routing table B : 0 [Local] A : 3 [South] C : 1 [East] E : 1 [South] D : 2 [South] D=0;A=1;E=3;C=4;B=4
• 22. Another failure C D E Routing table A : 0 [ Local ] D : 1 [South] B : 5 [South] C : 5 [South] E : 4 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A: 3 [South-West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 3 [North] C : 4 [North] B : 4 [North] Routing table B : 0 [Local] A : 3 [South] C : 1 [East] E : 1 [South] D : 2 [South] A=0;D=1;B=5;C=5;E=4
• 23. Another failure C D E Routing table A : 0 [ Local ] D : 1 [South] B : 5 [South] C : 5 [South] E : 4 [South] A B C D E Routing table C : 0 [Local] E : 1 [South-West] D : 2 [South-West] A: 3 [South-West] B : 1 [West] Routing table E : 0 [Local] D : 1 [West] A : 2 [West] C : 1 [North-East] B : 1 [North] Routing table D : 0 [Local] A : 1 [North] E : 5[North] C : 6 [North] B : 6 [North] Routing table B : 0 [Local] A : 3 [South] C : 1 [East] E : 1 [South] D : 2 [South] A=1;D=0;B=6;C=6;E=5 • This problem is called counting to infinity • How can we prevent it ?
• 24. Another failure • Split horizon • Split horizon with poisoning
• 25. DV sent by R3 to R1 with split horizon? R1 R2 R3 R4 R5 R6 3 4 1 0 9 Default link weight is 1
• 26. Limitations of split horizon with poisoning C E Routing table A : 0 [ Local ] B : C : E : A B C E Routing table C : 0 [Local] E : 1 [South-West] A : 2 [West] B : 1 [West] Routing table E : 0 [Local] A : 2 [North] C : 1 [North-East] B : 1 [North] Routing table B : 0 [Local] A : 1 [West] C : 1 [East] E : 1 [South] A=2;B=1; C=0;E= A= ;B=0; C=1;E= A= ;B=0; C= E=1
• 27. Limitations E will send its own distance vector B will discover a new route towards A via E and will advertise it to C New count to infinity problem C E Routing table A : 0 [ Local ] B : C : E : A B C E Routing table C : 0 [Local] E : 1 [South-West] A : 2 [West] B : 1 [West] Routing table after B’s vector E : 0 [Local] A : C : 1 [North-East] B : 1 [North] Routing table after C’s vector E : 0 [local] A : 3 [North-East] C : 1 [North-East] B : 1 [North] Routing table B : 0 [Local] A : 1 [West] C : 1 [East] E : 1 [South] A= ;B=0; C=1;E= A=2;B=1; C=0;E=
• 28. Operational issue Operation At each expiration of its 30-sec timer, each router sends its own distance vector and restarts its timer Problem After a power failure, all routers might restart at same time and have synchronized timers Each router will need to process bursts of DV messages
• 29. Loop-free routing • What guarantees the fact that packets sent to destination d will eventually reach destination d ?
• 30. Agenda • Building a network • Network basics • Distance Vector routing • Link State routing • Supporting applications
• 31. How to set link costs ? • By manual configuration • Based on link bandwidth • By measurements • Only strictly positive link weights
• 32. Question • Which of the following informations are contained in a link state packet ? • sequence number • list of paths to reach known destinations • list of pairs (known dest, cost) • age of the link state packet • clock time • list of pairs (neighbor, cost to this neighbor) • CRC
• 33. Link state packet sent by R4 ? R1 R2 R3 R4 R5 R6 3 4 1 0 9 Default link weight is 1
• 34. Two way connectivity check C D E A B C D E Links A-B, B-A : 1 B-E, E-B : 1 B-C, C-B : 1 E-D, D-E : 1 E-C, C-E : 1 A-D, D-A : 1 LSPs E-0 [D:1];[B:1];[C:1] A-0 [D:1];[B:1] B-0 [A:1] [C:1] [E:1] C-0 [B:1] [E:1] D-0 [A:1] [E:1] Links A-B, B-A : 1 B-E, E-B : 1 B-C, C-B : 1 E-D, D-E : 1 E-C, C-E : 1 A-D, D-A : 1 LSPs E-0 [D:1];[B:1];[C:1] A-0 [D:1];[B:1] B-0 [A:1] [C:1] [E:1] C-0 [B:1] [E:1] D-0 [A:1] [E:1] Links A-B, B-A : 1 B-E, E-B : 1 B-C, C-B : 1 E-D, D-E : 1 E-C, C-E : 1 A-D, D-A : 1 LSPs E-0 [D:1];[B:1];[C:1] A-0 [D:1];[B:1] B-0 [A:1] [C:1] [E:1] C-0 [B:1] [E:1] D-0 [A:1] [E:1] Links A-B, B-A : 1 B-E, E-B : 1 B-C, C-B : 1 E-D, D-E : 1 E-C, C-E : 1 A-D, D-A : 1 LSPs E-1 [D:1];[C:1] A-0 [D:1];[B:1] B-0 [A:1] [C:1] [E:1] C-0 [B:1] [E:1] D-0 [A:1] [E:1] Links A-B, B-A : 1 B-E, E-B : 1 B-C, C-B : 1 E-D, D-E : 1 E-C, C-E : 1 A-D, D-A : 1 LSPs E-0 [D:1];[B:1];[C:1] A-0 [D:1];[B:1] B-0 [A:1] [C:1] [E:1] C-0 [B:1] [E:1] D-0 [A:1] [E:1] LSP : E-1 [D:1];[C:1] LSP : E-1 [D:1];[C:1] • A link is only considered useable only if both directions have been advertised
• 35. Transient problems when a link fails A B C D 100 A's FIB B : East C : South D : East D's FIB A : North B : North C : North C's FIB A : North B : North D : North B's FIB A : West C : West D : South A and B are not yet aware of failure Packets will be lost
• 36. A detects the failure A B C D 100 A's FIB B : East C : South D : East D's FIB A : North B : North C : North C's FIB A : North B : North D : North B's FIB A : West C : West D : South B not yet aware of failure A cannot reach B/D Packets continue to be lost
• 37. A recomputes Dijkstra and sends its LSP A B C D 100 A's FIB B : South C : South D : South D's FIB A : North B : North C : North C's FIB A : North B : North D : North B's FIB A : West C : West D : South B not yet aware of failure A loops towards B/D Packets continue to be lost A:1 C=1
• 38. B detects the failure A B C D 100 A's FIB B : South C : South D : South D's FIB A : North B : North C : North C's FIB A : North B : North D : North B's FIB A : West C : West D : South B cannot reach A/C A loops towards B/D Packets continue to be lost A:1 C=1
• 39. B recomputes Dijkstra and sends its LSP A B C D 100 A's FIB B : South C : South D : South D's FIB A : North B : North C : North C's FIB A : North B : North D : North B's FIB A : South C : South D : South B cannot reach A/C A loops towards B/D Packets continue to be lost B:1 D=1
• 40. C recomputes Dijkstra A B C D 100 A's FIB B : South C : South D : South D's FIB A : North B : North C : North C's FIB A : North B : East D : East B's FIB A : South C : South D : South B loops towards A/C A can reach everyone Packets continue to be lost
• 41. D recomputes Dijkstra A B C D 100 A's FIB B : South C : South D : South D's FIB A : West B : North C : West C's FIB A : North B : East D : East B's FIB A : South C : South D : South B can reach everyone A can reach everyone Network has been updated
• 42. Router failures • Planned failures • Router reboot to upgrade OS • Sudden failure • due to power outage, software or hardware crash
• 43. Comparing routing protocols • Neighbour detection • Detecting link failures • Detecting router failures • Link weights • What information is distributed ? • How often ? • How are forwarding tables built ?
• 44. Agenda • Building a network • Supporting applications • Transport services • Reliable transport protocols
• 45. Question • What are the characeristics of the network service in the Internet ? • packets can get lost • packets can get duplicated • transmission errors can affect packet payload • packets can be reordered
• 47. Connection oriented Source Network provider Destination CONNECT.request CONNECT.indication CONNECT.confirm Source considers connection open CONNECT.response Destination considers connection open
• 48. Data transfer Message mode Source Provider Destination CONNECT.request CONNECT.indication CONNECT.confirm CONNECT.response DATA.request("A") DATA.ind("A") DATA.request("BCD") DATA.ind("BCD") DATA.request("EF") DATA.ind("EF")
• 49. Data transfer Stream mode Source Provider Destination CONNECT.request CONNECT.indication CONNECT.confirm CONNECT.response DATA.ind("B") DATA.ind("A") DATA.request("AB") DATA.request("CD") DATA.ind("C") DATA.request("EF") DATA.ind("DEF")
• 50. Abrupt release Source Provider Destination DISCONNECT.req(abrupt) DISCONNECT.indication DATA.request("A") DATA.request("B") DATA.indication("A") DATA.request("C") Connection opened Connection opened
• 51. Graceful release Source Provider Destination DISCONNECT.req(graceful) DISCONNECT.ind(graceful) Connection opened Connection opened DATA.request("A") DATA.request("B") DATA.indication("A") DATA.indication("B") DATA.request("C") DATA.indication("C") Source->Destination connection closed DATA.request("D") DATA.indication("D") DISCONNECT.req(graceful) Connection closed DISCONNECT.ind(graceful) Connection closed
• 52. Transport services useable on Internet • TCP : Connection oriented, bytestream • UDP : Connectionless
• 53. Agenda • Building a network • Supporting applications • Transport services • Reliable transport protocols
• 55. Multiplexing • How to multiplex data coming from multiple applications ?
• 56. Multiplexing Server Client Source port : 1234 Destination port: 5678 Request Response Source port : 5678 Destination port: 1234
• 57. Connection establishment • How to reliably open a connection ? Connect.req Connect.ind CR CA Connection established Connect.resp Connect.conf Connection established Connections A<->B : ... Connections A<->B : ...
• 58. Segment loss Connect.req() Connect.ind() Connect.conf() CA Connection established Connection established CR CR Retransmission timer expires Connect.resp()
• 59. Segments delayed Connect.ind() CR Connect.conf() CA CR Old previous CR First connection established How to detect duplicates ? Connect.req() D CA Connect.resp First connection established First connection stopped First connection stopped
• 60. Delayed segments • How to deal with delayed segments ? • Network level guarantee • No packet will survive more than MSL seconds inside the network • Transport entities use on a local clock to detect duplicated connection establishment requests
• 61. Three way handshake CR (seq=x) CA (seq=y, ack=x) CA (seq=x, ack=y) Sequence number x read from local transport clock Local state : Connection to B : - Wait for ack for CR (x) - Start retransmission timer Sequence number y read from local transport clock CA sent to ack CR Local state : Connection to A : - Wait for ack for CA(y) Received CA acknowledges CR Send CA to ack received CA Local state : Connection to B : - established - current_seq = x The sequence numbers used for the data segments will start from x The sequence numbers used for the data segments will start from y D(x) D(y) Local state : Connection to A : - established - current_seq=y Connection established Connection established Host A Host B
• 62. Reliable transfert • How to reliably transport data ? • Selective repeat is a good starting point • variable delays cause reordering • be careful with duplications • variable delays will influence timers
• 63. Closing a connection • Two different approaches • abrupt release • send a segment that immediately closes the connection –> may lead to losses • graceful release • send a marker that indicates the end of the date, once the marker is acked, all data has been received and connection is closed • independent release of the two directions

### Editor's Notes

1. Pseudocode Every N seconds: for each link=l { /* one different vector for each link */ Vector=null; for each destination=d in R[] { if (R[d].link<>l) { Vector=Vector+Pair(d,R[d].cost); } } Send(Vector); }
2. The Synchronization of Periodic Routing Messages , Floyd, S., and Jacobson, V. IEEE/ACM Transactions on Networking, V.2 N.2, p. 122-136, April 1994.
3. In this example, the duplicate CR is likely to be a previous retransmission of the CR that was delayed in the network.