ICMP(控制报文协议)是网络层的协议。用于在主机、路由器之间传递控制消息,包括网络是否畅通、主机是否可达等。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
确认IP包是否成功到达目标地址.
通知在发送过程中IP包被丢弃的原因.
ICMP也是基于IP协议⼯作的. 但是它并不是传输层的功能, 因此⼈们仍然把它归结为网络层协议;当IP报头协议类型值为1时,说明这是一个ICMP报文。
ICMP只能搭配IPv4使⽤. 如果是IPv6的情况下, 需要使用ICMPv6。
ICMP报文格式:
ICMP包有一个8字节长的包头,其中前4个字节是固定的格式,包含8位类型字段,8位代码字段和16位的校验和;后4个字节根据ICMP包的类型而取不同的值。
类型(十进制数) | 内容 |
0 | 回送应答(Echo Reply) |
3 | 目标不可达(Destination Unreachable) |
4 | 原点抑制(Source Quench) |
5 | 重定向或改变路由(Redirect) |
8 | 回送请求(Echo Request) |
9 | 路由器公告(Router Advertisement) |
10 | 路由器请求(Router Solicitation) |
11 | 超时(Time Exceeded) |
17 | 地址子网请求(Address Mask Request) |
18 | 地址子网应答(Address Mask Reply) |
ping命令:
ping命令后面跟的是域名而不是URL,域名可以通过DNS解析为IP地址。
ping命令可以测试网络的连通性、延迟时间(ms)、TTL。
ping命令会先发送⼀个 ICMP Echo Request给对端,对端接收到之后, 会返回⼀个ICMP Echo Reply。
ping命令是基于ICMP协议,属于网络层,没有端口号这样的信息。
traceroute命令:
也是基于ICMP协议实现, 能够打印源主机, ⼀直到目标主机之前经历多少路由器。(注意区分和TTL的区别)