Slides supporting the "Computer Networking: Principles, Protocols and Practice" ebook. The slides can be freely reused to teach an undergraduate computer networking class using the open-source ebook.
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
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]
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 ?
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
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
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 : ...
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
Notas do Editor
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);
}
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.
In this example, the duplicate CR is likely to be a previous retransmission of the CR that was delayed in the network.