ARP报文格式
ARP是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。
- 硬件类型:占两字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。
- 上层协议类型:占两字节,表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。
- MAC地址长度:占一字节,标识MAC地址长度,以字节为单位,此处为6。
- IP协议地址长度:占一字节,标识IP得知长度,以字节为单位,此处为4。
- 操作类型:占2字节,指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。
- 源MAC地址:占6字节,标识发送设备的硬件地址。
- 源IP地址:占4字节,标识发送方设备的IP地址。
- 目的MAC地址:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。
- 目的IP地址:占4字节,表示接受方的IP地址。
ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧。ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头。
以太网帧头的三个字段说明
- 目的MAC地址:占6字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。
- 源MAC地址:占6字节,这是发送ARP帧的节点MAC地址。
- 帧类型:占两字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了。
ICMP封装
ICMP是IP层的一个组成部分,它传递查询报文和差错报文,ICMP报文通常被IP层或更高层协议(TCP或UDP)使用,它是在IP数据包内被传输的,如图1所示。
图1:ICMP封装在IP数据包内部
OSPF用IP报文直接封装协议报文,协议号为89。
OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
-
Hello报文
-
DD报文
-
LSR报文
-
LSU报文
-
LSAck报文
报文头格式
OSPF这五种报文具有相同的报文头格式,长度为24字节。如图5-2所示。
表5-9 OSPF报文头格式字段解释
字段名 | 长度 | 含义 |
---|---|---|
Version | 8比特 | OSPF的版本号。对于OSPFv2,其值为2。 |
Type | 8比特 | OSPF报文的类型:
|
Packet length | 16比特 | OSPF报文的总长度,包括报文头在内,单位为字节。 |
Router ID | 32比特 | 发送该报文的路由器标识。 |
Area ID | 32比特 | 发送该报文的设备所属区域。 |
Checksum | 16比特 | 包含除了认证字段的整个报文的校验和。 |
AuType | 16比特 | 验证类型:
|
Authentication | 64比特 | 其数值根据验证类型而定:
|
Hello报文
最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及已知的邻居。Hello报文格式如图5-3所示。
表5-10 Hello报文格式字段解释
字段名 | 长度 | 含义 |
---|---|---|
Network Mask | 32比特 | 发送Hello报文的接口所在网络的掩码。 |
HelloInterval | 16比特 | 发送Hello报文的时间间隔。 |
Options | 8比特 | 可选项:
|
Rtr Pri | 8比特 | DR优先级。默认为1。 说明:如果设置为0,则设备不能参与DR或BDR的选举。 |
RouterDeadInterval | 32比特 | 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 |
Designated Router | 32比特 | DR的接口地址。 |
Backup Designated Router | 32比特 | BDR的接口地址。 |
Neighbor | 32比特 | 邻居,以Router ID标识。 |
Hello报文在不同网络中的发送地址类型、发送时间间隔类型和时间间隔缺省值不同,参见表5-11。
网络类型 | 发送地址类型 | 发送时间间隔类型 | 时间间隔缺省值 |
---|---|---|---|
广播 | 组播地址 | HelloInterval | 缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 |
NBMA | 单播地址 |
| 缺省情况下,接口发送Hello报文的时间间隔的值为30秒。 缺省情况下,接口发送Pollinterval间隔为120秒。 |
P2P | 组播地址 | HelloInterval | 缺省情况下,接口发送Hello报文的时间间隔的值为10秒。 |
P2MP | 组播地址 | HelloInterval | 缺省情况下,接口发送Hello报文的时间间隔的值为30秒。 |
RIP报文类型及发送方式
RIP协议报文采用UDP封装,报文源和目的端口均是UDP端口。RIP定义了两种报文类型,分别是请求(Request)报文和响应(Response)报文。Request报文用于向邻居请求全部或部分RIP路由信息,而Response报文则用于发送RIP路由更新,在Respose报文中携带着路由及路由度量等信息。当路由设备的接口激活RIP后,该接口立即发送一个Request报文和Response报文,并开始侦听RIP协议报文,随后接口开始周期性发送Response报文。
其中,RIP-1使用的广播地址255.255.255.255作为协议报文的目的IP地址,RIP-1设备发布的广播报文在设备输出的广播域中泛洪,这使得与其同处一个广播域的其他设备都将接收该报文,并消耗资源去处理这些报文。RIP-2使用的组播地址224.0.0.9作为协议报文的目的IP地址,所有的RIP-2设备都会侦听该组播地址,进而减少对于广播域中的其他设备的影响。
RIP-2报文格式
RIP-2(即RIP version2)是一种无分类路由协议(Classless Routing Protocol),报文格式如图11-5所示。
RIP-2报文各字段含义如下。
- 命令字段(Command):该字段用于标识RIP报文的类型。取值为1表示为Request报文,取值为2表示Response报文。
- 版本字段(Version):在RIP-2中,该字段取值为2。
- 地址族标识符(Address Family Identifier):与RIP-1类似。
- 路由标记(Route Tag):用于为路由设置标记信息,可以在路由策略中根据Tag对路由进行灵活的控制。例如,当一条外部路由被引入RIP从而形成一条RIP路由时,RIP可以为该路由设置路由标记,当这条路由在整个RIP路由域传播时,路由标记不会丢失。
- IP地址(IP Address):路由的目的网络地址。
- 网络掩码(Subnet Mask):用于存储路由条目的目的网络掩码,RIP-2进而支持可变长子网掩码(VLSM,Variable Length Subnet Mask),支持路由聚合和CIDR(Classless Inter-Domain Routing)。
- 下一跳(Next Hop):RIP-2定义了该字段,避免路由设备在多路访问网络上可以表面次优路径现象,在广播网上可以选择到最优下一跳地址。
- 度量值(Metric):该路由的度量值。