2.3.2、ICMP(Internet控制管理协议)
ICMP(Internet Control Message Protocol,因特网控制消息协议)是一种管理协议,为IP提供消息收发服务,以IP数据报的形式传输。其作用就是在用于在IP主机、路由器之间传递差错控制报文,探测网络是否存在故障。
两个特征:
ICMP主要检测常见事件和消息:
ICMP 报文是封装在 IP 包里面,报文分为信息报文、差错报文、控制报文。信息报文由客户端发出,差错报文是接收到的信息报文的接收端或路由器回复,表示不能完成要求的服务。
ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部 + 1472字节<数据大小>38字节。
类型 | 内容 |
---|
0 | 回送应答 (Echo Reply) | 3 | 目标不可达(Destination Unreachable) | 4 | 原点抑制(Source Quench) | 5 | 重定向或改变路由(Redirect) | 8 | 请求(echo requst) | 9 | 路由器公告(Router Advertisement) | 10 | 路由器请求(Router Solicitation) | 11 | 超时(Time Exceeded) | 17 | 地址子网请求(Address Mask Request) | 18 | 地址子网请求(Address Mask Reply) |
注意:ICMP重定向,解决数据包访问的次优路径问题。
错误码 | ICMP不可达内容 | 备注 |
---|
0 | 网络不可达 (Network Unreachable) | 不能匹配网络地址 | 1 | 主机不可达(Host Unreachable) | IP地址不能匹配路由表 | 2 | 协议不可达(Protocol Unreachable) | 禁止 TCP 协议访问 | 3 | 端口不可达(Port Unreachable) | 对端端口不能访问 | 4 | 分片需要和不设置分片 | 分片不符 | 5 | 源站选路失败Soruce Route Failed | - | 6 | 目的网络不认识 | - |
2、Ping命令的使用 功能:用来检测网络的连通情况和分析网络速度。 原理:源端发送icmp echo requst消息,对端设备如果可达,随即回复icmp echo replay消息,就是向目标主机发送ICMP信息报文,目标主机回应ICMP信息报文。
常用方式
作用 | 命令格式 | 备注 |
---|
拼通网址 | ping x.x.x.x | 默认发5个包 | 拼通网址 | ping x.x.x.x -n 10 | 自己指定发10个包 | 测试链路切换时的丢包率 | ping -t x.x.x.x | 不间断发包 | 拼指定路径地址 | Ping -a x.x.x.x y.y.y.y | 源地址x.x.x.x,目标地址y.y.y.y |
bytes值:数据包大小,也就是字节。默认是32字节。
time值:响应时间,这个时间越小,说明你连接这个地址速度越快。
TTL值:Time To Live,表示DNS记录在DNS服务器上存在的时间,它是IP协议包的一个值,告诉路由器该数据包何时需要被丢弃。可以通过Ping返回的TTL值大小,粗略地判断目标系统类型是Windows系列还是UNIX/Linux系列。 Linux系统的TTL值为64或255,WindowsNT/2000/XP系统的TTL值为128。
下面的说明是已发送sent4个包,接收Received4个包,lost丢失的包数。三个参数最短时间、最长时间、平均时间。
3、Traceroute路由轨迹。 显示发送数据包的主机到达特定主机之前历经多少路由器。原理利用IP包的TTL生存期限从TTL=1开始按须序发送UDP包,强制接收ICMP超时消息。TTL1=1探测包发送到第一个节点,第一跳TTL=1-1=0,路由器返回该IP不可达,同样TTL1=1探测包到达第二个节点,返回该IP不可达,这样得到直到目的地址的IP地址,得出所经过的路径。ping失败则需要tracert定位故障节点位置。
<R5>tracert 44.1.1.1
traceroute to 44.1.1.1(44.1.1.1), max hops: 30 ,packet length: 40,press CTRL_C
to break
1 15.1.1.1 30 ms 20 ms 20 ms
2 13.1.1.3 30 ms 40 ms 30 ms
2.3.3、ICMPv6
在IPv6中,ICMP的作用被扩大,没有ICMPv6,IPv6就无法正常通信。ICMPv6 实现了 IPv4 中的 ICMP(ping命令)、ARP 以及 IGMP 的所有功 能,并且增加了邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。
1、ICMPv6的报文格式 下一报头值为58时,表示IPv6包头后封装着一个ICMPv6消息。 Type:表示 ICMPv6 报文的类型,当取值介于 0 到 127 之间时,表示该报文为错误报文(如目的不可达、超时等),当取值在 128 到 255 之间时,则表示该报文为信息报文。
Code:表示此消息类型(Type)细分的类型,具体区分每种消息类型的错误信息,如目的不可达可能是防火墙导致的,也可能是路由错误导致的。
Checksum:校验和,校验的部分包括了 IPv6 伪首部和ICMPv6报文。IPV6伪首部包含4个部分:16字节的sourse address, 16字节的destination addrss,2字节的 payload length, 1字节的next header。
2、类型(Type)分为两类:一类是错误消息,一类是信息消息。
类型 | 内容 | 备注 |
---|
1 | 目标不可达 (Destination Unreachable) | 错误类 | 2 | 包过大(Packet Too Big) | 错误类 | 3 | 超时(Time Exceeded) | 错误类 | 4 | 参数问题(Parameter Problem) | 错误类 | 128 | 回送请求消息(Echo Request) | 信息类 | 129 | 回送应答消息(Echo Reply) | 信息类 | 130 | 多播监听查询(Multicast Listener Query) | 信息类 | 131 | 多播监听报告(Multicast Listener Report) | 信息类 | 132 | 多播监听结束(Multicast Listener Done) | 信息类 | 133 | 路由器请求信息(Router Solicitation) | 信息类 | 134 | 路由器公告信息(Router Advertisement) | 信息类 | 135 | 邻居请求消息(Neighbor Solicitation) | 信息类 | 136 | 邻居宣告消息(Neighbor Advertisement) | 信息类 | 137 | 重定向消息(Redirect Message) | 信息类 | 138 | 路由器重编号 (Router Renumbering) | 信息类 | 139 | 信息查询(ICMP Node Information) | 信息类 | 140 | 信息应答(ICMP Node Response) | 信息类 | 141 | 反邻居探索请求消息 | 信息类 | 142 | 反邻居探索宣告消息 | 信息类 |
3、具体的错误原因 A、目标不可达 当出现类型1,目标不可达 (Destination Unreachable)时,可以通过cod代码知道是属于那一种具体错误,常见的如下:
cod | 内容 |
---|
0 | 没有到达目标的路由 | 1 | 与目标的通信被管理策略禁止 | 2 | 未指定 | 3 | 地址不可达 | 4 | 端口不可达 |
B、数据包过大 出口链路的MTU小于IPv6数据包的长度时,应付出现数据包无法转发,该路由器就会回送带有错误消息的报文。该报文被用于IPv6路径MTU发现的处理 。数据包超长报文的类型字段值为2,代码字段值为0。
C、超时 节点收到的数据包跳限制为0时,节点会丢弃该数据包并回送带有错误消息的报文。0为跳数据限制为0,1为分片重组超时。
D、参数错误 当节点收到的数据包IPv6报头或者扩展报头出现错误,并回送带有错误消息的报文。0表示报头有错误;1表示无法识别下一个报头类型;2表示遇到无法识别的IPv6选项。
抓包图: 邻居探索信息 133-137类型中路由器请求信息、路由器公告信息、邻居请求消息、邻居宣告消息、重定向消息,这5种消息称为邻居探索信息,在IPv6中的作用是通过邻居请求消息(多播)查询IPv6的地址和Mac地址的对应关系,收到邻居宣告消息后获得Mac地址。
IPv6没有路由器的情况下,使用链路本地地址,链路本地地址的前缀是FE80::/10,通过邻居请求消息,获取Mac地址,其固定的前缀+EUI-64规则形成的接口标识生成IPv6链路本地单播地址。
有路由器的情况下,比如其前缀为2001:A304:6101:1234/64,通过邻居请求消息,邻居宣告消息获取Mac地址,生成全球单播地址。
|