13-RIP

13-RIP

标签(空格分隔): HCIA

介绍

路由信息协议RIP(Routing Information Protocol)的简称,是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用于规模较小的网络中。

01特点概述
在这里插入图片描述

RIP(Routing Information Protocol)
路由信息协议

  • 距离矢量路由协议,属于IGP协议;
  • 适用于中小型网络,有RIPv11和RIPv2两个版本
  • 基于UDP,目标端口号520
  • 周期性更新
  • 支持水平分割,毒性逆转和触发更新等防环特性

工作原理

02工作原理
在这里插入图片描述

1.发送更新请求,发送自己的进行响应。
2.稳定后,周期性25~30s发送路由更新信息。添加新的信息/出故障,会有触发更新机制。

RIP-度量

03RIP-度量
在这里插入图片描述

1.跳数作为度量值
2.缺省时,直连跳数为0;发送更新时,度量值加1。
3.超过15跳为不可达(16)

v1和v2比较

04v1和v2
在这里插入图片描述
05v1v2比较
在这里插入图片描述
目标地址不同
v1广播,不安全,有类,无掩码显示,默认8,16,24
v2组播224.0.0.9 (224~239)
无类,有掩码显示。

06抓包v1v2
在这里插入图片描述
能用则用version2

RIP-环路

07RIP-环路
在这里插入图片描述

回环口10.0.0.0
正常情况下,RB将直连的路由10.0.0.0通过rip发送给RA,对RB来说就是0跳。对RA来说是1跳。正常情况下就结束了。

RA会告诉RB,RA到10.0.0.0的跳数是2,正常情况下RB并不会理会此条信息。但是如果此时回环口宕机,且因为时间差的关系,这条信息还没有发送出去。那么RB就会相信RA发送的信息(2跳的信息),这时就会产生环路。因为RB收到2跳的信息后, 会再告诉RA跳数变为3,RA会相信,因为RB原来告诉1跳,现在更新为3。循环发送。直到跳数达到16,不可达。这条路由信息消失。

环路避免–水平分割

08环路避免–水平分割
在这里插入图片描述

机制默认开启。
学到了,不会再发回去。

[g0/0/0]rip split-horizon #水平分割

环路避免–触发更新

09环路避免–触发更新
在这里插入图片描述

发生变化,立即发送更新。解决时间差。

环路避免-毒性反转

10环路避免-毒性反转
在这里插入图片描述

[g0/0/0]rip poison-reverse #毒性反转

和水平分割矛盾,默认为关闭。和水平同时打开时,以毒性为主。

11开启毒性反转后抓包。
在这里插入图片描述

同样,B发送1跳,A发送2跳,此时回环口发生宕机,(开启了毒性反转)B会再发送16跳,A会相信,A再发送16跳,AB知道此路由到不了了。这个机制避免环路发生。

RIP基本配置

12RIP基本配置
在这里插入图片描述

rip 进程号不同,两rip之间是不会互通,可以使用import-route注入进行同步。

命令说明
rip 1开启RIP进程,进程缺省为1
 version 2开启RIPv2
 network 10.0.0.0宣告网络,即指定运行RIP的接口,只需要输入接口的主类网络地址即可。
只有处于此网络中的接口,才能进行RIP报文的接收和发送。
undo rip input禁止接收RIP数据包
undo rip output禁止发送RIP数据包
silent-interface g/0/0/0配置被动接口,只收不发
rip metricin 5在接收路由时增加度量值
rip metricout 5在发送路由时增加度量值
rip split-horizon开启水平分割,默认开启
rip poison-reverse开启毒性逆转,默认关闭
display rip验证RIP信息
dis rip int g0/0/0 verbose验证RIP接口相关详细信息

13RIP配置-output
在这里插入图片描述
14RIP配置-input
在这里插入图片描述
15抑制接口
在这里插入图片描述
16接口详细信息rip
dis rip 1 intterface g0/0/0
在这里插入图片描述

[g0/0/0]rip split-horizon
[g0/0/0]rip poison-reverse

两个同时配置后,只有rip poison-reverse会生效

dis ip rou pro rip
dis rip 1
dis rip int g0/0/0 verbose
以下是一个简单的Java实现RIP的示例: ``` import java.io.IOException; import java.net.*; import java.util.*; public class RIP { private static final int RIP_PORT = 520; //RIP协议使用的端口号 private static final int MAX_ROUTES = 100; //最大路由数 private static class Route { String prefix; //网络前缀 String nexthop; //下一跳地址 int metric; //距离 } public static void main(String[] args) { List<Route> routes = new ArrayList<>(); //路由表 routes.add(new Route() {{ prefix = "10.0.0.0"; nexthop = "192.168.0.1"; metric = 1; }}); //添加初始路由 try { DatagramSocket sock = new DatagramSocket(RIP_PORT); //创建套接字并绑定端口号 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); while (true) { sock.receive(packet); //接收RIP报文 byte[] data = packet.getData(); int len = packet.getLength(); if (data[0] == 0x01) { //Command字段:请求 InetAddress address = packet.getAddress(); int port = packet.getPort(); for (Route route : routes) { //构造RIP响应报文 byte[] response = new byte[20]; response[0] = 0x02; //Command字段:响应 response[1] = 0x01; //Version字段:RIPv1 response[2] = 0x00; //Unused字段:0 response[3] = 0x00; //Unused字段:0 response[4] = 0x00; //Address Family Identifier字段:IPv4 response[5] = 0x00; //Address Family Identifier字段:IPv4 response[6] = 0x00; //Route Tag字段:0 response[7] = 0x00; //Route Tag字段:0 String[] parts = route.prefix.split("\\."); for (int i = 0; i < 4; i++) { response[8+i] = (byte) Integer.parseInt(parts[i]); //IP地址字段 } response[12] = 0xff; //Subnet Mask字段:255.255.255.0 response[13] = 0xff; //Subnet Mask字段:255.255.255.0 response[14] = 0xff; //Subnet Mask字段:255.255.255.0 response[15] = 0x00; //Subnet Mask字段:255.255.255.0 parts = route.nexthop.split("\\."); for (int i = 0; i < 4; i++) { response[16+i] = (byte) Integer.parseInt(parts[i]); //Next Hop字段 } response[20] = (byte) route.metric; //Metric字段 //发送RIP响应报文 DatagramPacket responsePacket = new DatagramPacket(response, response.length, address, port); sock.send(responsePacket); } } else if (data[0] == 0x02) { //Command字段:响应 for (int i = 0; i < len-4; i += 20) { Route route = new Route(); StringBuilder sb = new StringBuilder(); for (int j = 0; j < 4; j++) { sb.append(data[i+8+j] & 0xff).append("."); //解析IP地址 } sb.setLength(sb.length()-1); route.prefix = sb.toString(); sb = new StringBuilder(); for (int j = 0; j < 4; j++) { sb.append(data[i+16+j] & 0xff).append("."); //解析Next Hop地址 } sb.setLength(sb.length()-1); route.nexthop = sb.toString(); route.metric = data[i+20]; //解析Metric值 routes.add(route); //添加到路由表中 } } } } catch (IOException e) { e.printStackTrace(); } } } ``` 这只是一个简单的示例,实际上RIP协议的实现还需要考虑很多细节和安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值