Addressing, Routing, and Forwarding

Download Report

Transcript Addressing, Routing, and Forwarding

Lab 4
Dynamic Routing
CS144 Review Session 5
October 30, 2009
Samir Selman
Announcements
• Lab 4 : Due in 2 weeks (Thurs ,Nov 12)
• Lab 3 : Due Yesterday
• For those of you submitting late, contact us
before your deadline if you need an additional
extension. Tell us:
– Where you are
– How much more time you need
Routing
• Static Routing (Implemented Lab 3)
• Dynamic Routing:
– Unicast Routing:
• Interior Gateway Protocols (RIP, OSPF, IS-IS)
• Exterior Gateway Protocols (BGP)
– Multicast Routing
• Examples: Multicast OSPF (MOSPF) , Multicast
BGP(MBGP)
• This Lab will cover RIP
Routing
Routing Information Protocol(RIP)
• RIP:
– Routing Protocol based on Bellman-Ford, Distance Vector
algorithm.
– Intra-domain routing algorithm or interior gateway
protocol (IGP)
– Cost is usually hop count
– Limitations:
• The protocol is limited to networks whose longest path is 15 hops
• The protocol depends upon "counting to infinity" to resolve
certain unusual situations
• The protocol uses fixed "metrics" to compare alternative routes
RIP-Lab4: Implementation
• Lab 4 is just a subset of RIP
• Want you to focus on the RIP part of the
router => Supplied you with ‘dr’ binary
• Binary relies on API implemented in a shared
library to handle dynamic routing. You should
implement this library.
• Write code in dr_api.h and dr_api.c
RIP-Lab4
• Each Router has a forwarding table containing
an entry for every destination network.
• Forwarding table Entry: (Dest Network, Cost,
Next-hop, Time Stamp).
– Dest Network: Represented by a network address
and a network mask (X.X.X.X / Y)
– Cost: Sum of link costs to reach destination.
– Next-hop: IPv4 address of next router along the
path to destination
– Time Stamp: Used to timeout routing entries
RIP-Lab4: RIP Packet Format
• RIP packet:
• Command: Indicates whether packet is request or response
– Request: Asks that a router sends all or part of its routing table.
(For this Lab you don’t need to worry about RIP Requests)
– Response: Either unsolicited routing update or a response to
request.
• Version: RIP version used. Lab 4 uses RIP V2
• AFI: Address family used. (AF_INET)
• Route Tag: Not used in this lab (replaced by pad)
RIP-Lab4: RIP Packet Format
• RIP packet:
• Network address: IP address for the entry
• Subnet Mask: Contains subnet mask for the entry
• Next Hop: Indicates IP address of the next hop to which
packets for the entry is forwarded.
• Metric: Indicates how many hops(routers) have been
traversed in the trip to the destination. (16=unreachable)
RIP-Lab4: Periodic Updates
• Send routing updates:
– At regular intervals (periodic)
– When a router changes the metric to a route (Triggered
Updates)
• Every 10 sec send RIP reply message to all neighbors
containing complete routing table
• Triggered update when an interface goes down or
cost of a local interface changes.
RIP-Lab4: Route Timeouts
• Dynamic Route:
– Route learned from a neighboring router
– Have a Timestamp field per entry
– When receive an update, a router sets the entry Timestamp
value to the current time.
– Periodically check if entries expired (current time –
updatetime > 20 sec.
– If an entry expires => set the Cost = INFINITY
• Local Route:
– Directly Connected Networks
– Invalid TTL= -1
– Next_hop_ip = 0
RIP-Lab4: Routing Loops
• Split Horizon with Poisoned Reverse
– Prevent a loop from occurring between two nodes
– Advertise information back to source with cost INFINITY.
– What about loops with more than 2 nodes. eq: A -> B, B ->
C, C -> A ?
• Cannot stop such a loop using split horizon.
• This loop will only be resolved when the metric reaches infinity
and the network involved is then declared unreachable
• Speed up process using triggered update.
RIP-Lab4: Routing Loops
RIP-Lab4: Code
• You should only touch the safe_ methods (threading handled
already for you)
• Routing table entry
/** a single entry in the routing table */
typedef struct route_t {
uint32_t subnet;
/* destination subnet which this route is for */
uint32_t mask;
/* mask associated with this route */
uint32_t next_hop_ip; /* next hop on on this route */
uint32_t outgoing_intf; /* interface to use to send packets on this route */
uint32_t cost;
struct timeval last_updated;
int is_garbage; /* boolean which notes whether this entry is garbage */
route_t* next; /* pointer to the next route in a linked-list */
} route_t;
RIP-Lab4: Code
• safe_dr_get_next_hop(ip): Called when router needs to know
how to route a packet. Returns which interface packet should
be sent out and IP address of next hop.
• safe_dr_handle_packet: Method called when router receives
a dynamic routing packet.
• safe_dr_handle_periodic(): Method called periodically by the
router.
• safe_dr_interface_changed: When interface goes up or down
or upon a change in direct link cost
• dr_init: Used to initialize any internal data structures.
RIP-Lab4: Running the Lab
• First start the lvns server
– ./lvns -t simple.topo
• If the server is running on the same machine as the dr
instance, then you can start a router which takes control of a
node named "dr1" like this:
– ./dr -v dr1
• If you are running dr from a separate location you'll want to
specify the server‘s address and port explicitly:
– ./dr -v dr1 -s myth5.stanford.edu -p 9999