rip协议解析

本文介绍了RIP(路由信息协议)的基本原理,包括V1和V2的区别,如V1的广播更新与V2的组播更新,以及RIP的防环机制,如水平分割、最大跳数限制和毒性逆转。还讨论了RIP的配置选项,如认证、手动汇总和计时器调整,以及在不同版本间的兼容性问题。
摘要由CSDN通过智能技术生成

RIP:路由信息协议----V1/V2;NG(IPV6)

距离矢量型的路由协议,邻居(直连)间直接共享路由表;默认仅存在更新包(携带路由条目);基于UDP520端口工作;使用跳数作为度量;周期和触发更新均存在;周期更新–30s一次; 支持等开销负载均衡,默认4条,最大6条,IOS版本12.4以上为16条;周期更新----保活、确认的问题 ;使用跳数来作为度量,管理距离为120;

触发更新----结构突变时,进行及时的重新收敛
周期更新----保活、确认 30s

rip为什么要周期更新?
因为没有确认包,所以每隔30秒不断的在发,若是不再发送,则删掉与之有关的所有路由条目,所以周期更新的作用在于----保活、确认的问题
eigrp之所以增量更新(仅触发无周期更新)是因为可靠性高—借鉴tcp,单次更新量极小

V1和V2的区别:

1、V1有类别–不支持子网划分、汇总、CIDR–支持连续子网
V2无类别—支持子网划分、汇总;不支持CIDR;
2、V1广播更新 --255.255.255.255 广播半径为一个广播域,单播为全球。
V2组播更新 --224.0.0.9 组播与单播可在不同的广播域。
单播要给几个人发就发几个包,占用带宽资源、组播与广播只发一个包。
3、V2支持手工认证3、----邻居间身份核实

rip采用贝尔曼福特算法
在分享路由表条

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值