计算机网络我也连载了很多篇了,大家可以在我的公众号「程序员cxuan」 或者我的
系统学习。
计算机网络第一篇,聊一聊网络基础 :
计算机网络第二篇,聊一聊 TCP/IP 基础:
计算机网络第三篇,这些应用层协议你也应该知道:
计算机网络第四篇,这篇文章写的时间很长了,图文精美,非常值得花时间阅读:
计算机网络第五篇,网络层之路由器的基本概念:
计算机网络第六篇,了解一下 IP 基础知识的概念:
计算机网络第七篇,全方位了解一下网络层的知识:
计算机网络第八篇,了解一下 ARP 协议是什么:
计算机网络第九篇,DNS 协议是面试经常会考到的点,这篇带你深入了解一下 DNS 协议:
我们之前的文章中了解过 TCP/IP 协议,我那时候码了一句
原文链接见如下:
下面我们就来真正认识一下 ICMP 协议
什么是 ICMPICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。这也就是说,当主机收到一个指明上层协议为 ICMP 的 IP 数据报时,它会分解出该数据报的内容给 ICMP,就像分解数据报的内容给 TCP 和 UDP 一样。
ICMP 协议和 TCP、UDP 等协议不同,它不用于传输数据,只是用来发送消息。因为 IP 协议现在有两类版本:IPv4 和 IPv6 ,所以 ICMP 也有两个版本:ICMPv4 和 ICMPv6。
ICMP 的主要功能对于 ICMP 的功能,主要分为两个
ICMP 的第一个功能是确认 IP 包是否能够成功到达目标地址,当两个设备通过互联网相连时,任意一个设备发送给另一个设备的 IP 包如果没有到达,就会生成 ICMP 数据包发送给设备共享。
ICMP 的第二个功能是进行网络诊断,经常使用 ICMP 数据包的两个终端程序是 ping 和 traceroute,traceroute 程序用于显示两台互联网设备之间可能的路径并测量数据包在 IP 网络上的时延。ping 程序是 traceroute 的简化版本,我们经常使用 ping 命令来测试两台设备之间是否互联,ping 通常用来测试两台主机之间的连接速度,并准确报告数据包到达目的地并返回后所花费的时间。
现在我们知道了,如果在 IP 通信过程中由于某个 IP 包由于某种原因未能到达目标主机,那么这个具体的原因将由 ICMP 进行通知,下面是一个 ICMP 的通知示意图
上面我们只是画出了路由器 2 给主机 A 发送了一个 ICMP 数据包,而没有画出具体的通知类型,但实际情况是,上面发送的是目标不可达类型(Destination unreachable),ICMP 也是具有不同的通知类型的,下面我们汇总了 ICMP 数据包的具体通知类型。
上表显示的 ICMP 通知类型主要分为两类:有关 IP 数据报传递的 ICMP 报文,这类报文也叫做差错报文(error message),以及有关信息采集和配置的 ICMP 报文,这类报文也被称为查询 query 或者信息类报文。
信息类报文包括回送请求和回送应答(类型 8 和 类型 0 ),路由器公告和路由器请求(类型 9 和 类型 0 )。最常见的差错报文类型包括目标不可达(类型 3 )、重定向(类型 5)、超时(类型 11)。
ICMP 在 IPv4 和 IPv6 的封装我们知道,ICMP 是承载在 IP 内部的,而且 IPv4 和 IPv6 的封装位置不同:
ICMP 在 IPv4 协议中的封装
ICMP 在 IPv6 协议中的封装
上面两张图显示了 ICMPV4 和 ICMPv6 的报文格式。开头的 4 个字节在所有的报文中都是一样的。但是其余部分在不同的报文中却不一样。
ICMP 头部包含了整个 ICMP 数据段的校验和,具体格式如下
所有的 ICMP 报文都以 8 位的类型(Type) 和代码(Code) 字段开始,其后的 16 位校验和涵盖了整个报文,ICMPv4 和 ICMPv6 种的类型和代码字段是不同的。
ICMP 的主要消息 ICMP 目标不可达(类型 3)