-
1.
Week 3
Building a network
Supporting applications
-
2.
Agenda
• Building a network
• Network basics
• Distance Vector routing
• Link State routing
• Supporting applications
-
3.
Addresses
• What are the advantages/drawbacks of
hierarchical versus flat addresses ?
-
4.
Port-station tables
• What are the advantages/drawbacks of this
approach ?
• How to deal with mobile devices ?
• What about multihomed devices ?
-
5.
Label switching
• What are the advantages/drawbacks of this
approach ?
• How to create the virtual circuits
automatically ?
-
6.
Source routing
• What are the advantages/drawbacks of this
approach ?
-
7.
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
-
8.
Agenda
• Building a network
• Network basics
• Distance Vector routing
• Link State routing
• Supporting applications
-
9.
Distance vectors
l How to deal with link failures ?
C
A B C
D E
D E
-
10.
How to react ?
All routes that use a failed link are advertised with
an infinite cost
C
Routing table
B : 0 [Local]
A : ¥
C : 1 [East]
E : 1 [South]
D : 2 [South]
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=¥
-
11.
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;
}
}
Why ?
-
12.
Example
Routing table
A : 0 [ Local ]
D : 1 [South]
B : ¥
C : ¥
E : ¥
Routing table
C : 0 [Local]
E : 1 [South-West]
D : 2 [South-West]
Routing table
B : 0 [Local]
A : ¥
C : 1 [East]
E : 1 [South]
D : 2 [South]
A B C
A=0;B=¥;C=¥;D=1;E=¥
D E
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]
D must removes all the routes learned from
North that are announced with an ∞ cost
-
13.
Example
C
Routing table
B : 0 [Local]
A : ¥
C : 1 [East]
E : 1 [South]
D : 2 [South]
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
-
14.
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
-
15.
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
-
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: 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 ?
-
17.
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=¥
-
18.
Another failure
Routing table
C : 0 [Local]
E : 1 [South-West]
D : 2 [South-West]
A: 3 [South-West]
B : 1 [West]
C
Routing table
B : 0 [Local]
A : 3 [South]
C : 1 [East]
E : 1 [South]
D : 2 [South]
A B C
A=0;D=1;B=3;C=3;E=2
D E
Routing table
A : 0 [ Local ]
D : 1 [South]
B : 3 [South]
C : 3 [South]
E : 2 [South]
D E
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 : ¥
But A could also send its distance vector before D
-
19.
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
-
20.
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
-
21.
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 ?
-
22.
Another failure
Split horizon
Split horizon with poisoning
-
23.
Split horizon
A B C
E
Routing table
A : 0 [ Local ]
D : 1 [South]
B : 3 [South]
C : 3 [South]
E : 2 [South]
D E
• A will not pollute D’s routing table
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=0
-
24.
Split horizon (2)
D can also send its distance vector
C
D E
Routing table
A : 0 [ Local ]
D : 1 [South]
E : ¥
C : ¥
B : ¥
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]
D=0;B=¥;C=¥;E=¥
Does split horizon allows to avoid all counting to
infinity problems ?
-
25.
Limitations
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=1;E=¥
-
26.
Limitations
C
E
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
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=¥
-
27.
Operational issue
Operation
At each expiration of its 30-sec timer, each router
sends its distance vector and restarts its timer
Problem
After a power failure, all routers might restart at
same time and have synchronised timers
Each router will need to process bursts of DV
messages
-
28.
Agenda
• Building a network
• Network basics
• Distance Vector routing
• Link State routing
• Supporting applications
-
29.
How to set link costs ?
• By manual configuration
• Based on link bandwidth
• By measurements
-
30.
What is the role of
• Sequence number in link state packets
• How to deal with wrap around ?
• Age field in link state packets
• CRC in link state packets
-
31.
Two way connectivity
check
C
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
A B C
D E
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]
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
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]
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
-
32.
Transient problems
when a link fails
A B
C 100 D
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
-
33.
A detects the failure
A B
C 100 D
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
-
34.
A recomputes Dijkstra
and sends LSP
A B
A:1 C=1
C 100 D
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
-
35.
B detects the failure
A B
A:1 C=1
C 100 D
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
-
36.
B recomputes Dijkstra
and sends its LSP
A B
B:1 D=1
C 100 D
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
-
37.
C recomputes Dijkstra
A B
C 100 D
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
-
38.
D recomputes Dijkstra
A B
C 100 D
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
-
39.
Router failures
• Planned failures
• Router reboot to upgrade OS
• Sudden failure
• due to power outage, software or
hardware crash
-
40.
Agenda
• Building a network
• Supporting applications
• Transport services
• Reliable transport protocols
-
41.
Connectionless
Source Provider Destination
DATA.request(S,D,"M")
DATA.indication(S,D,"M")
Time
-
42.
Connection oriented
Source Network provider Destination
CONNECT.request
CONNECT.indication
CONNECT.confirm
Source considers
connection open
CONNECT.response
Destination considers
connection open
-
43.
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")
-
44.
Data transfer
Stream mode
Source Provider Destination
CONNECT.request
CONNECT.indication
CONNECT.confirm
CONNECT.response
DATA.request("AB") DATA.ind("A")
DATA.request("CD")
DATA.ind("B")
DATA.request("EF") DATA.ind("C")
DATA.ind("DEF")
-
45.
Abrupt release
Source Provider Destination
Connection opened Connection opened
DISCONNECT.req(abrupt)
DISCONNECT.indication
DATA.request("A")
DATA.request("B")
DATA.indication("A")
DATA.request("C")
-
46.
Graceful release
Source Provider Destination
Connection opened Connection opened
DISCONNECT.req(graceful)
DATA.request("C")
DISCONNECT.ind(graceful)
DATA.request("A")
DATA.request("B")
DATA.indication("A")
DATA.indication("B")
Source->Destination
connection closed
DATA.indication("C")
DATA.request("D")
DATA.indication("D")
DISCONNECT.req(graceful)
DISCONNECT.ind(graceful) Connection closed
Connection closed
-
47.
Transport services
useable on Internet
• TCP : Connection oriented, bytestream
• UDP : Connectionless
-
48.
Agenda
• Building a network
• Supporting applications
• Transport services
• Reliable transport protocols
-
49.
Multiplexing
• How to multiplex data coming from
multiple applications ?
-
50.
Reliable transport
• How to establish a connection ?
-
51.
Reliable transport
protocols
• How to reliably transport data ?
-
52.
Reliable transport
• How to terminate a transport connection ?
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&lt;&gt;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.