网络网络层ICMP协议
网络网络层ICMP协议
1. ICMP 协议介绍
ICMP(Internet Control Message Protocol)是 TCP/IP 协议簇中的网络层控制报文协议。用于在 IP 主机、路由器之间传递控制消息,提供可能有关通信问题的反馈信息。 以及用于网络诊断或调试(网络通不通、主机是否可达、路由是否可用等网络本身的消息)。 ICMP 并不传输用户数据,而是用来发送错误信息或其他重要的信息给 IP 源主机。
ICMP 也是基于 IP 协议工作的。但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议。ICMP 只能搭配 IPv4 使用。如果是 IPv6 的情况下,需要使用 ICMPv6 。
2. ICMP功能
- 确认 IP 包是否成功到达目标地址。
- 通知在发送过程中 IP 包被丢弃的原因。
ICMP 允许距离故障事发地最近的主机设备返回应答。 在 IP 协议头中,有一个 TTL 报文最大生存时间,当 IP 报文的 TTL 耗尽,路由器会丢弃该 IP 报文,但也不是直接丢弃,丢弃后会向该 IP 报文的源主机发送一个 ICMP 包,告知该 IP 报文在本路由器的 IP 地址上被丢弃了。
若目的主机因为拔了网线或主机关机等原因,导致路由器的 ARP 请求得不到应答,路由器也会给目的主机发送 ICMP 包,告知源主机该地址不可达。
ICMP 报文会跳过应用层和传输层,直接由网络层发送。
3. ping命令
ICMP 报文会跳过应用层和传输层,直接由网络层发送。 很多网络命令允许跳过传输层,创建 ICMP ,如 ping
命令。
ping 命令不光能验证网络的连通性,同时也会统计响应时间和 TTL。 ping
命令会先发送一个 ICMP Echo Request 给对端,对端接收到之后,会返回一个 ICMP Echo Reply。
注意 ping 命令是直接使用域名,而不是 url,一个域名可以通过 DNS 解析成 IP 地址。ping 本身已经绕过了传输层,所以 ping 命令不关心端口号。
4. traceroute 命令
traceroute
也是基于 ICMP 协议实现的命令,它能够打印出可执行程序主机,一直到目标主机之前经历了多少路由器。
安装traceroute:
sudo apt install -y traceroute