C语言实现网络链路路由程序
Assignment
3
Computer
Networks
(CS
456/656)
Spring 20
19
Shortest
Path
Routing
Algorithm
Due Date: Monday, July 29, 2019, before midnight (11:59 PM
) Work
on
this
assignment
is
to
be
completed
individually
1 Assignment
Objective
For
this
assignment,
you
will
implement
a
shortest
path
routing
algorithm.(
OSPF). 2 Overview
Like
most
link‐state
algorithms,
OSPF
uses
a
graph‐theoretic
model
of
network
topology
to
compute
shortest
paths.
Each
router
periodically
broadcasts
information
about
the
status
of
its
connections.
OSPF
floods
each
status
message
to
all
participating
routers.
A
router
uses
arriving
link
state
information
to
assemble
a
graph.
Whenever
a
router
receives
information
that
changes
its
copy
of
the
topology
graph,
it
runs
a
conventional
graph
algorithm
to
compute
shortest
paths
in
the
graph,
and
uses
the
results
to
build
a
new
next‐hop
routing
table.
FIGURE 1: INTERNET TOPOLOGY
OSPF uses a directed graph to model an Internet. Each node in an OSPF topology graph either corresponds to a router or a network. If a physical connection exists between two objects in an Internet, the OSPF graph contains a pair of directed edges (one in each direction) between the two nodes that represent the objects. To enable routers to compute shortest paths, each edge in an OSPF graph is assigned a weight that corresponds to the cost of using the path.
The identities of the links that are attached to a router together with their cost metrics are entered into a table (known as the circuit database).
1
2
Circuit
Database
for
R1
Link
Cost
L1
2
L2
1
FIGURE
2:
INITIALIZED
CIRCUIT
DATABASE
Before a router can send any PDU to its neighbors it should first send a HELLO PDU to tell its neighbor that the router is ready to participate in the OSPF procedure. So at the beginning of the procedure each router sends a HELLO PDU to each of its neighbors.
Each router sends to each of its neighbors a link state (LS) PDU containing the identifiers of the links to which the router is attached together with the cost values. In this way, a router receives some LS PDUs from each of its neighbors informing it of the links that are attached to it and their cost values. This information is stored in the link state database by the update process in the router.
R1
From
R2
–
R2:
L1,2/L3,4/L4,1/L6,4
R3
–
R3:
L2,1/L3,4/L5,3/L8,4
R2
From
R1
–
R1:
L1,2/L1,1
R3
–
R3:
L2,1/L3,4/L5,3/L8,4
R4
–
R4:
L4,1/L5,3/L7,5
R5
–
R5:
L6,4/L9,2
|
|
|
R7
From
R4
–
R4:
L4,1/L5,3/L7,5
R5
–
R5:
L6,4/L9,2
R6
–
R6:
L8,4/L10,2
FIGURE 3: LINK STATE DATABASE AFTER FIRST SET OF LS PDUS
When it has done this, the update process in each router sends a copy of the LS PDU to each of its neighbors (except the one that has sent the PDU and those from which it has not received a HELLO PDU yet; also the same message should be sent to a router only once to avoid loops). As a result, each router receives a further set of LS PDUs which have effectively originated from its neighbors’ neighbors. This procedure then continues. As can be deduced, over a period of time each router will receive a complete set of LS PDUs containing the identities of the links ‐ and their path cost values ‐ which are attached to all other routers in the Internet.
Whenever a new set of LS PDUs is entered into the link state database, the router performs the Shortest Path First (SPF) algorithm on the link state database, and determines, from all the entries in
the various databases, which neighbor R should be used to reach each of the other routers based on their corresponding path cost values.
To illustrate this procedure, consider its application to the example subnet shown in Figure 1.
The initialized circuit database is shown in Figure 2 and the first set of LS PDUs that are received by each router (R) is shown in Figure 3.
For example, R1 will receive 8 LS PDUs, 4 from R2 and 4 from R3. Similarly, R2 will receive 11 LS PDUs, 2 from R1, 4 from R3, 3 from R4 and 2 from R5.
As described earlier, on receipt of each of these PDUs and if those later affect its LS database, each R will then generate another set of LS PDUs, and pass them on to each of its neighbors. This procedure then repeats. The first, second and third sets of LS PDUs that will be received by R1 are shown in Figure 4, Figure 5, and Figure 6.
3
FIGURE
4:
LINK
STATE
DATABASE
DEVELOPMENT
FOR
R1
(FIRST
SET
OF
LS
PDUS)
FIGURE 5: LINK STATE DATABASE DEVELOPMENT FOR R1 (SECOND SET OF LS PDUS)
FIGURE 6: LINK STATE DATABASE DEVELOPMENT FOR R1 (THIRD SET OF LS PDUS)
Finally,
Figure
7
shows
the
output
of
the
decision
process
for
R1.
This
is
the
routing
information
base
(RIB)
and
is
computed
by
the
decision
process
performing
the
SPF
algorithm
on
the
contents
of
the
link
state
database
to
determine
the
shortest
(minimum)
path
cost
to
each
destination
R.
Destination
R
Path,
Cost
R1
R2
R3
R4
R5
R6
R7
Local,0
R2,2
R3
1
R2,3
R2,6
R3,5
R3,7
FIGURE
7:
FINAL
RIB
FOR
R1
3 Hints
The
following
structures
are
assumed
(and
should
be
respected):
#define NBR_ROUTER 5
struct pkt_HELLO
{
unsigned int router_id;
unsigned int link_id;
strruct pkt_LSPDU
{
unsigned int sender;
unsigned int router_id;
unsigned int link_id;
unsigned int cost;
unsigned int via;
/* for simplicity we consider only 5 routers */
/* id of the router who sends the HELLO PDU */
/* id of the link through which it is sent */
/* sender of the LS PDU */
/* router id */
/* link id */
/* cost of the link */
/* id of the link through which the LS PDU is sent */
}
}
4
struct pkt_INIT
{
unsigned int router_id;
struct link_cost
{
unsigned int link;
unsigned int cost;
struct circuit_DB
{
unsigned int nbr_link;
struct link_cost linkcost[NBR_ROUTER];
/* we assume that at most NBR_ROUTER links are attached to each router */
}
When
a
router
needs
to
send
packets
to
another
router,
it
sends
them
to
the
Network
State
Emulator
instead
of
sending
them
directly
to
the
router.
The
Network
State
Emulator
then
forwards
the
routers
packets
to
the
right
receiver.
4 What
to
do?
You
should
implement
the
router
program,
named
router.
Its
command
line
input
should
include
the
following:
where
,
• <router_id>
is
an
integer
that
represents
the
router
id.
It
should
be
unique
for
each
router.
• <nse_host>
is
the
host
where
the
Network
State
Emulator
is
running.
• <nse_port>
is
the
port
number
of
the
Network
State
Emulator.
• <router_port>
is
the
router
port
You
will
be
given
the
executable
of
the
Network
State
Emulator
(nse),
where
circuit
databases
are
hardcoded
and
will
be
sent
to
the
routers
during
the
initialization
phase.
Its
command
line
is:
where,
• <routers_host>
is
the
host
where
the
routers
are
running.
For
simplicity
we
suppose
that
all
routers
are
running
on
the
same
host.
• <nse_port>
is
the
Network
State
Emulator
port
number.
The
Network
State
Emulator
will
not
affect
any
packet;
it
simply
forwards
the
packet
to
the
right
receiver.
The
topology
used
by
the
simulator
is
also
provided
in
an
accompanying
PDF
file.
First
each
router
must
send
an
INIT
packet
to
the
Network
State
Emulator
containing
the
router’s
id.
After
the
Network
State
Emulator
receives
an
INIT
packet
from
each
router,
the
Network
State
Emulator
will
send
to
each
router
the
circuit
database
associated
with
that
router.
The
circuit
database
}
/* id of the router that send the INIT PDU */
/* link id */
/* associated cost */
}
5
nse <routers_host> <nse_port>
/* number of links attached to a router */
router <router_id> <nse_host> <nse_port> <router_port>
will
be
sent
in
a
circuit_DB
structure.
For
the
assignment,
you
should
always
run
the
five
router
programs
in
order
from
the
1st
to
the
5th.
Then
each
router
must
send
a
HELLO
packet
to
all
its
neighbors.
Each
router
will
respond
to
each
HELLO
packet
by
a
set
of
LS PDUs
containing
its
circuit
database.
When
receiving
an
LS PDU
a
router
will
update
its
topology
database
and
then
it
will
send
to
all
its
neighbors
(except
the
one
that
send
the
LS PDU
and
those
from
which
the
router
did
not
receive
a
HELLO
packet
yet)
the
LS PDU.
The
LS PDU
is
contained
in
the
pkt_LSPDU
structure.
Before
a
router
can
send
the
pkt_LSPDU,
it
must
change
the
field
sender
to
its
router
id
value.
When
receiving
an
LS PDU
a
router
should
also
use
the
Dijkstra
algorithm
using
its
link
state
database
to
determine
the
shortest
(minimum)
path
cost
to
each
destination
R.
For both testing and grading purpose, your router program should be able to generate a log file, named as router (id).log, where id is the id of the router (i.e. router 1 will generate a log file with name router1.log). The routers must record in the log file all the messages that they receive and all messages that they send. They must also record their topology database every time this later changes. The log file should contain the corresponding RIB for each topology. Before each line of the trace, the router must write its id.
An example of a message trace is the following:
R1 receives an LS PDU: sender 3, router_id 7, link_id 7, cost 5, via 2 /* it can be interpreted as : R1 receives from R3 via link id 2 that R7 has a link with id 7 and cost 5 */
An
example
of
a
topology
database
is
shown
in
the
following:
# Topology database
R1 -> R1 nbr link 2
R1 -> R1 link 1 cost 2
R1 -> R1 link 2 cost 1
R1 -> R2 nbr link 4
R1 -> R2 link 1 cost 2
R1 -> R2 link 3 cost 4
R1 -> R2 link 4 cost 1
R1 -> R2 link 6 cost 4
Notice
that
the
topology
database
will
be
subject
to
change
every
time
information
about
a
new
router
becomes
available
An
example
of
a
RIB
is
given
below:
# RIB
R1 -> R1 -> Local, 0
R1 -> R2 -> R2, 2
R1 -> R3 -> R3, 1
R1 -> R4 -> R2, 3
R1 -> R5 -> R2, 6
R1 -> R6 -> R3, 5
R1 -> R7 -> R3, 7
6
4.1 Example
Execution
(with
5
routers)
• On
the
host
hostX
nse hostY 9999
• On
the
host
hostY
router 1 hostX 9999 9991
router 2 hostX 9999 9992 router 3 hostX 9999 9993 router 4 hostX 9999 9994 router 5 hostX 9999 9995
• Expected
output
router1.log router2.log router3.log
router4.log router5.log
5 Procedures
5.1 Due
Date
Monday, July 29, 2019, before midnight (11:59 PM)
5.2 Hand
in
Instructions
Submit your all your files in a single compressed file (.zip, .tar etc.) using UW‐LEARN Assignment 3 Drop Box.
You
must
hand
in
the
following
files
/
documents:
• Source
code
files.
• Makefile:
your
code
must
compile
and
link
cleanly
by
typing
“make”
or
“gmake”.
• README
file:
this
file
must
contain
instructions
on
how
to
run
your
program,
which
undergrad
machines
your
program
was
built
and
tested
on,
and
what
version
of
make
and
compilers
you
are
using.
If
you
choose
not
to
use
C,
the
makefile
you
submit
must
generate
shell
scripts
that
run
your
programs
as
specified.
Name
the
script
router.
Your
implementation
will
be
tested
on
the
machines
available
in
the
undergrad
environment.
5.3 Documentation
Since
there
is
no
external
documentation
required
for
this
assignment,
you
are
expected
to
have
a
reasonable
amount
of
internal
code
documentation
(to
help
the
markers
read
your
code).
You
will
lose
marks
if
your
code
is
unreadable,
sloppy,
inefficient,
or
not
modular.
5.4 Evaluation
Work
on
this
assignment
is
to
be
completed
individually.
7