从小白到大神之路之学习运维第八天~常见网络协议报文详解
一、ARP协议报文、802.1X协议报文、LLDP协议报文、IGMP协议报文、ICMP协议报文、协议识别及维测统计ARP 数据报文格式如下图所示主要参数包括硬件类型2 字节值为 1 表示以太网地址协议类型2 字节0x0800 表示 IP 地址u硬件地址长度1 字节数值为 6u协议地址长度1 字节数值为 4u操作代码2 字节1 表示请求报文2 表示应答报文u源 MAC 地址6 字节u源 IP 地址4 节字u 目的MAC 地址6 字节u 目的IP 地址4 节字1、802. 1X 协议报802. 1X 协议使用 EAPExtensible Authentication Protocol 可扩展认证协议来实现客户端、NAS 和认证服务器之间认证信息的传递当 EAPOL 报文的 Packet Type 字段值为 0000 0000 时表明 Packet Body 字段封装的是一个 EAP 数据包主要参数包括Code1 字节EAP 帧类型Request 、Response 、Success 、FailureIdentifier1 字节匹配 Request 消息和 Response 消息Length2 字节EAP 帧的总长度Code Identifier Length Data 域Data0 或更多字节EAP 包的内容当 Code 字段的值为 Success 、Failure 时Data 的值为空。当 Code 字段的值为 Request 、Response 时Data 才有值值包含 Type、Type data 两部分其中 Type 的类型有Type 1 Identifier要求客户端程序发送用户输入的用户名信息Type 2 Notification非必须的一个消息传送一些警告消息Type 3 Response OnlyRequest报文中的认证类型不可接受时回应该类型的报文Type 4 MD5-Challenge类似于 CHAP 中的 MD5-ChallengeType 5 One-Time Password (OTP)一种密码交互的方式Type 6 Generic Token Card支持 Challenge 和 Response 时使用令牌Type 254 Expanded Types支持厂商自己扩展的类型Type 255 Experimental use实验新的类型时做测试用的类型2. LLDP 协议报文LLDPLink Layer Discovery Protocol 链路层发现协议是 IEEE 802. 1ab中定义的第二层发现Layer 2 Discovery协议。LLDP 提供了一种标准的链路层发现方式可以将本端设备的主要能力、管理地址、设备标识、接口标识等信息封装到 LLDP 报文中传递给邻居节点邻居节点在收到这些信息后将其以标准 MIBManagement Information Base 管理信息库的形式保存起来供 NMSNetwork Management System 网络管理系统查询及判断链路的通信状况。封装有 LLDP 数据单元 LLDPDULLDP Data Unit的报文称为 LLDP 报文。LLDP 的帧格式如下图所示主要字段包括Destination Mac: 长度 6 个字节LLDP 帧的目的 MAC 地址。IEEE802. 1AB 规定可以取如下 3 种值0x0180-C200-000E: 最近网桥NearestBridge组 MAC 地址。0x0180-C200-0003: 最近的非两端口 MAC 中继网桥Nearest non-TPMR Bridge组地址。0x0180-C200-0000: 最近的客户网桥Nearest Customer Bridge组 MAC 地址。Source Mac: 长度 6 个字节源 MAC 地址为端口MAC 地址或设备桥MAC 地址如果有端口地址则使用端口MAC 地址否则使用设备桥 MAC 地址。LLDPDU长度不固定变长数据字段标识帧的负载为LLDPDU 。LLDPDU 就是封装在 LLDP 报文数据部分的数据单元。在组成LLDPDU 之前设备先将本地信息封装成 TLV 格式再由若干个 TLV 组合成一个 LLDPDU 封装在 LLDP 报文的数据部分进行传送。FCS4 字节帧校验序列 FCSFrame Check Sequence是为接收网卡提供判断是否传输错误的一种方法如果发现错误丢弃此帧。FCS 只是通用叫法具体的 FCS 还可以细分多种校验方法。在以太帧中FCS 通常采用循环冗余码校验 CRCCyclical Redundancy CheckLLDPDU 包含了多个 TLV 以 Chasis ID TLV、Port ID TLV 、TTLTLV 这三个 TLV 开头以 End TLV 结尾中间是可选 TLV 如图 2 。LLDP 报文中必须包含这 4 个 TLV 并且不能多于一个否则就属于非法报文。可选携带即LLDP 报文中可以包含也可以不包含这些 TLV 。IEEE 802. 1AB 标准中将 TLV 分为基本 TLVBasic TLV、组织 TLVOrganizationally Specific TLVs以及保留 TLVLLDPDU 基本 TLV 格式End ofLLDPDU(Type0):2 字节的全零的 TLV 用于标记 LLDPDU 的结尾。当端口的状态发生改变比如去使能 LLDP 或者端口 shut down时端口会向邻接设备发送一个LLDPDU 其中 Time to Live TLV 中的 TTL0 这个报文就是 shutdown 报文。所以 End ofLLDPDU TLV 只有类型和长度没有 TLV information string 字段。Classsis ID TLV(Type 1)表示发送该 LLDP 报文的设备的 ID 每个 LLDP 报文必须包含且只能包含一个 Chassis ID TLV 。LLDPDU 的第一个 TLV 必须是 Chassis ID TLV 。Chassis ID TLV 的 TLV Value 域必须以 8 比特的 chassis ID subtype 开头。Port ID TLV(Type 2)LLDPDU 的发送端口名称。每个 LLDPDU 必须包含且只能包含一个 Port ID TLV。Time to Live TLV(Type3):是一个 4 字节的 TLV 用于标识 LLDP 在邻居设备的存活时间。该 TLV 的值是一个 0 –65535 的整数它用来告诉接收端发送信息的有效期限所以如果发送端在一段时间后没有更新该信息的话接收端将丢弃该信息对端接受到此 TLV 后会用这个有效时间去更新其远端邻居的信息老化时间它的单位为秒。Port Descripton(Type4):标识了本地设备端口的描述信息如果设备支持 IETF RFC 2863,这个 TLV的值应该与 RFC 2863 的 iftable表项的 ifDescr 叶子节点值一致。在一个LLDPDU 报文中只能包含一个 Port Description TLV。System Name(Type5):标识了本地设备的完整域名如果设备支持 IETF RFC 3418 这个 TLV 的值应该与 RFC 3418 中的 sysName 的值一致。在一个 LLDPDU 报文中只能包含一个 System Name TLV。System Description (Type6):标识了本地设备的全称、系统硬件类型的版本号、操作系统、网络软件等。如果设备支持 IETF RFC 3418,这个 TLV 的值应该与 RFC 3418 中的 sysDesc的值一致。在一个 LLDPDU 报文中只能包含一个 System Description TLV。System Capabilities(Type7):标识设备支持的功能以及已使能的功能。如果该 TLV 列出的已使能功能不包含在系统支持功能中该 TLV 会被视为有错误而被丢弃。Management Address(Type8):管理地址以及对应的接口号和 OIDObject Identifier 对象标识。3. IGMP 协议报文IGMPv3 包含查询报文和报告报文两种不同格式的报文。查询报文格式如下图所示IGMP v3 查询报文字段说明● 类型(Type) 0x11 成员关系查询● 最大响应代码Max_Resp_Code最大响应代码字段指定在发送一个响应报告之前所允许的最大时间。实际允许的时间被称为最大响应时间其单位是 1/10 秒。最大响应时间的小值允许 IGMPv3 路由器调节“离开延迟 ”(最后一台主机离开组的那个时间点跟路由协议被通知到已经不存在成员的那个时间点两者之间的时间差) 。更大的值尤其在指数范围内的值可以调节网络中IGMP 流量的爆炸。● 校验和:校验和是对整个 IGMP 数据报以 16 位为一段进行取反求和。为了计算校验和校验和字段开始必须被设置成 0 。当收到一个数据在处理之前必须先对校验和进行验证● 组地址(GroupAddress)当发送一个普通查询的时候组地址字段必须被置 0 。当发送一个指定组查询或者发送一个指定组和源的查询时必须被设置成要被查询的IP 组地址。● 保留Resv发送的时候以0 填充接收的时候不做处理被忽略。● 标志位 S禁止路由器处理当被设置成 1 的时候S 标志表示任何接收路由器禁止更新它们在收到查询时要更新的那些定时器。但它不禁止查询者选举或者普通的在路由器上执行的(当路由器作为一个组成员的时候)主机端的查询处理● QQIC查询间隔时间单位是秒● 查询者的健壮变量(QRV)如果不为 0 QRV 中包含中一个被查询者使用的[健壮变量]的值如果查询者的健壮变量的值超过 7 即 QRV 字段的最大值那么QRV 被设成 0 。路由器取最近收到的查询中的 QRV 值作为它们自己的健壮性变量的值除非最近收到的 QRV 是 0 在这种情况下接收者使用缺省的健壮性变量值或者是一个静态配置的值。● 查询者的查询间隔代码(QQIC)查询者的查询间隔代码字段指定查询者使用的[查询间隔] 。实际的间隔称为查询者的查询间隔(QQI) 以秒为单位表示。● 源数量 Number_of_Source源数量(N)字段表明该查询中存在多少个源地址。在普通查询或指定组查询中这个值是 0 在指定组和源的查询中这个值为非 0 值。● 附加数据如果收到的查询中的 IP 首部中数据报长度字段表明除了上述的字段之外还有附加的数据存在IGMPv3 的实现在计算校验和的时候必须包含这些数据但是在发送查询的时候必须忽略这些数据一个 IGMPv3 的实现在上述字段之外不能再包含其它数据。报告报文格式如下图IGMP v3 报告报文字段说明● Type8bit0x22 成员关系报告● Reserved( 8bit)和 Reserved( 16bit)都是表示保留字段不过在 IGMP 中为了使它们都保持对应的长度所以才有了长度上的区别它在发送的时候是以0 填充在接收的时候是不作任何处理的。● 校验和校验和是对整个 IGMP 消息以 16 位为一段进行取反求和。为了计算校验和校验和字段首先必须被置 0 。当收到一个数据在处理之前必须先对校验和进行验证。● Number_of_Group_Records(M)该字段表示该报告报文中包含有几个组记录● Group Record[i] i 从 1 到 M一个主机可能需要点播多个组播地址的组播业务每个记录包含了对应于其中一个组播地址的源地址列表等信息它受到 Number_of_Group_Records 的大小的影响。每一个组记录字段是一整块数据其含有的信息是关于发送者在报告发送接口上的某一个多播组的成员关系。4. ICMP 协议报文ICMPInternet Control Message Protocol是一种网络协议它用于在 IP 网络中传递控制信息和错误消息。它通常与 IP 协议一起使用IP 协议负责发送和路由数据包而 ICMP 协议负责检查网络是否可达、路由是否正确、主机是否可达等网络状态的反馈信息。ICMP 协议处理模块的主要功能如下发现网络错误当一个数据包在传输过程中出现错误时ICMP 协议通过向发送方发送错误通知来发现网络错误。检查网络是否可达通过发送 ICMP ECHO 请求并接收 ICMP ECHO 回复消息可以确定目标主机是否可达。发现主机错误当一个主机无法正常工作时ICMP 协议通过向发送方发送错误通知来发现主机错误。发送路由信息ICMP 协议可以向其他主机发送路由信息以帮助它们在网络中找到合适的路由。ICMP 数据格式如下ICMP 首部格式在 ICMP 协议处理模块中识别及构造 ICMP 报文。接收到 ICMP 报文被动响应对应的 ICMP 回应报文。5. SNMP 网络管理协议SNMP 的前身是简单网关监控协议SGMP用来对通信线路进行管理。随后人们对 SGMP 进行了很大的修改特别是加入了符合 Internet定义的 SMI(一种管理信息的结构)和 MIB 然后就演进成为了 SNMP 协议。SNMP 采用特殊的客户机/服务器模式即代理agent/管理站(NMS)模型。对网络的管理与维护是通过管理工作站与 SNMP 代理间的交互工作完成的。每个 SNMP 从代理负责回答 SNMP 管理工作站主代理关于 MIB 定义信息的各种查询。所以对于被管理设备来说可以认为他就是一个 agent。SNMP 的应用场景如图所示其中管理员通过操作管理站NMS跟被管设备(Agent)通信同时在两者中都维护了一个 MIB 库通过 MIB 库中定义的节点OID来唯一标识双方操作的是那个数据。当然 MIB 库也有公共的节点system .etc,各个厂家也会加入自己的私有节点通过写成 MIB 文件的形式发布个客户。SNMP 工作场景如图管理站和 agent 之间 Get/Set 请求使用 161 port进行交互因为使用UDP 协议不存在连接GET/SET 通过数据报的消息发送和接收162 port用于发送告警信息Agent主动发出告知 NMS 有某些事情发生。SNMP 代理和管理站通过 SNMP 协议中的标准消息进行通信每个消息都是一个单独的数据报。SNMP 使用 UDP用户数据报协议作为第四层协议传输协议进行无连接操作。SNMP 消息报文包含两个部分SNMP 报头和协议数据单元 PDU。snmp 也定义了几种trap 类型如下6、协议识别及维测统计IP数据报文都是由首部和数据两部分组成。每个IP数据报都以一个IP报头开始。IP报头中包含大量信息如源IP地址、目的IP地址、数据报长度、IP版本号等。每个信息都被称为一个字段。模块支持IPV4、ARP、802.1x、LLDP、IGMP等协议字段识别。