计算机网络课程的实验
1.距离向量算法
距离向量路由算法要求,每个结点都参与定期交换整个路由表,即把路由表传递给自己与之相连的结点。
首先,当前路由表的组成如下,<目的网络 N,跳数,下一跳地址>
1.1.执行步骤
- 从相邻的 X 路由器接收发送过来的 RIP(Routing Information Protocol) 报文
- 将该 RIP 报文中的下一跳地址修改为 X,且跳数增加 1
- 对每个项目执行如下步骤
a.若原路由表没有 RIP 中的目的网络 N,直接添加到原路由表中
b.若原路由表中有 RIP 中的目的网络 N,但下一跳地址不是 X ,选择跳数少的替换。如果两者跳数一样,则保留原路由表的项。
c.若原路由表中有 RIP 中的目的网络 N,且下一跳地址是 X,使用收到的项替换 - 若超过 180s (RIP 默认 180s)还没有收到相邻路由器的更新路由表,则相邻路由器置为不可达,跳数为 16
算法的缺点:可以看到,距离向量协议传送的是整个路由表,那么报文的大小就和通信子网的结点个数成正比,如果通信子网越大,那么报文也将非常大。
PS:实际运用中,RIP算法只关心跳数,并不关心带宽,反而有可能避开了最有的路线。
2.实验讲义
2.1.讲义截图
2.2.实验要求
3.代码实现
3.1.路由类(用来表示单条路由)
public class Rip {
private String netto;//目的网络
private int number;//目的 网络号 数字类型
private Integer distance;//距离
private String next;//下一跳
public int getNumber(){
//用来排序
String number = this.netto;//拷贝一个副本
int ret;
return ret = Integer.parseInt(number.replaceAll("N",""));
}
@Override
public String toString() {
return netto + " " +
+ distance +" "+
next
;
}
public String getNetto() {
return netto;
}
Rip (String netto,int distance,String next){
this.netto = netto;
this.distance = distance;
this.next = next;
}
Rip (String netto,int distance){
this.netto = netto;
this.distance = distance;
}
public void setNetto(String netto) {
this.netto = netto;}
public Integer getDistance() {
return distance; }
public void setDistance(Integer distance) {
this.distance = distance;}
public String getNext() {
return next;}
public void setNext(String next) {
this.next = next;}
}
3.2.路由表类(用来表示单个路由表)
public class RipTable {
private String TableName;//使用private方法,其它类只能通过get set方法调用
private List<Rip> rips =new ArrayList<Rip>();//存储路由表
public void print() {
System.out.println(TableName+"的路由表");
System.out.println("目的网络"+"\t"+"距离"+"\t"+"下一跳");
for(Rip rip:rips){
System.out.println(rip.toString());
}
}
public void clear(){
rips.clear();
}