RIP路由协议

Routing Information Protocol,RIP:路由信息协议,是第一代动态路由协议;所属距离矢量协议,基于跳数来进行路径选择(最多支持15跳)。RIP协议有多个版本,分为v1/v2/ng版。


RIP特征:

OSI层次:应用层协议,基于UDP端口520

算法特征:距离矢量协议

有类无类:v1为有类、v2为无类

(类别:A/B/C  class

有类 classful:IP子网只能识别/8/16/24,自动汇总

无类 classless:IP子网只能识别任意掩码)

运行范围:IGP(IGP:internal gateway protocol 内部网关协议)

最佳路径:管理距离120、度量值:跳数(路由器的个数)


RIP基本部署:

语法:

conf t(先进入配置模式)

Router rip

Network  +  网段/路由(有类方式:根据A/B/C判断,保留路由的网络部分,主机部分归0

(通告本身所有路由)

E.g.

Network 10.0.0.0

Network 172.16.0.0

Network 192.168.1.0


排错:

R1#show run | include ip route //查看静态路由配置

R1#show run | section router rip //查看RIP配置

R1#show run | s r r //查看RIP配置

R2#show ip route static /rip /eigrp … //查看静态/RIP/EIGRP的路由

R2# show ip protocols //查看路由协议信息

 

No ip routing //关闭路由功能(清除路由表)

Ip routing //开启路由功能


RIP路由分组

Request分组

定义:RIP请求分组,用于初始化时向路由器邻居请求路由条目

Response分组

定义:RIP回复分组,用于更新/发送本地路由信息

特征:周期更新(25.5-30s)、广播更新(255.255.255.255)、不可靠更新(UDP)


RIP V1  V2 版本对比

v2是无类路由协议(能支持VLSM和CIDR),v1是有类路由协议

v2传播路由时夹带子网掩码,v1没有

v2是组播更新(224.0.0.9),v1是广播更新(255.255.255.255)

RIPv2部署

router rip

version 2 //定义版本为2

no auto-summary //关闭自动汇总

network + 网段(有类)

clear  ip route * //刷新路由表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用C写的rip协议 这是其中的广播request程序片段: void RouteInit() { int i,optval=0,length,error; routeNum = 0; // init local socket address and ip address GetLocalIP(); // init route table items for(i = 0; i < MAX_NUM; i++) { SetRouteEntry(&routeTable[i].routeInfo,"0.0.0.0",0,0); routeTable[i].isvalid = 0; routeTable[i].timer = 0; routeTable[i].statue = 0; inet_aton("0,0,0,0",&routeTable[i].sourceIPAddr); } // init request packet SetRoutePacket(&reqPacket,REQUEST); SetRouteEntry(&reqPacket.routeEntry[0],"0.0.0.0",0,16); // init response packet SetRoutePacket(&resPacket,RESPONSE); recvSockAddr.sin_family = AF_INET; recvSockAddr.sin_port = htons(PORT); recvSockAddr.sin_addr.s_addr = htonl(INADDR_ANY); sendSockAddr.sin_family = AF_INET; sendSockAddr.sin_port = htons(PORT); // inet_aton("240.255.255.255",&sendSockAddr.sin_addr); sendSockAddr.sin_addr.s_addr = htonl(INADDR_ANY); EntryInit(); sock = socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { printf("cannot create a socket!\n"); exit(1); } if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&optval,sizeof(int)) != 0) { printf("cannot broadcast!\n"); close(sock); exit(1); } if(bind(sock,(struct sockaddr*)&recvSockAddr,sizeof(recvSockAddr))<0) { printf("cannot bind to port\n"); close(sock); exit(1); } length=sizeof recvSockAddr; getsockname(sock,(struct sockaddr*)&recvSockAddr,&length); printf("Port %d is opened. Listen for packet...\n",ntohs(recvSockAddr.sin_port)); FD_ZERO(&fdSet); FD_SET(sock,&fdSet); error = sendto(sock,&reqPacket,4+sizeof(struct ROUTE_ENTRY),0,(struct sockaddr*)(&sendSockAddr),sizeof(struct sockaddr)); if(error<0) { PrintEntry(&reqPacket.routeEntry[0]); printf("broadcast request packet failed! %d,%d,%d\n",error,sock,fdSet); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值