我决定用一个大的系列来写OSPF的内容 , 今天是第一篇, 让我们来详细的看一下OSPF的报文类型结构和细节
OSPF是有5种报文类型 , 5种类型都有相同的头部 , 学习OSPF报文 , 对报文头+5种类型的结构必须要有一个清晰的认知 。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。这五种报文具有相同的报文头格式,长度为24字节。
所有的5种报文都会携带这个头部
Version : 代表OSPF的版本现在主流是V3版本了
Message Type : 头部的这个字段代表了报文类型 1-5 分别对应了 Hello/DD/LSR/LSU/LSAck
Packet Len : 这个字段代表着整个报文的字节长度(头+报文) , 如图48字节 , 头部固定为24 , 可以计算出Hello的长度也是24字节 48-24
Sou OSPF Router : 就是发送这个报文设备的Routeid
Area ID : 发送该报文所属的区域
Cheaksum : 校验和 无需关注
Auth Type : OSPF认证方式 有NULL(0) , 简单认证(1) , MD5认证(2)
Auth Data : 具体的认证信息
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
Net Mask : 发送Hello报文的接口所在的网络掩码
Hello Inter : 发送Hello报文的间隔 默认10s sec就是秒的意思
Options : 可选项 后面详细展开
Router Priority : 接口DR优先级默认1 , 如果设置0代表弃权
Router Dead : 死亡时间 默认40s
DR/BDR : 值DR/BDR的接口IP地址
Neighbor : 截图中没有这个字段 , 说明设备没有发现其他邻居 ,处于init状态
OSPF DD(Database Description)报文描述了本地LSDB的摘要信息,用于两台路由器进行数据库同步。
DD报文其实是分2种的 , 上图是66字节的初始DD数据包 , 用于协商主从 , 并没有LSA摘要 , 特点是Init置位
Interface MTU : 此接口最大可发出的IP报文长度 , 华为默认不检查 可以命令开启(后续详细说明)
DB Description : DB描述 这个是DD报文的关键之一
? ? OOBResync:Out-Of-Band Re-synchronization,当这个位被设置时,它通常用于一些特定情况下的数 据库重新同步。
? (I) Init:当这个位被设置时,它表示这个DB描述数据包是在数据库交换过程的开始时发送的。当发送连续多 个DD报文时,如果这是第一个DD报文,则置为1。
? (M) More:当这个位被设置时,它表示发送者还有更多的DB描述数据包要发送。这是一个指示符,告诉接收 方还有更多的信息在后续的数据包中。
? (MS) Master:这个位表示发送该DB描述数据包的路由器在主从关系中扮演的角色。如果设置为“Master”,则 表示发送数据包的路由器是主路由器;如果没有设置,则表示它是从路由器。主路由器负责控制数据库交换 过程的顺序和节奏。
DD Seq : DD报文的序列号 , 这个序列号只有Master才能自增 , slave的seq复制使用master
此报文Init没有置位 , 说明是非首包作用为 LSA的摘要信息 , 所以内容聚焦在LSA上
后续报文内容核心聚焦于LSA 不过多关注报文本身 简单介绍一下
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR(Link State Request)报文向对方请求所需的LSA。OSPF LSR报文的内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
OSPF LSU(Link State Update)报文用来向对端路由器发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。
常用的LSA共有5种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。
OSPF LSAck(Link State Acknowledgment)用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。
通过发送LSA的头部信息确认收到该LSA。
E普通区域可以接受外部路由
如果配置成NASS 这里就置0