当前位置: 代码迷 >> 综合 >> 网络层(十一)ICMP、RIP、OSPF协议
  详细解决方案

网络层(十一)ICMP、RIP、OSPF协议

热度:96   发布时间:2023-10-31 00:07:55.0

ICMP协议

ICMP协议是TCP/IP协议栈中的网络层的一个协议,ICMP是(Internet Control Message Protocol)Internet控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息

ICMP报文是在IP数据报内部被传输的,它封装在IP数据报内。ICMP报文通常被IP层或更层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程

ICMP报文分为:

  • ICMP请求报文
  • ICMP响应报文
  • ICMP差错报告报文

ICMP请求报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T5jg3Blw-1569988710940)(https://s1.ax1x.com/2018/11/24/FFBzZ9.png#shadow)]

ICMP响应报文

ICMP报文类型和代码

  1. **终点不可到达:**当路由器或主机没有到达目标地址的路由时,就丢弃该数据包,给源点发送终点不可到达报文
  2. **源点抑制:**当路由器或主机由于拥塞而丢弃数据包时,就会向源点发送源点抑制报文,使源点知道应当降低数据包的发送速率
  3. **时间超时:**当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把己收到的数据报片都丢弃,并向源点发送时间超过报文
  4. **参数问题:**当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文
  5. **改变路由(重定向):**路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)

ICMP报文格式

ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着4个字节的内容与ICMP的类型有关

ICMP差错报告报文的数据字段的内容


举几个差错报告报文的例子,注意仔细观察Type和Code字段,与之前的表对比

TTL过期

目标主机不可达

路由重定向


RIP协议

路由信息协议RIP(Routing Information Protocol)是一个真正的距离矢量路由选择协议。它每隔30秒就送出自己完整的路由表到所有激活的接口。RIP协议选择最佳路径的标准就是跳数,认为到达目标网络经过的路由器最少的路径就是最佳路径。默认它所允许的最大跳数为15跳,也就是说16跳的距离将被认为是不可达的

在小型网络中,RIP会运转良好,但是对于使用慢速WAN连接的大型网络或者安装有大量路由器的网络来说,它的效率就很低了

RIP协议工作原理

如果学到到一个网段有两条路径,只保留最佳路径

OSPF协议

计算最短路径

OSPF术语

  1. **Router-ID:**网络中运行OSPF协议的路由器都要有一个唯一的标识,这就是Router-ID,并且Router-ID在网络中绝对不可以有重复
  2. **COST(开销):**OSPF协议选择最佳路径的标准是带宽,带宽越高计算出来的开销越低。到达目标网络的各个链路累计开销最低的,就是最佳路径
  3. **Link(链路):**就是路由器上的接口,在这里,应该指运行在OSPF进程下的接口
  4. **Link-State(链路状态):**链路状态(LSA)就是OSPF接口上的描述信息,例如接口上的IP地址,子网掩码,网络类型,Cost值等等,OSPF路由器之间交换的并不是路由表,而是链路状态(LSA)
  5. **Neighbor(邻居):**OSPF只有邻接状态才会交换LSA

OSPF协议工作过程

运行OSPF协议的路由器有3张表,邻居表、链路状态表和路由表。下面以这三张表的产生过程为线索,来分析在这个过程中,路由器发生了那些变化,从而说明OSPF协议的工作过程

OSPF的5种报文

  • 问候(Hello)数据包,发现并建立邻接关系
  • 数据库描述(Database Description)数据包,向邻居给出自己的链路状态数据库中的所有链路状态项目的摘要信息
  • 链路状态请求(Link State Request,LSR)数据包,向对方请求某些链路状态项目的完整信息
  • 链路状态更新(Link State Update,LSU)数据包,用洪泛法对全网更新链路状态。这种数据包是最复杂的,也是OSPF协议最核心的部分。路由器使用这种数据包将其链路状态通知给相邻路由器。在OSPF中,只有LSU需要显示确认
  • 链路状态确认(Link State Acknowledgement,LSAck)数据包,对LSU做确认

OSPF支持多区域