动态路由协议RIP

本文介绍了动态路由协议的基本概念,对比了静态路由与动态路由,并深入探讨了RIP协议,包括其工作原理、度量标准、更新机制、防止环路的方法以及配置实例。RIP是一种距离矢量路由协议,使用跳数作为度量值,最大支持15跳,超过则视为不可达。
摘要由CSDN通过智能技术生成

动态路由协议概述
路由器之间用来交换信息的语言

度量值
跳数、带宽、负载、时延、可靠性、成本

收敛
使所有路由表都达到一致状态的过程

静态路由与动态路由的比较
网络中静态路由和动态路由互相补充

按照路由执行的算法分类
距离矢量路由协议
依据从源网络到目标网络所经过的路由器的个数选择路由
RIP、IGRP

链路状态路由协议
综合考虑从源网络到目标网络的各条路径的情况选择路由
OSPF、IS-IS

RIP是距离-矢量路由选择协议

RIP的基本概念

定期更新 默认30秒
邻居
广播更新
全路由表更新

在这里插入图片描述

RIP度量值为跳数
最大跳数为15跳,16跳为不可达
RIP更新时间
每隔30s发送路由更新消息,UDP520端口
RIP路由更新消息
发送整个路由表信息

执行水平分割可以阻止路由环路的发生
从一个接口学习到路由信息,不再从这个接口发送出去,同时也能减少路由更新信息占用的链路带宽资源
在这里插入图片描述

配置方法

RIP v1:
Router rip
version 1
network 10.0.0.0
network 20.0.0.0
exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
用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); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值