计算机网络实验三(java代码实现RIP)

本文介绍了如何用Java实现RIP(Routing Information Protocol)算法,详细阐述了距离向量算法的执行步骤,并提供了路由类和路由表类的代码实现。在实验中,通过互相更新路由表模拟网络环境,当目的网络跳数达到16时,视为不可达,最终达到稳定状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.距离向量算法

距离向量路由算法要求,每个结点都参与定期交换整个路由表,即把路由表传递给自己与之相连的结点。
首先,当前路由表的组成如下,<目的网络 N,跳数,下一跳地址>

1.1.执行步骤

  1. 从相邻的 X 路由器接收发送过来的 RIP(Routing Information Protocol) 报文
  2. 将该 RIP 报文中的下一跳地址修改为 X,且跳数增加 1
  3. 对每个项目执行如下步骤
    a.若原路由表没有 RIP 中的目的网络 N,直接添加到原路由表中
    b.若原路由表中有 RIP 中的目的网络 N,但下一跳地址不是 X ,选择跳数少的替换。如果两者跳数一样,则保留原路由表的项。
    c.若原路由表中有 RIP 中的目的网络 N,且下一跳地址是 X,使用收到的项替换
  4. 若超过 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();
    }
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值