标签:icmp 协议 ping 程序 traceroute 程序 网络协议
ICMP 经常被认为是 IP 层的一个组成部分,它传递差错报文以及其他需要注意的信息。ICMP 报文通常被 IP 层或更高层协议(TCP 或 UDP)使用。ICMP 报文是在 IP 数据报内部传输的。IP 协议是不可靠协议,不能保证 IP 数据报能够成功的到达目的主机,无法进行差错控制,而 ICMP 协议能够协助 IP 协议完成这些功能。下面是 ICMP 报文的数据结构:
ICMP 报文大致可分为两类:差错报文、查询报文。具体消息类型如下表所示:
当发送一份差错报文时,报文始终包含 IP 的首部和产生 ICMP 差错报文的 IP 数据报的前 8 位字节。这样,接收 ICMP 差错报文的模块就会把它与某个特定的协议(根据 IP 数据报首部中的协议字段来判断)和用户进程(根据包含在 IP 数据报前 8 个字节中的 TCP 或 UDP 报文首部中的 TCP 或 UDP 端口号来判断)联系起来。
下面各种情况不会导致产生 ICMP 差错报文:
以下针对 ICMP 差错报文的类型进行分析:
----ICMP 回送消息:用于进行通信的主机或路由之间,判断发送数据包是否成功到达对端的消息。可以向对端主机发送回送请求消息,也可以接收对端主机回来的回送应答消息。
----ICMP 地址掩码消息:主要用于主机或路由想要了解子网掩码的情况。可以向那些主机或路由器发送 ICMP 地址掩码请求消息,然后通过接收 ICMP 地址掩码应答消息获取子网掩码信息。
----ICMP 时间戳消息:可以向那些主机或路由器发送 ICMP 时间戳请求消息,然后通过接收 ICMP 时间戳应答消息获取时间信息。
Ping 程序利用 ICMP 回显请求报文和回显应答报文(而不用经过传输层)来测试目标主机是否可达。它是一个检查系统连接性的基本诊断工具。
ICMP 回显请求和 ICMP 回显应答报文是配合工作的。当源主机向目标主机发送了 ICMP 回显请求数据包后,它期待着目标主机的回答。目标主机在收到一个 ICMP 回显请求数据包后,它会交换源、目的主机的地址,然后将收到的 ICMP 回显请求数据包中的数据部分原封不动地封装在自己的 ICMP 回显应答数据包中,然后发回给发送 ICMP 回显请求的一方。如果校验正确,发送者便认为目标主机的回显服务正常,也即物理连接畅通。
例如:在终端上 Ping 下谷歌的地址,神奇的发现谷歌地址既然不用翻墙都能上了,而且丢包率 0%。
$ ping www.google.com PING www.google.com (173.194.127.148) 56(84) bytes of data. 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=1 ttl=48 time=11.0 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=2 ttl=48 time=10.8 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=3 ttl=48 time=11.1 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=4 ttl=48 time=10.8 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=5 ttl=48 time=11.1 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=6 ttl=48 time=11.0 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=7 ttl=48 time=10.5 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=8 ttl=48 time=9.96 ms 64 bytes from hkg03s13-in-f20.1e100.net (173.194.127.148): icmp_req=9 ttl=48 time=10.9 ms ^C --- www.google.com ping statistics --- 9 packets transmitted, 9 received, 0% packet loss, time 8009ms rtt min/avg/max/mdev = 9.963/10.830/11.123/0.368 ms
Traceroute 程序主要用来侦测源主机到目的主机之间所经过的路由的情况。
Traceroute 使用 ICMP 报文和 IP 首部中的 TTL 字段,它充分利用了 ICMP 超时消息。其原理很简单,开始时发送一个 TTL 字段为 1 的 UDP 数据报,而后每次收到 ICMP 超时萧后,按顺序再发送一个 TTL 字段加 1 的 UDP 数据报,以确定路径中的每个路由器,而每个路由器在丢弃 UDP 数据报时都会返回一个 ICMP 超时报文,而最终到达目的主机后,由于 ICM P选择了一个不可能的值作为 UDP 端口(大于30000)。这样目的主机就会发送一个端口不可达的
ICMP 差错报文。
参考资料:
《TCP/IP 详解》
《图解 TCP/IP》
标签:icmp 协议 ping 程序 traceroute 程序 网络协议
原文地址:http://blog.csdn.net/chenhanzhun/article/details/41510629