链路层
以太帧格式 VLAN帧格式 QinQ帧格式 PPP帧格式 PPPoE报文格式 HDLC帧格式 ATM信元格式
STP/RSTP/MSTP帧格式 RPR帧格式 RRPP帧封装格式 LACP报文格式 以太OAM报文格式 ERPS帧格式 LLDP报文格式 IS-IS报文格式
以太帧格式
Ethernet Ⅱ 以太帧 Netware以太帧格式 802.3 SAP以太帧
802.3 LLC SNAP以太帧格式
ahang2
网络层
ARP/RARP报文格式 GRE报文格式 ICMP报文格式 ICMPv6报文格式 IGMP报文格式 IP in IP报文格式 IP报文格式 IPv6报文格式
IPv6 in IP (6to4)报文格式 MLD报文格式 OSPF报文格式 OSPFv3报文格式 PIM报文格式 RSVP报文格式
VRRP报文格式
ahang3
Ethernet Ⅱ 以太帧
帧格式
图1 Ethernet Ⅱ帧格式
字段 长度 含义 DMAC 6字节 目的MAC地址,IPV4为6字节,该字段确定帧的接收者。 SMAC 6字节 源MAC地址,IPV4为6字节,该字段标识发送帧的工作站。 Type 2字节 协议类型。下表列出了链路直接封装的协议。 Data 变长 数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。 如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。 CRC 4字节 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 表1 各Type值对应的协议 值 协议 0x0800 Internet Protocol (IP) [RFC894] 0x0801 X.75 Internet ahang4
字段 长度 含义 0x0805 X.25 Level 3 0x0806 Address Resolution Protocol (ARP)[RFC7042] 0x0808 Frame Relay ARP [RFC1701] 0x8000 IS-IS 0x8035 Reverse Address Resolution Protocol (RARP) [RFC903] 0x8137 Novell NetWare IPX/SPX (old) 0x8138 Novell, Inc. 0x8100 IEEE Std 802.1Q - Customer VLAN Tag Type 0x814C SNMP over Ethernet [RFC1089] 0x86DD IP Protocol version 6 (IPv6) [RFC7042] 0x8808 IEEE Std 802.3 - Ethernet Passive Optical Network (EPON) [RFC7042] 0x880B Point-to-Point Protocol (PPP) [RFC7042] 0x880C General Switch Management Protocol (GSMP) 0x8847 MPLS (multiprotocol label switching) label stack - unicast [RFC 3032] 0x8848 MPLS (multiprotocol label switching) label stack - multicast [RFC 3032] ahang5
字段 长度 含义 0x8863 PPP over Ethernet (PPPoE) Discovery Stage [RFC2516] 0x8864 PPP over Ethernet (PPPoE) Session Stage [RFC2516] 0x888E IEEE Std 802.1X - Port-based network access control 0x88A8 IEEE Std 802.1Q - Service VLAN tag identifier (S-Tag) 0x88B7 IEEE Std 802 - OUI Extended Ethertype 0x88C7 IEEE Std 802.11 - Pre-Authentication (802.11i) 0x88CC IEEE Std 802.1AB - Link Layer Discovery Protocol (LLDP) 0x88E5 IEEE Std 802.1AE - Media Access Control Security 0x88F5 IEEE Std 802.1Q - Multiple VLAN Registration Protocol (MVRP) 0x88F6 IEEE Std 802.1Q - Multiple Multicast Registration Protocol (MMRP) 帧示例
ahang6
QinQ帧格式
QinQ报文有固定的格式,就是在802.1Q的标签之上再打一层802.1Q标签,QinQ报文比802.1Q报文多四个字节。
VLAN帧最小帧长为68字节。
帧格式
图1 QinQ帧格式
字段 长度 含义 Destination 6字节 address 目的MAC地址。 ahang7
字段 长度 含义 Source address 6字节 源MAC地址。 Type 2字节 长度为2字节,表示帧类型。取值为0x8100时表示802.1Q Tag帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 对于内层VLAN tag,该值设置为0x8100;对于外层VLAN tag,有下列几种类型 0x8100:思科路由器使用 0x88A8:Extreme Networks switches使用 0x9100:Juniper路由器使用 0x9200:Several路由器使用 PRI 3比特 Priority,长度为3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。用于当交换机阻塞时,优先发送优先级高的数据包。 CFI 1比特 CFI (Canonical Format Indicator),长度为1比特,表示MAC地址是否是经典格式。CFI为0说明是经典格式,CFI为1表示为非经典格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0。 VID 12比特 LAN ID,长度为12比特,表示该帧所属的VLAN。在VRP中,可配置的VLAN ID取值范围为1~4094。 Length/Type 2字节 Data 指后续数据的字节长度,但不包括CRC检验码。 42~1500负载(可能包含填充位)。 字节 CRC 4字节 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 帧示例
图2 QinQ帧
ahang8
VLAN帧格式
帧格式
IEEE 802.1Q标准对Ethernet帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag。
VLAN帧最小帧长为64字节。 图1 VLAN帧格式
ahang9
字段 长度 含义 Destination address 6字节 目的MAC地址。 Source address 6字节 源MAC地址。 Type 2字节 长度为2字节,表示帧类型。取值为0x8100时表示802.1Q Tag帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。 PRI 3比特 Priority,长度为3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。用于当阻塞时,优先发送优先级高的数据包。 如果设置用户优先级,但是没有VLANID,则VLANID必须设置为0x000。 CFI 1比特 CFI (Canonical Format Indicator),长度为1比特,表示MAC地址是否是经典格式。CFI为0说明是标准格式,CFI为1表示为非标准格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0。 VID 12比特 LAN ID,长度为12比特,表示该帧所属的VLAN。在VRP中,可配置的VLAN ID取值范围为1~4094。0和4095协议中规定为保留的VLAN ID。 三种类型: Untagged帧:VID 不计 Priority-tagged帧:VID为 0x000 VLAN-tagged帧:VID范围0~4095 三个特殊的VID: 0x000:设置优先级但无VID 0x001:缺省VID ahang10
字段 长度 含义 Length/Type Data CRC 2字节 42~1500字节 4字节 0xFFF:预留VID 指后续数据的字节长度,但不包括CRC检验码。 负载(可能包含填充位)。 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 帧示例
图2 VLAN帧
ahang11
STP/RSTP/MSTP帧格式 STP帧格式图1 STP帧格式
字段内容 说明 Protocol Identifier 协议ID=“0” Protocol Version Identifier 协议版本标识符,STP为0,RSTP为2,MSTP为3。 BPDU Type BPDU类型,MSTP为0x02。 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU(Topology Change Notification BPDU) ahang12
字段内容 说明 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU) Flags 对于“标记域”(Flags),第一个bit(左边、高位bit)表示“TCA(拓扑改变响应)”,最后一个bit(右边、低位bit)表示“TC(拓扑改变)”。 Root Identifier Root Path Cost Bridge Identifier Port Identifier 网桥ID都是8个字节——前两个字节是网桥优先级,后6个字节是网桥MAC地址。 根路径开销,本端口累计到根桥的开销。 发送者BID,本交换机的BID。 发送端口PID,发送该BPDU的端口ID。 Message Age 该BPDU的消息年龄。 Max Age Hello Time 消息老化年龄。 发送两个相邻BPDU间的时间间隔。 Forward Delay 控制Listening和Learning状态的持续时间。 RSTP帧格式
在BPDU的格式上,除了保证和STP格式基本一致之外,RSTP作了一些小的变化。一个是在Type字段,配置BPDU类型不再是0而是2,版本号也变成了2。所以运行STP的交换机收到该类BPDU时会丢弃。 另一个变化是在Flag字段,把原来保留的中间6位使用起来。这样改变了的配置BPDU叫做RST BPDU。 RSTP Flag字段格式:
Bit7:TCA Bit6:Agreement Bit5:Forwarding
ahang13
Bit4:Learning Bit3和Bit2:端口角色
00:未知 01:根端口
10:Alternate / Backup 11:指定端口
Bit1:Proposal Bit0:TC
MSTP帧格式
多生成树协议MSTP是生成树协议的一种,用于消除网络环路,它兼容生成树协议STP和快速生成树RSTP协议,并且弥补了两者的缺陷。
MSTP使用多生成树桥协议数据单元MST BPDU(Multiple Spanning Tree Bridge Protocol Data Unit)作为生成树计算的依据。 MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录。MST BPDU报文结构如下图所示:
ahang14
图2 MSTP帧格式
无论是域内的MST BPDU还是域间的,前35个字节和RST BPDU相同。
从第36个字节开始是MSTP专有字段。最后的MSTI配置信息字段由若干MSTI配置信息组连缀而成。 MST BPDU中的主要信息如下表所示。
字段 说明 Protocol Identifier 协议标识符。 ahang15
字段 说明 Protocol Version Identifier 协议版本标识符,STP为0,RSTP为2,MSTP为3。 BPDU Type BPDU类型,MSTP为0x02。 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU(Topology Change Notification BPDU) 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU) CIST Flags CIST Root Identifier CIST标志字段。 CIST的总根交换机ID。 CIST External CIST外部路径开销指从本交换机所属的MST域到CIST根交换机的累计路径开销。CIST外部Path Cost 路径开销根据链路带宽计算。 CIST Regional CIST的域根交换机ID,即IST Master的ID。 如果总根在这个域内,那么域根交换机ID就Root Identifier CIST Port Identifier Message Age BPDU报文的生存期。 Max Age Hello Time BPDU报文的最大生存期,超时则认为到根交换机的链路故障。 Hello定时器,缺省为2秒。 本端口在IST中的指定端口ID。 是总根交换机ID。 Forward Delay Forward Delay定时器,缺省为15秒。 ahang16
字段 说明 Version 1 Length Version 3 Length MST Configuration Identifier Version1 BPDU的长度,值固定为0。 Version3 BPDU的长度。 MST配置标识,表示MST域的标签信息,包含4个字段: Configuration Identifier Format Selector:固定为0。 Configuration Name:“域名”,32字节长字符串。 Revision Level:2字节非负整数。 Configuration Digest:利用HMAC-MD5算法将域中VLAN和实例的映射关系加密成16字节的摘要。 只有MST Configuration Identifier中的四个字段完全相同的,并且互联的交换机,才属于同一个域。 CIST Internal CIST内部路径开销指从本端口到IST Master交换机的累计路径开销。CIST内部路径开销根Root Path Cost CIST Bridge Identifier CIST Remaining Hops BPDU报文在CIST中的剩余跳数。 CIST的指定交换机ID。 据链路带宽计算。 ahang17
字段 说明 MSTI MSTI配置信息。每个MSTI的配置信息占16 bytes,如果有n个MSTI就占用n×16bytes。Configuration 单个MSTI Configuration Messages的字段说明如下: Messages (may be absent) MSTI Flags:MSTI标志。 MSTI Regional Root Identifier:MSTI域根交换机ID。 MSTI Internal Root Path Cost:MSTI内部路径开销指从本端口到MSTI域根交换机的累计路径开销。MSTI内部路径开销根据链路带宽计算。 MSTI Bridge Priority:本交换机在MSTI中的指定交换机的优先级。 MSTI Port Priority:本交换机在MSTI中的指定端口的优先级。 MSTI Remaining Hops:BPDU报文在MSTI中的剩余跳数。 帧示例
ahang18
图3 STP帧格式
图4 RSTP帧格式
ahang19
LACP报文格式
报文格式
基于IEEE802.3ad标准的LACP,链路汇聚控制协议是一种实现链路动态聚合与解聚合的协议。LACP协议通过LACPDU(Link Aggregation Control Protocol Data Unit)与对端交互信息。
LACPDU报文为慢协议(平均每秒发送的协议报文不超过5个),如果接口板收到报文的DMAC是特殊的组播地址 0x01-80-c2-00-00-02,二层协议类型字段为0x8809,协议子类型为0x01,则说明此数据报文为LACPDU报文。
ahang20
图1 LACPDU格式
报文中各域的说明如下:
ahang21
字段 长度 说明 Destination Address 6字节 目的MAC地址,是一个组播地址(01-80-C2-00-00-02) Source Address 6字节 源MAC地址,发送端口的MAC地址 Length/Type 2字节 协议类型:0x8809 Subtype 1字节 报文子类型:0x01,说明是LACP报文 Version Number 1字节 协议版本号:0x01 TLV_type 1字节 0x00代表Terminator字段 0x01代表Actor字段 0x02代表Partner字段 0x03代表Collector字段 ahang22
字段 长度 说明 Actor_Information_Length 1字节 actor信息字段长度,为20字节 Actor_Port 2字节 端口号,根据算法生成,由接口所在的槽位号、子卡号和端口号决定 Actor_State 1字节 本端状态信息: LACP_Activity:代表链路所在的聚合组参与LACP协商的方式。主动的LACP被编码为1,主动方式下会主动发送LACPDU报文给对方,被动方式不会主动发送协商报文,除非收到协商报文才会参与。 LACP_Timeout:代表链路接收LACPDU报文的周期,有两种,快周期1s和慢周期30s,超时时间为周期的3倍。短超时被编码为1,长超时被编码为0。 Aggregation:标识该链路能否被聚合组聚合。如果编码为0,该链路被认为是独立的,不能被聚合,即,这个链路只能作为一个个体链路运行。 Synchronization:代表该链路是否已被分配到一个正确的链路聚合组,如果该链路已经关联了一个兼容的聚合器,那么该链路聚合组的识别与系统ID和被发送的运行Key信息是一致的。编码为0,代表链路当前不在正确的聚合里。 Collecting:帧的收集使能位,假如编码为1,表示在这个链路上进来的帧的收集是明确使能的;即收集当前被使能,并且不期望在没有管理变化或接收协议信息变化的情况下被禁止。其它情况下这个值编码为0。 ahang23
字段 长度 说明 Distributing:帧的分配使能位,假如编码为0,意味着在这个链路上的外出帧的分配被明确禁止,并且不期望在没有管理变化或接收协议信息变化的情况下被使能。其它情况下这个值编码为1。 Default:诊断调试时使用,编码为1,代表接收到的对端的信息是管理配置的。假如编码为0,正在使用的运行伙伴信息在接收到的LACPDU里。该值不被正常LACP协议使用,仅用于诊断协议问题。 Expired:诊断调试时使用,编码为1,代表本端的接收机是处于EXPIRED超时状态;假如编码为0,本端接收状态机处于正常状态。该值不被正常LACP协议使用,仅用于诊断协议问题。 Actor_System_Priority 2字节 本端系统优先级,可以设置,默认情况下为32768 Actor_System 6字节 系统ID,本端系统的MAC地址 Actor_key 2字端口KEY值,系统根据端口的配置生成,是端口能否成为聚合组中的一员的关 键因素,影响Key值得因素有trunk ID、接口的节 速率和双工模式 Actor_Port_Priority 2字节 接口优先级,可以配置,默认为0x8000 ahang24
字段 长度 说明 Reserved 3字节 保留字段,可用于功能调试以及扩展 Partner_Information_Length 1字Partner信息字段长度。 Partner字段代表了链路接口接收到对端的系统信息、接口信息节 和状态信息,与actor字段含义一致。在协商最开始未收到对端信息时,partner字段填充0,接收到对端信息后会把收到的对端信息补充到partner字段当中。 Partner_Port 2字节 Partner_State 2字节 Partner_System_Priority 2字节 Partner_System 6字节 Partner_key 2字节 对端端口KEY值 对端系统ID,对端系统的MAC地址 对端系统优先级 对端状态信息 对端端口号 ahang25
字段 长度 说明 Partner_Port_Priority 2字节 对端接口优先级 Reserved 2字节 保留字段 Collector_Information_Length 1字节 Collector信息字段长度:0x10 CollectorMaxDelay 2字节 最大延时:默认情况下为0xffff Reserved 12字节 保留字段 Terminator_Length 1字节 Terminator信息字段长度:0x00 Reserved 50字节 保留字段,全置0 FCS 4字节 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。
ahang26
报文示例
ahang27
MPLS报文格式
报文格式
MPLS 标签(Label)是一个短而定长的、只具有本地意义的标识符,用于唯一标识一个分组所属的FEC。在某些情况下,例如要进行负载分担,对应一个FEC可能会有多个入标签,但是一台路由器上,一个标签只能代表一个FEC。标签与ATM的VPI/VCI以及Frame Relay的DLCI类似,是一种连接标识符。标签长度为4个字节,封装在链路层和网络层之间。这样,标签能够被任意的链路层所支持。标签在分组中的封装位置如下图所示。 图1 MPLS报文格式
字段 长度 含义 Label 20比特 标签值字段,用来标识一个FEC。 EXP 3比特 用于扩展。现在通常用做CoS(Class of Service),其作用与Ethernet802.1p的作用类似。 S 1比特 MPLS支持多重标签。值为1时表示为最底层标签。 TTL 8比特 和IP分组中的TTL意义相同,可以用来防止环路。 报文示例
图2 MPLS报文(含2层标签)
ahang28
MPLS L2/L3VPN报文结构
MPLS L2/L3VPN报文结构
图1 MPLS L3VPN报文结构
图2 MPLS L2VPN报文结构
各种公网隧道场景下的MPLS报文携带的标签
在VPN场景下,MPLS报文携带M层私网标签+N层公网隧道标签,M取决于VPN的组网场景(请参见后文),N的取值取决于公网隧道类型。
ahang29
场景 公网隧道标签层数N 隧道为LDP LSP 1层公网标签 隧道为static LSP 1层公网标签 隧道为TE隧道 1层公网标签 隧道为LDP over TE隧道,报文在TE隧道上传输时 2层公网标签 TE FRR场景下,报文在bypass隧道上传输时 2层公网标签 隧道为LDP over TE且部署TE FRR场景下,被保护接口出现故障,业务切换到bypass隧道,报文在bypass隧道上传输时 3层公网标签 ahang30
图3 各种公网隧道场景下的MPLS报文格式
跨域VPN OptionA场景
在各AS域内传递时,报文携带1层私网MPLS标签 + N层公网隧道标签(公网隧道标签参见上文)。在AS域间传递时,报文不携带MPLS标签。 图4 跨域VPN OptionA场景下的报文结构
跨域VPN OptionB场景
ahang31
在各AS域内传递时,报文携带1层私网MPLS标签 + N层公网隧道标签(公网隧道标签参见上文)。 在AS域间传递时,报文携带1层私网MPLS标签。 图5 跨域VPN OptionB场景下的报文结构
跨域VPN OptionC场景
在首发的AS域内传递时,报文携带1层私网标签 + 1层BGP标签 + N层公网隧道标签 在AS域间传递时,报文携带1层私网标签+1层BGP标签
在第2个AS域间传递时,报文携带1层私网标签+ N层公网隧道标签 图6 跨域VPN OptionC场景下的报文结构
HoVPN/HVPLS场景
核心层传递时,报文携带1层内层标签+N层公网隧道标签 UPE和SPE之间传递时,报文携带1层内层标签
ahang32
图7 跨域VPN OptionC场景下的报文结构
运营商的运营商CSC(Carriers' Carrier)场景
与普通BGP/MPLS IP VPN相比,运营商的运营商的实现关键在于一级运营商CE接入到一级运营商PE这一部分。而二级运营商可能只是普通SP,也可能是BGP/MPLS IP VPN服务提供商。
二级运营商是普通SP时,需要在一级运营商CE之间建立BGP会话交换外部路由。二级运营商内部通过
IGP或BGP扩散二级运营商的外部路由。二级运营商用户侧PE可以不部署MPLS。
二级运营商是BGP/MPLS IP VPN服务提供商时,其PE也需要运行MPLS,与一级运营商CE之间运行IGP
和LDP。二级运营商PE之间通过MP-BGP会话交换外部路由。
图8 运营商的运营商场景(二级运营商为普通SP)
ahang33
图9 运营商的运营商场景(二级运营商也为MPLS VPN SP)
报文示例
图10 MPLS L2VPN报文
ARP/RARP报文格式
地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议。报文格式
ahang34
字段 长度(bit) 含义 Ethernet Address of destination 48比特 目的以太网地址。发送ARP请求时,为广播的MAC地址,0xFF.FF.FF.FF.FF.FF。 Ethernet Address of sender 48比特 源以太网地址。 Frame Type 16比特 表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。 Hardware Type 16比特 表示硬件地址的类型。对于以太网,该类型的值为“1”。 Protocol Type 16比特 表示发送方要映射的协议地址类型。对于IP地址,该值为0x0800。 Hardware Length 8比特 表示硬件地址的长度,单位是字节。对于ARP请求或应答来说,该值为6。 ahang35
字段 长度(bit) 含义 Protocol Length 8比特 表示协议地址的长度,单位是字节。对于ARP请求或应答来说,该值为4。 OP 16比特 操作类型: 1 ARP请求 2 ARP应答 3 RARP请求 4 RARP应答 Ethernet Address of sender 48比特 发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息。 IP Address of sender 32比特 发送方的IP地址。 Ethernet Address of destination IP Address of destination 48比特 接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00。 32比特 接收方的IP地址。 报文示例
ahang36
图1 免费ARP报文格式
图2 ARP请求报文格式
图3 ARP应答报文格式
ahang37
图4 RARP请求报文格式
ICMP报文通用格式
报文格式
有很多情况都会发送ICMP消息,例如,报文无法发送到目的地址,再如,网关设备没有足够的缓存来存储转发报文。
ICMP消息封装在IP报文中,格式如下: 图1 ICMP消息封装格式
ICMP消息头部格式如下: 图2 ICMP消息头部格式
其中,最后一个字段的长度和内容,取决于消息的类型和代码。对应的列表如下:
ahang38
表1 ICMP消息类型代码对应表 类型Type 代码Code 描述 0 0 回显应答(ping应答) 3 0 网络不可达 3 1 主机不可达 3 2 协议不可达 3 3 端口不可达 3 4 需要进行分片但设置不分片比特 3 5 源站选路失败 3 6 目的网络不认识 3 7 目的主机不认识 3 8 源主机被隔离(作废不用) 3 9 目的网络被强制禁止 3 10 目的主机被强制禁止 3 11 由于TOS,网络不可达 3 12 由于TOS,主机不可达 ahang39
表1 ICMP消息类型代码对应表 类型Type 代码Code 描述 3 13 由于过滤,通信被强制禁止 3 14 主机越权 3 15 优先权中止生效 4 0 源端被关闭 5 0 对网络重定向 5 1 对主机重定向 5 2 对服务类型和网络重定向 5 3 对服务类型和主机重定向 8 0 请求回显(ping请求) 9 0 路由器通告 10 0 路由器请求告 11 0 传输期间生存时间为0 11 1 在数据报组装期间生存时间为0 12 0 坏的IP首部 ahang40
表1 ICMP消息类型代码对应表 类型Type 代码Code 描述 12 1 缺少必须的选项 13 0 时间戳请求(作废不用) 14 0 时间戳应答(作废不用) 15 0 信息请求(作废不用) 16 0 信息应答(作废不用) 17 0 地址掩码请求 18 0 地址掩码应答 报文示例
图3 封装了ICMP消息的IP头部格式示例
ahang41
IGMP报文格式
IGMP消息封装在IP报文中。
IP报文头的协议类型字段值为2,用来标识数据部分封装了IGMP消息。 IP报文头的目的地址字段用来标识该IGMP消息的目的接收端。 IP报文头的TTL字段值为1,表示IGMP消息只在本地网段传播。 IGMP有三个版本,不同版本报文格式不一样。 不同版本的IGMP协议,支持的IGMP消息也不同。
IGMPv1报文格式 IGMPv2报文格式 IGMPv3报文格式
IGMPv1报文格式
报文格式
图1 IGMPv1报文格式
字段 长度 描述 Version 4比特 IGMP版本号,在IGMPv1中应为0x1。 Type 4比特 即IGMP报文类型: 1 = Host Membership Query 主机成员查询 2 = Host Membership Report 主机成员报告 ahang42
字段 长度 描述 Unused 8比特 未使用的字段,发送时必须填0,接收时忽略。 IGMP消息的校验和。该字段在进行校验计算时设为0。当传送报文的时候,必须计算该校验字并插入到该字段中去。当接收包的时候,该校验字必须在处理该包之前进行检验。 Checksum 16比特 Group 32比组播地址。 Address 特 报文示例
图2 IGMPv1 Membership Report
IGMPv2报文格式
报文格式
图1 IGMPv2报文格式
字段 长度 描述 Type 8比特 报文类型,有以下几种类型: 0x11 = Membership Query IGMP查询消息。 0x12 = Version 1 Membership Report IGMPv1成员报告消息。 ahang43
字段 长度 描述 0x16 = Version 2 Membership Report IGMPv2成员报告消息。 0x17 = Leave Group 离开消息。 在IGMP版本2中,旧的4位版本字段和旧的4位类型字段拼成了一个新的8位类型字段,通过分别将成员查询(版本1和版本2的)及版本1的成员报告报文的IGMP版本2的类型代码置为0x11和0x12,保持了IGMP版本1和版本2包格式的向后兼容。 Max Resp 8比特 在发出响应报告前的以1/10秒为单位的最长时间,缺省值为10秒。 Time 新的最大响应时间(以1/10秒为单位)字段允许查询用路由器为它的查询报文指定准确的查询间隔响应时间。IGMP版本2主机在随机选择它们的响应时间值时以此作为上限。 这样在查询响应间隔时有助于控制响应的爆发。 Checksum 16比特 Group 32比IGMP消息的校验和。传送报文时,必须计算校验和并填入该字段中;接收报文时,必须在处理报文之前检验校验和,以判断IGMP消息在传输过程中是否发生了错误。 组播组地址(如果是通用查询则为0.0.0.0)。 除了在通用查询时这一字段置为0.0.0.0外,这一字段和IGMP版本1中的这一字段意义相同。 Address 特 报文示例
图2 IGMPv2成员查询消息
ahang44
图3 IGMPv2成员报告消息
图4 IGMPv2离开组消息
IGMPv3报文格式
报文格式
IGMPv3包含查询报文和报告报文两种不同格式的报文。 图1 IGMPv3查询报文格式
ahang45
字段 长度 描述 Type 8比特 成员关系查询 Type = 0x11。 Max Resp Code 8比特 设备接收到查询消息后发出响应报文的最大延迟时间,超过该时间没有发出响应报文,则查询设备认为此次查询超时,单位是1/10秒。 Checksum 16比特 IGMP消息的校验和。传送报文时,必须计算校验和并填入该字段中;接收报文时,必须在处理报文之前检验校验和,以判断IGMP消息在传输过程中是否发生了错误。 Group Address 32比特 对于普遍组查询消息,该字段置0。对于特定组查询消息、特定组/源查询消息,该字段为设置为欲查询的组播组的地址。 Resv 4比特 保留字段,发送报文时置0;接收到报文时,对该字段不做任何处理。 S 1比特 该比特位置1时,所有收到此查询消息的其他路由器不启动定时器刷新过程,但是此查询消息并不抑制查询器选举过程和路由器的主机侧处理过程。 QRV 3比特 查询者的健壮变量,如果不为0,QRV中包含中一个被查询者使用的[健壮变量]的值,如果查询者的健壮变量的值超过7,即QRV字段的最大值,那么QRV被设成0。路由器取最近收到的查询中的QRV值作为它们自己的健壮性变量的值,除非最近收到的QRV是0,在这种情况下,接收者使用缺省的健壮性变量值,或者是一个静态配置的值。 QQIC 8比特 查询器的查询间隔,单位是秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值。 ahang46
字段 长度 描述 Number of Sources (N) 16比特 消息中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定组/源地址查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。 Source Address [i] 32比特 组播源地址,其数量受到Number of Sources字段值大小的限制。 查询消息有三种类型的变体:
1、“普通查询”由多播路由器发出,用于获知邻接接口(即查询所传输的网络中所相连的接口)的完整
的多播接收状态。在一个普通查询中,组地址字段和源数量(N)字段都为0。
2、“指定组查询”由一台多播路由器发出,用于获知邻接接口中跟某一个IP地址相关的多播接收状
态。在指定组查询中,“组地址”字段含有需要查询的那个组地址,源数量(N)字段为0。 3、“指定组和源查询”由一台多播路由器发出,用于获知邻接接口是否需要接收来自指定的这些源
的,发往指定组的多播数据报。在一个指定组和源的查询中,组地址字段含有要查询的多播地址,源地址[i]字段含有相关的源地址。
图2 成员报告消息的格式
成员报告消息是主机向组播路由器发送的报告消息,用报告加入某组播组并只接收由指定组播源发往该组的数据。
ahang47
封装该消息的IP报文头的目的地址字段为224.0.0.22,本地网段上的所有IGMPv3路由器都能识别并接收。 图3 Group Record字段格式
字段 长度 描述 Type 8比特 Type = 0x22成员关系报告 Reserved 8比特 保留字段,在发送的时候是以0填充,在接收的时候是不作任何处理的。 Checksum 16校验和是对整个IGMP消息以16位为一段进行取反求和。为了计算校验和,校验和字段比特 首先必须被置0。当收到一个数据,在处理之前,必须先对校验和进行验证。 Reserved 16比特 Number of Group Records (M) 16比特 该字段表示该报告报文中包含有几个组记录。 T保留字段,在发送的时候是以0填充,在接收的时候是不作任何处理的。 ahang48
字段 长度 描述 Group Record 变长 一个主机可能需要点播多个组播地址的组播业务,每个记录包含了对应于其中一个组播地址的源地址列表等信息,它受到Number_of_Group_Records的大小的影响。 每一个组记录字段是一整块数据,其含有的信息是关于发送者在报告发送接口上的某一个多播组的成员关系。 Record Type 8比特 Group Record消息的类型。 MODE_IS_INCLUDE:接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该消息为无效消息。 MODE_IS_EXCLUDE:不接收源地址列表包含的源发往该组的组播数据。 CHANGE_TO_INCLUDE_MODE:过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机离开组播组。 CHANGE_TO_EXCLUDE_MODE:过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表中新组播源发往该组的组播数据。 ALLOW_NEW_SOURCES:表示在现有的基础上,需要接收源地址列表包含的源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源。 BLOCK_OLD_SOURCES:表示在现有的基础上,不再接收从源地址列表包含的源组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。 Aux Data Len Number of 8比特 16辅助数据长度含有在组记录中的辅助数据的实际长度,其单位是32bit字。它有可能是0,这就表示辅助数据不存在。 源数量(N)字段标明在组记录中存在多少源地址。 Sources (N) 比特 Multicast Address 32比特 多播地址字段标明该组记录从属的多播IP地址。 ahang49
字段 长度 描述 Source 32源地址[i]字段是一个数组,含有n个单播地址。n就是该记录的源数量(N)字段的值。 Address [i] 比特 Additional 变长 附加数据。如果收到的报告中的IP首部的数据报长度字段标明在最后一个组记录后面有Data 附加的数据存在。IGMPv3的实现必须在计算和验证校验和的时候包含这些附加数据,但是同时必须忽略这些附加数据。当发送一个报告时,一个IGMPv3的实现在最后一个组记录后面不能包含附加数据。 报文示例
图4 IGMPv3 Membership Report (CHANGE_TO_INCLUDE_MODE)
ahang50
图5 IGMPv3 Membership Report (CHANGE_TO_EXCLUDE_MODE)
图6 IGMPv3 Membership Report (BLOCK_OLD_SOURCES)
图7 IGMPv3 Membership Report (ALLOW_NEW_SOURCES)
ahang51
图8 IGMPv3 Membership Query (General)
图9 IGMPv3 Membership Query (Special)
ahang52
IP报文格式
报文格式
图1 IP头格式
表1 IP头字段解释 字段 长度 含义 Version 4比特 4:表示为IPV4; 6:表示为IPV6。 IHL 4比特 首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。以4字节为一个单位。 Type of Service Total Length 8比特 服务类型。只有在有QoS差分服务要求时这个字段才起作用。 16比特 总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。 Identification 16比特 Flags 3比特 标识,主机每发一个报文,加1,分片重组时会用到该字段。 标志位: ahang53
表1 IP头字段解释 字段 长度 含义 图2 IP Flag字段格式 Bit 0: 保留位,必须为0。 Bit 1: DF(Don't Fragment),能否分片位,0表示可以分片,1表示不能分片。 Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。 Fragment Offset Time to Live 8比特 12比特 片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。 生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。 Protocol 8比特 协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 常见值: 0: 保留Reserved 1: ICMP, Internet Control Message [RFC792] 2: IGMP, Internet Group Management [RFC1112] 3: GGP, Gateway-to-Gateway [RFC823] 4: IP in IP (encapsulation) [RFC2003] 6: TCP Transmission Control Protocol [RFC793] 17: UDP User Datagram Protocol [RFC768] 20: HMP Host Monitoring Protocol [RFC 869] 27: RDP Reliable Data Protocol [ RFC908 ] ahang54
表1 IP头字段解释 字段 长度 含义 Header Checksum Source Address 32比特 Destination Address Options 可变 32比特 16比特 46: RSVP (Reservation Protocol) 47: GRE (General Routing Encapsulation) 50: ESP Encap Security Payload [RFC2406] 51: AH (Authentication Header) [RFC2402] 54: NARP (NBMA Address Resolution Protocol) [RFC1735] 58: IPv6-ICMP (ICMP for IPv6) [RFC1883] 59: IPv6-NoNxt (No Next Header for IPv6) [RFC1883] 60: IPv6-Opts (Destination Options for IPv6) [RFC1883] 89: OSPF (OSPF Version 2) [RFC 1583] 112: VRRP (Virtual Router Redundancy Protocol) [RFC3768] 115: L2TP (Layer Two Tunneling Protocol) 124: ISIS over IPv4 126: CRTP (Combat Radio Transport Protocol) 127: CRUDP (Combat Radio User Protocol) 132: SCTP (Stream Control Transmission Protocol) 136: UDPLite [RFC 3828] 137: MPLS-in-IP [RFC 4023] 首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。 源IP地址。 目的IP地址。 选项字段,用来支持排错,测量以及安全等措施,内容丰富(请参见下表)。选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。 ahang55
表1 IP头字段解释 字段 长度 含义 Padding 可变 填充字段,全填0。 表2 IP Header Options CLASS NUMBER 长度 含义 0 0 - Code为0代表了选项列表的结束,放在所有选项链表的后面,用来补字节对齐。 该选项无长度字段,占一个字节。 选项格式如下: 0 1 - 表示无操作的选项。用在各种选项之间,占一个字节。用于填充4字节对齐。 选项格式如下: 0 2 11字节 表示安全和处理限制的选项。 该选项提供一种主机可以发送安全、分隔、处理限制及TCC(关闭使用组)的参数功能。 选项格式如下: Type=130(10000010):占1字节,code 的值此处设为130 length=11:占1字节,长度选项固定为11,表示该选项的长度为11字节 SSS:占2字节,表示安全域,下面列出了16种不同的安全标准,其中8个至今还没使用,预留将来使用,列表如下: ahang56
表1 IP头字段解释 字段 长度 含义 00000000 00000000 - Unclassified 11110001 00110101 - Confidential 01111000 10011010 - EFTO 10111100 01001101 - MMMM 01011110 00100110 - PROG 10101111 00010011 - Restricted 11010111 10001000 - Secret 01101011 11000101 - Top Secret 00110101 11100010 - (Reserved for future use) 10011010 11110001 - (Reserved for future use) 01001101 01111000 - (Reserved for future use) 00100100 10111101 - (Reserved for future use) 00010011 01011110 - (Reserved for future use) 10001001 10101111 - (Reserved for future use) 11000100 11010110 - (Reserved for future use) 11100010 01101011 - (Reserved for future use) CCC:占2个字节,表示分隔域,当传输的数据没被分隔的时候,此值设为0,其他的具体值可以从国防情报局获取。 HHH:占2个字节,操作限制域,该值由国防情报局DIAM手册65-19,《标准安全记号》描述。 TCC:占3个字节,传输控制码。提供一种传输隔离的手段,该值为3字母词,可用值从HQ DCA Code 530。 0 3 可变 松散的源站选路(为数据报指定一系列必须经过的IP地址) 选项格式如下: ahang57
表1 IP头字段解释 字段 长度 含义 Type: 类型。占1字节,此处设为131。 length: 占1字节,记录整个选项的长度。 pointer: 指针项,占1个字节,指向下一个被处理的源站地址,最小值为4。 0 7 可变 route data: 路由数据。 记录路径(让每个路由器都记下它的IP地址)。 选项格式如下: Type: 指明IP选项的类型。此处值为7。 length: 选项的总字节长度。不包含填充的长度,IP填满时最大为39;。 pointer: 它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12,16,最大到36,当记录下9个IP地址后,ptr的值为40,表示清单已满。 0 8 4字节 route data: 路由数据。 流标识选项。该选项长度固定为4字节,code值为136,后面的字段固定为0x02,流ID为2字节。该选项提供了一种携带SATNET流标识符通过不支持流方式的网络。 选项格式如下: ahang58
表1 IP头字段解释 字段 长度 含义 0 9 可变 严格的源站选路选项。与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。 选项格式如下: Type=137(10001001):占1字节,code 的值此处设为137。 length:占1字节,记录整个选项的长度。 pointer:指针项,占1个字节,指向下一个被处理的源站地址,最小值为4。 2 4 可变 时间戳选项。 选项格式如下: Type (01000100):时间戳选项,代码为68; length:选项的总长度(一般为36或40); ponter:指向下一个可用空间的指针(5,9,13等); oflw:表示溢出字段; flg:表示标志字段: 0:只记录时间戳。 1:每台路由器都记录它的IP地址和时间戳。在选项列表中只有存放4对地址和时间戳的空间。 ahang59
表1 IP头字段解释 字段 长度 含义 3:发送端对选项列表进行初始化,存放了4个IP地址和4个取值为0的时间戳值。只有当列表中的下一个IP地址与当前路由器地址相匹配时,才记录它的时间戳。 报文示例
IPv6报文格式
报文格式
ahang60
图1 IPv6报文头格式
表1 IP头字段解释 字段 长度 含义 Version 4比特 4:表示为IPV4; 6:表示为IPV6。 Traffic class 8比特 流量类别。该字段及其功能类似于IPv4的业务类型字段。该字段以区分业务编码点(DSCP)标记一个IPv6数据包,以此指明数据包应当如何处理。 流标签。该字段用来标记IP数据包的一个流,当前的标准中没有定义如何管理和处理流标签的细节。 Flow Label 20比特 Payload length 16比特 该字段表示有效载荷的长度,有效载荷是指紧跟IPv6基本报头的数据包,包含IPv6扩展报头。 下一报头,该字段指明了跟随在IPv6基本报头后的扩展报头的信息类型。 跳数限制,该字段定义了IPv6数据包所能经过的最大跳数,这个字段和IPv4中的TTL字段非常相似。 Next header 8比特 Hop limit 8比特 Source Address 128比特 该字段表示该报文的源地址。 ahang61
表1 IP头字段解释 字段 长度 含义 Destination 128比特 Address Extension Headers 可变 该字段表示该报文的目的地址。 扩展报头。IPv6取消了IPv4报头中的选项字段,并引入了多种扩展报文头,在提高处理效率的同时还增强了IPv6的灵活性,为IP协议提供了良好的扩展能力。当超过一种扩展报头被用在同一个分组里时,报头必须按照下列顺序出现: IPv6基本报头 逐跳选项扩展报头 目的选项扩展报头 路由扩展报头 分片扩展报头 授权扩展报头 封装安全有效载荷扩展报头 目的选项扩展报头(指那些将被分组报文的最终目的地处理的选项。) 上层扩展报头 不是所有的扩展报头都需要被转发路由设备查看和处理的。路由设备转发时根据基本报头中Next Header值来决定是否要处理扩展头。 除了目的选项扩展报头出现两次(一次在路由扩展报头之前,另一次在上层扩展报头之前),其余扩展报头只出现一次。 报文示例
图2 IPv6报文
ahang62
ahang63
OSPF报文格式
OSPF报文头格式 OSPF Hello报文格式 OSPF DD报文格式 OSPF LSR报文格式 OSPF LSU报文格式 OSPF LSAck报文格式
OSPF报文头格式
报文格式
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
OSPF这五种报文具有相同的报文头格式,长度为24字节。 图1 OSPF报文头格式
字段 长度 含义 Version 1字版本,OSPF的版本号。对于OSPFv2来说,其值为2。 节 ahang64
字段 长度 含义 Type 1字类型,OSPF报文的类型,有下面几种类型: 节 1:Hello报文; 2:DD报文; 3:LSR报文; 4:LSU报文; 5:LSAck报文。 Packet length 2字OSPF报文的总长度,包括报文头在内,单位为字节。 节 Router ID 4字发送该报文的路由器标识。 节 Area ID 4字发送该报文的所属区域。 节 Checksum 2字校验和,包含除了认证字段的整个报文的校验和。 节 AuType 2字验证类型,值有如下几种表示, 0:不验证;1:简单认证;2:MD5认证。 节 Authentication 8字鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字节 段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。 MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。 OSPF Hello报文格式
报文格式
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
ahang65
图1 OSPF Hello报文格式
字段 长度 含义 Network Mask 32比特 发送Hello报文的接口所在网络的掩码。 HelloInterval 16比特 发送Hello报文的时间间隔。 Options 8比特 可选项: E:允许Flood AS-External-LSAs MC:转发IP组播报文 N/P:处理Type-7 LSAs DC:处理按需链路 Rtr Pri 8比特 DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。 RouterDeadInterval 32比特 失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。 ahang66
字段 长度 含义 Designated Router 32比特 Backup Designated 32比特 Router Neighbor 32比特 DR的接口地址。 BDR的接口地址。 邻居,以Router ID标识。 报文示例
图2 OSPF Hello
OSPF DD报文格式
报文格式
两台路由器在邻接关系初始化时,用DD报文(Database Description Packet)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA
ahang67
Header就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。 图1 DD报文格式
字段 长度 含义 Interface MTU 16比特 在不分片的情况下,此接口最大可发出的IP报文长度。 Options 8比特 可选项: E:允许Flood AS-External-LSAs; MC:转发IP组播报文; N/P:处理Type-7 LSAs; DC:处理按需链路。 I 1比特 当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。 M (More) 1比特 当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。 M/S (Master/Slave) 1比特 当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。 ahang68
字段 长度 含义 DD sequence number LSA Headers 32比特 DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。 可变 该DD报文中所包含的LSA的头部信息。 报文示例
图2 OSPF DD报文
OSPF LSR报文格式
两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。
ahang69
字段 长度 含义 LS type 32比特 LSA的类型号。 Link State ID 32比特 根据LSA中的LS Type和LSA description在路由域中描述一个LSA。 Advertising Router 32比特 产生此LSA的路由器的Router ID。 报文示例
图1 OSPF LSR
ahang70
OSPF LSU报文格式
用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
字段 长度 含义 Number of 32比特 LSAs LSA的数量。 ahang71
常用的LSA共有5种,分别为:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。
所有的LSA都有相同的报文头:
字段 长度 含义 LS age 16比特 LSA产生后所经过的时间,以秒为单位。无论LSA是在链路上传送,还是保存在LSDB中,其值都会在不停的增长。 Options 8比特 可选项: E:允许泛洪AS-External-LSA; MC:转发IP组播报文; N/P:处理Type-7 LSA; DC:处理按需链路。 LS type 8比特 LSA的类型: Type1:Router-LSA Type2:Network-LSA Type3:Network-summary-LSA Type4:ASBR-summary-LSA Type5:AS-External-LSA Type7:NSSA-LSA Link State 32比特 ID 与LSA中的LS Type和LSA description一起在路由域中描述一个LSA。 ahang72
字段 长度 含义 Advertising 32比特 Router LS sequence 32比特 number LS checksum 16比特 length 16比特 产生此LSA的路由器的Router ID。 LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。 除了LS age外其它各域的校验和。 LSA的总长度,包括LSA Header,以字节为单位。 Router-LSA
Router-LSA(Type1):每个路由器都会产生,描述了路由器的链路状态和花费,在所属的区域内传播。 图1 Router-LSA格式
字段 长度 含义 Link State 32比特 ID 生成LSA的Router ID。 ahang73
字段 长度 含义 V (Virtual 1比特 Link) 如果产生此LSA的路由器是虚连接的端点,则置为1。 E (External) 1比特 如果产生此LSA的路由器是ASBR,则置为1。 B (Border) 1比特 如果产生此LSA的路由器是ABR,则置为1。 # links 16比特 LSA中所描述的链路信息的数量,包括路由器上处于某区域中的所有链路和接口。 Link ID 32比特 路由器所接入的目标,其值取决于连接的类型: 1:Router ID; 2:DR的接口IP地址; 3:网段/子网号; 4:虚连接中对端的Router ID。 Link Data 32比特 连接数据,其值取决于连接的类型: unnumbered P2P:接口的索引值; stub网络:子网掩码; 其它连接:路由器接口的IP地址。 Type 8比特 路由器连接的基本描述: 1:点到点连接到另一台路由器; 2:连接到传输网络; 3:连接到stub网络; 4:虚拟链路。 ahang74
字段 长度 含义 # TOS metric TOS 8比特 16比特 8比特 连接不同的TOS数量。 链路的开销值。 服务类型。 和指定TOS值相关联的度量。 TOS metric 16比特 Network-LSA
Network-LSA(Type2):由广播网或NBMA网络中的DR产生,Network-LSA中记录了这一网络上所有路由器的Router ID,描述本网段的链路状态,在所属的区域内传播。 图2 Network-LSA格式
字段 长度 含义 Link State 32比特 ID DR的接口IP地址。 Network Mask 32比特 该广播网或NBMA网络地址的掩码。 Attached Router 32比特 连接在同一个网络上的所有路由器的Router ID,也包括DR的Router ID。 ahang75
Summary-LSA格式
Network-summary-LSA(Type3):描述区域内所有网段的路由,并通告给其他相关区域。 ASBR-summary-LSA(Type4):描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。 Type3和Type4的LSA有相同的格式,它们都是由ABR产生。 图3 Summary-LSA格式
字段 长度 含义 Link State 32比特 ID 通告的网络地址。如果是ASBR Summary LSA,此字段表示ASBR的Router ID。 Network Mask 32比特 该广播网或NBMA网络地址的掩码。如果是ASBR Summary LSA,此字段无意义,设置为0.0.0.0。 metric 24比特 到目的地址的路由开销。 TOS 8比特 服务类型。 TOS metric 24比特 和指定TOS值相关联的度量。 通告缺省路由时,Link State ID和Network Mask都设置为0.0.0.0。
ahang76
AS-External-LSA
AS-External-LSA(Type5):由ASBR产生,描述到AS外部的路由,这是五种LSA中,唯一一种通告到所有区域(除了Stub区域和NSSA区域)的LSA。 图4 AS-External-LSA格式
字段 长度 含义 Link State 32比特 ID 通告的网络地址。 Network Mask 32比特 通告的目的地址的掩码。 E 1比特 外部度量值类型: 0:第一类外部路由; 1:第二类外部路由。 metric 24比特 到目的地址的路由开销。 ahang77
字段 长度 含义 Forwarding 32比特 Address External Route Tag TOS 8比特 32比特 到所通告的目的地址的报文将被转发到这个地址。 添加到外部路由上的标记。OSPF本身并不使用这个字段,它可以用来对外部路由进行管理。 服务类型。 TOS附加距离信息。 TOS metric 24比特 Type5的LSA可以用来通告缺省路由,此时Link State ID和Network Mask都设置为0.0.0.0。
报文示例
图5 Network-LSA
ahang78
图6 Router-LSA
ahang79
图7 Summary-LSA
OSPF LSAck报文格式
报文格式
用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。 图1 OSPF LSAck报文格式
ahang80
字段 长度 含义 LSAs 可变 通过LSA的头部信息确认收到该LSA。 Headers 报文示例
图2 OSPF LSAck
ahang81
PIM报文格式
PIM报文通用格式 PIM Hello消息格式 PIM Register消息格式 PIM Register-Stop消息格式 PIM Join/Prune消息格式 PIM Graft/Graft-Ack消息格式 PIM Bootstrap消息格式 PIM Assert消息格式
PIM C-RP Advertisement消息格式
PIM报文通用格式
PIM(Protocol Independent Multicast)称为协议无关组播,作为一种组播路由解决方案,也可以支持IPv4和IPv6网络,在实践中得到广泛的应用。
PIM通过路由器之间交互PIM控制消息实现组播路由功能。PIM控制消息使用IP报文封装。 图1 PIM消息的封装格式
IP报文头的协议类型字段值为103,用来标识数据部分封装了PIM消息。
IP报文头的目的地址字段用来标识该PIM消息的目的接收者。可以是单播地址,也可以是组播地址。 PIM-DM协议与PIM-SM协议,支持不同的控制消息。
PIM消息通用头部格式
所有的PIM控制消息头部有相同的格式,如下图: 图2 PIM消息头部格式
ahang82
字段 长度 说明 Version 4比特 PIM版本,值为2。 Type 4比特 消息类型,取值如下: 0:Hello(PIM-DM与PIM-SM都适用) 1:Register(只适用于PIM-SM) 2:Register-Stop(只适用于PIM-SM) 3:Join/Prune(PIM-DM与PIM-SM都适用) 4:Bootstrap(只适用于PIM-SM) 5:Assert(PIM-DM与PIM-SM都适用) 6:Graft(只适用于PIM-DM) 7:Graft-Ack(只适用于PIM-DM) 8:Candidate-RP-Advertisement(只适用于PIM-SM) 9:State Refresh(只适用于PIM-DM) Reserved 8比特 Checksum 16比特 保留。 校验和。
ahang83
VRRP报文格式
报文格式
VRRP报文被封装在IP包中。使用专门的VRRP IPv4组播地址。(协议号112,组播地址 224.0.0.18) IANA分配给VRRP的IP协议号为112(十进制)。
IANA给VRRP分配的IP组播地址为224.0.0.18。这是一个本地范围的多播地址。不论TTL的值是多少,路由器都被禁止转发以此地址为目标地址的报文。
VRRP报文的IP头中,TTL必须为255。当VRRP路由器收到TTL不等于255的VRRP协议报文后,必须丢弃。 图1 VRRP报文格式
字段 长度 描述 Version 4比特 指VRRP协议版本,本文档定义版本号2。 Type 4比特 定义了VRRP报文的类型。本版本的协议仅定义了一个报文类型: 1:ADVERTISEMENT 带有未知类型的报文必须被丢弃。 Virtual Rtr ID8 Priority 8比特 虚拟路由器标识(VRID)字段标识了此报文所报告状态的虚拟路由器。可配置的范围是1--255。没有缺省值。 8比特 Priority字段申明了发送此报文的VRRP路由器的优先级。值越高优先级越高。该字段为8位无符号整型。 ahang84
字段 长度 描述 如果VRRP路由器是虚拟路由器地址的IP地址所有者,那么其优先级必须为255。起备用作用的VRRP路由器的优先级必须在1--254之间。缺省的VRRP路由器优先级为100。 优先级值0 用于指示当前虚拟路由器的主路由器停止参与VRRP组。主要用于触发备用路由器快速地迁移到主路由器,而不用等待当前主路由器超时。 Count IP Addrs 8比特 Auth Type 8比特 在此VRRP通告中包含的IP地址的数量。 认证类型字段用于标识要用到的认证方法。在一个虚拟路由器组内认证类型是唯一的。认证类型字段是一个8位无符号整型。如果报文携带未知的认证类型或者该认证类型和本地配置的认证方法不匹配,那么该报文必须被丢弃。 目前定义的认证方法有: 0 - No Authentication 不认证 该认证类型表明VRRP协议报文的交换不需要认证。在发送VRRP协议报文时,Authentication Data 字段将被置为0;而在接收协议报文时,Authentication Data 字段被忽略。 1 - Reserved 保留 2 - Reserved 保留 说明: VRRP的早期版本 定义了一些认证类型[RFC2338]。这些认证类型的定义已经在本文档中被删除,因为根据实际经验表明,这些认证方法并不能提供任何真正的安全保障,并且仅会导致在一个VRRP组内出现多个Master的情况。 Adver Int 8比特 VRRP通告间隔时间,单位为秒。缺省为1秒。这个字段主要用于错误配置路由器时的故障定位和解决。 Checksum 16比特 校验和字段用于检测VRRP消息的数据是否出错。 校验和是从version字段开始的整个VRRP消息的1的16位补码和。(RFC1071 描述了校验和的计算细节)。 ahang85
字段 长度 描述 IP Address 32比特 IP地址字段为虚拟路由器的一个或者多个IP地址。IP地址的数量在\"Count IP Addrs\"字段中说明。IP地址字段用于错误配置路由器时的故障定位和解决。 Authentication 32比特 Data 认证字符串仅仅用于对RFC2338的向后兼容。在发送VRRP报文时该字段应该被置为0,而在接收VRRP报文时该字段应该被忽略。 报文示例
ahang86
TCP报文格式 报文格式图1 TCP首部格式
字段 长度 含义 Source Port 16比特 源端口,标识哪个应用程序发送。 Destination Port 16比特 目的端口,标识哪个应用程序接收。 Sequence Number 32比特 序号字段。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。 Acknowledgment 32比特 Number 确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。 Data Offset 4比特 数据偏移,即首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。最多有60字节的首部,若无选项字段,正常为20字节。 ahang87
字段 长度 含义 Reserved 6比特 保留,必须填0。 URG 1比特 紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 ACK 1比特 确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 PSH 1比特 标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。 RST 1比特 重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。 SYN 1比特 同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。 FIN 1比特 发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。 Window 16比特 窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。 ahang88
字段 长度 含义 Checksum 16比特 校验字段,包括TCP首部和TCP数据,是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。 Urgent Pointer 16比特 紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。 Options 可变 选项字段。TCP协议最初只规定了一种选项,即最长报文段长度(数据字段加上TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。 新的RFC规定有以下几种选型:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳。 窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。 时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。 选项确认选项: Padding data 可变 可变 填充字段,用来补位,使整个首部长度是4字节的整数倍。 TCP负载。
ahang89
报文示例
图2 TCP报文(正常报文)
ahang90
图3 TCP报文(Keepalive)
ahang91
图4 TCP报文(Keepalive ACK)
图5 TCP报文(Duplicate ACK)
ahang92
图6 TCP报文(重传)
图7 TCP报文(Out-Of-Order乱序)
图8 TCP报文(Window Update)
ahang93
UDP报文格式
报文格式
图1 UDP报文格式
字段 长度 描述 Source Port 2字节 标识哪个应用程序发送(发送进程)。 Destination Port 2字节 标识哪个应用程序接收(接收进程)。 Length 2字节 UDP首部加上UDP数据的字节数,最小为8。 Checksum 2字节 覆盖UDP首部和UDP数据,是可选的。 data octets 变长 UDP负载,可选的。 报文示例
ahang94
BGP报文头基本格式(RFC4271)
报文格式
BGP报文由BGP报文头和具体报文内容两部分组成。(RFC4271)
BGP的运行是通过消息驱动的,共有5种消息类型,这些消息有相同的报文头。这些消息通过TCP协议进行传播(端口号是179)。消息最长为4096字节,最短为19字节(只包含报文头)。 BGP报文头包括三的部分,总长19字节。各个部分的格式和功能如下:(RFC4271) 图1 BGP报文头格式
Marker:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验
证时所有比特均为1(十六进制则全“FF”)。
Length:占2个字节(无符号位),BGP消息总长度(包括报文头在内),以字节为单位。长度范围是
19~4096。
Type:占1个字节(无符号位),BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5
类报文(其中,前四种消息是在RFC4271中定义的,而Type5的消息则是在RFC2918中定义的): TYPE值 报文类型 1 OPEN 2 UPDATE 3 NOTIFICATION ahang95
TYPE值 报文类型 4 KEEPALIVE 5 REFRESH(RFC2918)
BGP OPEN报文格式
报文格式
如果BGP报文头中的TYPE为1,则该报文为OPEN报文。报文头后面所接的报文内容如下,OPEN报文用于建立BGP连接:
图1 OPEN报文格式
字段 长度 含义 Version 1个字节(无符号位) 表示协议的版本号,现在BGP的版本号为4。 ahang96
字段 长度 含义 My 2个字发送者自己的AS域号 Autonomous 节(无System 符号位) Hold Time 2个字发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关节(无系,发送KEEPALIVE或UPDATE等报文的时间间隔。BGP的状态机必须在收到对等体的符号位) OPEN报文后,对发出的OPEN报文和收到的OPEN报文两者的hold time时间作比较,选择较小的时间作为协商结果。Hold Time的值可为零(不发KEEPALIVE报文)或大于等于3,我们系统的默认为180。 BGP 4个字发送者的router id。 Identifier 节(无符号位) Opt Parm Len 1个字节(无符号位) 表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。 Optional Parameters 此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元(RFC3392)。 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... | Parm. Type | Parm. Length | Parameter Value (variable) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-... ahang97
字段 长度 含义 Parm. Type:占1个字节(无符号位),为可选参数类型。我们现在的实现中,只在type值为2时有意义,表示携带的参数为协商能力。 Parm. Length:占1个字节(无符号位),为Parameter Value的长度。 Parameter. Value:根据Parm.Type的不同值填写不同的参数内容,在Parm.Type为2表示协商能力时,Parameter.Value是表示所支持的各种协商能力的列表,列表中的每一个单元是如下的一个TLV三元组: +------------------------------+ | Capability Code (1 octet) | +------------------------------+ | Capability Length (1 octet) | +------------------------------+ | Capability Value (variable) | +------------------------------+ Capability Code:所支持的能力编号,占1个字节。Code为1时,表示支持的地址族能力;Code为2时,表示支持REFRESH能力。 Capability Length:表示Capability Value的长度,占1个字节。 Capability Value:根据Code值的不同其内容与长度也不同。 Capability Code为1: Capability Value值是一个TLV三元组,共占4个字节: 0 7 15 23 31 +-------+-------+-------+-------+ | AFI | Res. | SAFI | +-------+-------+-------+-------+ AFI:地址族标识(Address Family Identifier),占2个字节,能力所支持地址族标识信息,用以和SAFI一同确定网络层协议和IP地址间的关系,编码方式与多协议扩展中的规定相同。其值按照RFC1700中ADDRESS FAMILY NUMBERS的定义; ahang98
字段 长度 含义 Res:保留位,占1个字节,发送者应将其设置为零,在接受的时候忽略; SAFI:子地址族标识(Address Family Identifier),占1个字节,能力所支持的子地址族标识信息,用以和AFI一同确定网络层协议和IP地址间的关系,编码方式与多协议扩展中的规定相同。其值按照RFC1700中ADDRESS FAMILY NUMBERS的定义。 Capability Code为2(RFC2918) 表示支持路由刷新能力,即Route Refresh Capability。此能力的code为2,length为零,无value部分。 需要说明的是,只有在能力协商中使能了支持Route Refresh Capability,路由器才能处理REFRESH报文。我们的实现是默认情况下,支持IPv4单播能力与路由刷新能力,其他能力需要另外设定。 表1 AFI及SAFI编码说明 AFI编码 AFI说明 SAFI编码 SAFI说明 说明 1 IPv4地址族 1 单播 IPv4单播 2 组播 IPv4组播 128 VPN IPv4的L3VPN 2 IPv6地址族 1 单播 IPv6单播 2 组播 IPv6组播 128 VPN IPv6的L3VPN ahang99
字段 长度 含义 196 二层 128 VPN L2VPN的Kompella方式 报文实例
BGP UPDATE报文格式
如果BGP报文头中的TYPE为2,则该报文为UPDATE报文。报文头后面所接的报文内容如下(RFC 4271),UPDATE报文用于通告路由。
报文格式
ahang100
图1 UPDATE报文格式
字段 长度 含义 Withdrawn Routes Length 2个字节(无符号位) 标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。 Withdrawn Routes 变长 包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。 Length:待撤销路由的掩码。其值为零时,表示匹配所有的路由。 Prefix:传送的IP地址前缀必须用整字节表示。例如:假定待撤销的路由为200.200.200.200,其编码用16进制表示可如下: Mask掩码(十进制) Length Prefix 32 20 C8 C8 C8 C8 25 19 C8 C8 C8 80 20 14 C8 C8 C0 15 0F C8 C8 Total Path Attribute Length 2个字节(无符号位) 标明Path Attributes部分和Network Layer Reachability Information两部分的长度。其值为零时,表示没有路由及其路由属性要通告。 ahang101
字段 长度 含义 Path Attributes 变长 包含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。其编码采用TLV格式。如下所示。 图2 BGP路径属性TLV格式 其中,Attr.TYPE占2个字节(无符号位),包括1字节的Flags(无符号位)和1字节的Type Code(无符号位)。 图3 TLV结构-Type Attr.Flags:占1个字节(8个bit),表示属性的标记,其每个bit位的意义如下显示: O: Optional bit, 属性的可选性。决定属性是否为必携带属性。带可选属性(optional)设为1,公认属性(well-known)设为零。 T: Transitive bit 属性的可传递性。对于可选属性,是可传递的设为1,非可传递的设为0。对于公认属性必须设为1。 P: Partial bit 属性的局部性。对于可传递的可选属性是局部的设为1,是完全的设为零。对于非可传递的的可选属性和公认属性,必须设为零。 E: Extended Length bit 决定该属性的长度的字段(即Attr. Length)是否需要扩展。不需要扩展则设为零,Attr. Length占1个字节;需要扩展则设为1,Attr. Length占2个字节。 U: Unused bits 低4位没有使用,发送时必须全部设为零,并且在接收时被忽略。 Attr.Type Code:占1个字节(无符号位),表示属性的类型号。设置如下表2。 Attr.Value:根据不同属性的类型填写不同内容。 ahang102
字段 长度 含义 Network Layer Reachability Information(NLRI) 变长 包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length, the prefix of the reachable route)组成,其编码填写方法与Withdrawn Routes的填写方法相同。 表1 路由属性的类型号列表 属性类型 属性值 1:Origin IGP EGP Incomplete 2:As_Path AS_SET AS_SEQUENCE AS_CONFED_SET AS_CONFED_SEQUENCE 3:Next_Hop 下一跳的IP地址 4:Multi_Exit_Disc MED用于判断流量进入AS时的最佳路由 5:Local_Pref Local_Pref用于判断流量离开AS时的最佳路由 ahang103
字段 长度 含义 6:Atomic_Aggregate BGP Speaker选择聚合后的路由,而非具体的路由 7:Aggregator 发起聚合的路由器ID和AS号 8:Community 团体属性 9:Originator_ID 反射路由发起者的Router ID 10:Cluster_List 反射路由经过的反射器列表 14:MP_REACH_NLRI 多协议可达NLRI 15:MP_UNREACH_NLRI 多协议不可达NLRI 16:Extended Communtities 扩展团体属性
ahang104
BGP的NOTIFICATION报文格式
如果BGP报文头中的TYPE为3,则该报文为NOTIFICATION报文。报文头后面所接的报文内容如下(RFC 4271),NOTIFICATION报文用于处理BGP进程中的各种错误。 图1 NOTIFICATION报文格式
ahang105
各字段解释如下:
Error code:占1个字节(无符号位),定义错误的类型,非特定的错误类型用零表示。
Error subcode:占1个字节(无符号位),指定错误细节编号,非特定的错误细节编号用零表示。 Data:指定错误数据内容。
错误码 错误子码 1:消息头错误 1:连接未同步 2:错误的消息长度 3:错误的消息类型 2:Open消息错误 1:不支持的版本号 2:错误的对等AS 3:错误的BGP标识符 4:不支持的可选参数 5:认证失败 6:不可接受的保持时间 7:不支持的能力 ahang106
错误码 错误子码 3:Update消息错误 1:畸形属性列表 2:不可识别的公认属性 3:缺少公认属性 4:属性标志错误 5:属性长度错误 6:无效Origin属性 7:AS路由环路 8:无效Next_Hop属性 9:可选属性错误 10:无效网络字段 11:畸形AS_Path 4:Hold Timer溢出 0:没有特别的错误子码定义。 5:有限状态机错误 0:没有特别的错误子码定义。 ahang107
错误码 错误子码 6:终止 1:前缀超过最大值。 2:管理关闭 3:删除邻居 4:管理重置 5:连接失败 6:其他配置改变 7:连接冲突 8:资源短缺 9:BFD断开连接 Error Code Error Subcode 1: Message 1: connection not synchronized header error 2: error message length 3: error message type ahang108
错误码 错误子码 2: Open message error 1: unsupported version number 2: error peer AS 3: error BGP identifier 4: unsupported optional parameter 5: authentication failed 6: unacceptable Holdtime 7: unsupported capability 3: Update message error 1: malformed attribute list 2: unrecognized well-known attribute 3: well-known attribute is missing 4: attribute flags error 5: attribute length error 6: invalid origin attribute ahang109
错误码 错误子码 7: AS routing loop 8: invalid Next-Hop attribute 9: error optional attribute 10: invalid network field 11: abnormal AS-Path 4: Hold timer expired 0: no special definition of the error subcode 5: Finite state machine error 0: no special definition of the error subcode 6: Cease 1: maximum number of prefixes reached 2: administrative shutdown 3: peer de-configured ahang110
错误码 错误子码 4: administrative reset 5: connection rejected 6: other configuration change 7: connection collision resolution 8: out of resources 9: BFD session Down 报文实例
BGP KEEPALIVE报文格式
报文格式
如果BGP报文头中的TYPE为4,则该报文为KEEPALIVE报文。KEEPALIVE报文用于保持BGP连接。
ahang111
KEEPALIVE报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节。
报文实例
BGP的REFRESH报文格式
如果BGP报文头中的TYPE为5,则该报文为REFRESH报文。报文头后面所接的报文内容如下(RFC 2918),REFRESH报文用于动态的请求BGP路由发布者重新发布UPDATE报文,进行路由更新。
报文格式
图1 REFRESH报文格式
Field字段 Length长度 Description描述 AFI 2字节(无表示地址族id,与UPDATE报文中的定义相同。 符号位) Res. 1字节(无所有为应全为零,在接收报文时,此位被忽略。 符号位) ahang112
Field字段 Length长度 Description描述 SAFI 1字节(无与UPDATE报文中的定义相同。 符号位) 报文实例
ahang113
RIP报文格式
RIP是Routing Information Protocol(路由信息协议)的简称。它是一种较为简单的内部网关协议IGP(Interior Gateway Protocol),主要用于规模较小的网络中,比如校园网以及结构较简单的地区性网络。对于更为复杂的环境和大型网络,一般不使用RIP。
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它通过UDP报文进行路由信息的交换,使用的端口号为520。
RIP有两个版本:RIP-1和RIP-2。
RIP-1是有类别路由协议(Classful Routing Protocol),它只支持以广播方式发布协议报文。RIP-1
的协议报文中没有携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1无法支持路由聚合,也不支持不连续子网(Discontiguous Subnet)。
RIP-2是一种无分类路由协议(Classless Routing Protocol),有两种报文传送方式:广播方式和组
播方式,缺省将采用组播方式发送报文,使用的组播地址为224.0.0.9。当接口运行RIP-2广播方式时,也可接收RIP-1的报文。
RIP-1的报文格式
RIP-1报文由头部(Header)和多个路由表项(Route Entries)部分组成。在一个RIP报文中,最多可以有25个路由表项。RIP是一个基于UDP协议的,并且RIP-1的数据包不能超过512字节。 图1 RIP-1的报文格式
ahang114
字段名 长度 含义 Command 8比特 标识报文的类型: 1:Request报文,向邻居请求全部或部分路由信息; 2:Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。 Version 8比特 RIP的版本号: 1:RIP-1 2:RIP-2 Must be zero 16/32比特 必须为零字段。 AFI(Address family identifier) IP Address 16比特 地址族标识,其值为2时表示IP协议。对于Request报文,此字段值为0。 32比特 该路由的目的IP地址,可以是自然网段的地址,也可以是子网地址或主机地址。 Metric 32比特 路由的开销值。对于Request报文,此字段值为16。 RIP-2的报文格式
图2 RIP-2的报文格式
ahang115
字段名 长度 含义 Command 8比特 标识报文的类型: 1:Request报文,向邻居请求全部或部分路由信息; 2:Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。 Version 8比特 RIP的版本号: 1:RIP-1 2:RIP-2 Must be zero AFI(Address Family Identifier) Route Tag IP Address 16比特 16比特 必须为零字段。 地址族标识,其值为2时表示IP协议。对于Request报文,此字段值为0。 16比特 32比特 外部路由标记。 该路由的目的IP地址,可以是自然网段的地址,也可以是子网地址或主机地址。 Subnet Mask Next Hop 32比特 32比特 目的地址的掩码。 提供一个更好的下一跳地址。如果为0.0.0.0,则表示发布此路由的路由器地址就是最优下一跳地址。 Metric 32比特 路由的开销值。对于Request报文,此字段为16。 RIP-2为了支持报文验证,使用第一个路由表项(Route Entry)作为验证项,并将AFI字段的值设为0xFFFF作为标识。
ahang116
图3 RIP-2的验证报文格式
字段名 长度 含义 Command 8比特 标识报文的类型: 1:Request报文,向邻居请求全部或部分路由信息; 2:Reponse报文,发送自己全部或部分路由信息,一个Response报文中最多包含25个路由表项。 Version 8比特 RIP的版本号: 1:RIP-1 2:RIP-2 Must be zero 16比特 必须为零字段。 0xFFFF 16比特 验证项标识,表示整个路由报文需要验证。 Authentication 16Type 比特 验证类型: 2:明文验证; 3:MD5验证。 ahang117
字段名 长度 含义 Authentication 16字节 验证口令,当使用明文验证时该字段才会包含密码信息。
ahang118
ahang119
因篇幅问题不能全部显示,请点此查看更多更全内容