《MY网络基础知识》----网络层之ICMP协议与ping命令

 

    关于ICMP协议,因ICMP报文是在IP数据报内被封装传输的,而IP数据报又分为IPv4和IPv6数据报。所以ICMP也分为ICMPv4和ICMPv6。不管是ICMPv4还是ICMPv6,他们都属于ICMP协议,需要完成ICMP协议需要完成的任务。我们本篇不详细的区分ICMPv4还是ICMPv6的差异(一般协议栈开发者才会去关注),我们只关注ICMP协议在ip传输过程中的作用,以及如何完成这些作用。

    我们本篇的阅读思路:TCP/IP协议族中为什么要定制一个ICMP协议,即ICMP协议的出现是为了解决什么问题,然后介绍ICMP是如何解决这样的问题,最后介绍ICMP在我们一些应用程序中的运用。

 

 

 

 

OSI模型

协议

数据包叫法

常见设备

5层模型

应用层

HTTP,DHCP,FTP

报文

常见PC机,工作站,终端等

应用层

表示层

 

会话层

 

传输层

TCP/UDP

传输协议分组,分组

网关

传输层

网络层

IP协议,ICMP协议IGMP协议

IP包,IP数据报

路由器,三层交换机

网络层

数据链路层

以太网协议,ARP协议

帧,数据帧

交换机,网桥

数据链路层

物理层

802.3

比特流

网口,网线,集线器

物理层

 

 

 

 

 

 

 

 

一:ICMP协议

ICMP协议出现的原因:
在网络层中,因IP协议本身并没有为终端系统提供直接的方法来发现那么发往目的地址失败的IP数据包,并且,IP协议没有提供直接的方式来获取诊断信息。为了解决这些不足之处,所以引出了ICMP协议。
ICMP是(Internet Control Message Protocol)Internet控制报文协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。

 

 

 

 

ICMP报文格式:

  • 类型 
    • 3 终点不可达
    • 11 时间超过
    • 12 参数问题
    • 5 改变路由
    • 8或0 回送请求或回答
    • 13或14 时间戳请求或回答
  • 代码 : 进一步区分某种类型中的几种不同情况。
  • 检验和 : 用于检验整个ICMP报文。但是IP首部检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。

 

 


二:ICMP协议的报文分类

ICMP 报文大致可分为两类:差错报文、查询报文。具体消息类型如下表所示: 

 

 

 

 

 

 

2.1 ICMP 差错报文

1、ICMP 目标不可达消息:IP 路由器无法将 IP 数据报发送给目的地址时,会给发送端主机返回一个目标不可达 ICMP 消息,并在这个消息中显示不可达的具体原因。


2、ICMP 重定向消息:如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个 ICMP 重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下,路由器会通过这个 ICMP 重定向消息给发送端主机一个更合适的发送路由。


3、ICMP 超时消息:IP 数据包中有一个字段 TTL(Time to live,生存周期),它的值随着每经过一个路由器就会减 1,直到减到 0 时该 IP 数据包被丢弃。此时,IP 路由器将发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。


4、源抑制消息:当 TCP/IP 主机发送数据到另一主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个 ICMP 源抑制消息。

 

 

 

 

 

 

 

 

2.2 ICMP 查询报文类型分析


—-ICMP 回送消息:用于进行通信的主机或路由之间,判断发送数据包是否成功到达对端的消息。可以向对端主机发送回送请求消息,也可以接收对端主机回来的回送应答消息。

-ICMP 地址掩码消息:主要用于主机或路由想要了解子网掩码的情况。可以向那些主机或路由器发送 ICMP 地址掩码请求消息,然后通过接收 ICMP 地址掩码应答消息获取子网掩码信息。

—-ICMP 时间戳消息:可以向那些主机或路由器发送 ICMP 时间戳请求消息,然后通过接收 ICMP 时间戳应答消息获取时间信息。

 

 

 

 

 

 

 


2.3 不产生ICMP的情况

1.ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送) 
2.目的地址是广播地址或多播地址的IP数据报。 
3.作为链路层广播的数据报。 
4.不是IP分片的第一片。 
5.源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

 

 

 

 

 

 

 

三:使用ICMP的具体程序

 

 

 

 

 

3.1 Ping 程序


Ping 程序利用 ICMP 回显请求报文和回显应答报文(而不用经过传输层)来测试目标主机是否可达。它是一个检查系统连接性的基本诊断工具

实例:

ping www.baidu.com

 

 

wirshark抓包工具分析如下。

《MY网络基础知识》----网络层之ICMP协议与ping命令_第1张图片

很简单没什么好说的。要解析这个数据包的具体思路:

1,参照以太网的包格式,解析得到IP包。
2.参照IP包格式解析得到ICMP包
3.参照ICMP报文格式,解析得到该数据包的含义。

 

3.2 Traceroute 程序


Traceroute 程序主要用来侦测源主机到目的主机之间所经过的路由的情况。

Traceroute 使用 ICMP 报文和 IP 首部中的 TTL 字段,它充分利用了 ICMP 超时消息。其原理很简单,开始时发送一个 TTL 字段为 1 的 UDP 数据报,而后每次收到 ICMP 超时后,按顺序再发送一个 TTL 字段加 1 的 UDP 数据报,以确定路径中的每个路由器,而每个路由器在丢弃 UDP 数据报时都会返回一个 ICMP 超时报文,而最终到达目的主机后,由于 ICM P选择了一个不可能的值作为 UDP 端口(大于30000)。这样目的主机就会发送一个端口不可达的 ICMP 差错报文。

 

 

你可能感兴趣的:(MY网络基础知识)