[网络层] ICMP协议以及ping命令

咱们知道,IP协议提供的是尽力而为的服务。web

IP协议的优势是简单,但缺乏差错控制和查询机制。IP分组一旦发出去,是否到达主机,以及在传输的过程当中出现哪些错误,源主机是不知道的。在这种状况下,若是出现一些问题,例如:路由器找不到目的主机,分组生存时间超过而必须被丢弃。网络

针对这些问题,设计了一种差错报告与查询、控制机制来了解信息,决定如何处理。ICMP协议就是为解决以上问题而设计的,ICMP的差错与查询、控制功能对于保证TCP/IP协议的可靠性运行时相当重要的。*ICMP协议是在网络层*的协议。ssh

ICMP的特色

* ICMP协议是在网络层的协议,可是报文不是直接传送给数据链路层,而是封装成IP分组,而后再传送给数据链路层。
* ICMP不能独立于IP协议而单独存在,是IP协议的一个组成部分。
* ICMP只能搭配IPV4使用,若是是IPV6,须要使用的是ICMPv6.

ICMP的功能

* 确认IP包是否成功到达目的地址;
* 通知在发送过程当中IP包被丢弃的缘由;

ICMP报文格式

这里写图片描述
ICMP报文分为两类:差错报告报文与询问报文svg

类型 内容
0 回送应答
3 目标不可达
4 原点抑制
5 重定向或改变路由
8 回送请求
9 路由器公告
10 路由器请求
11 超时
17 地址子网请求
18 地址子网应答

如下几种状况不产生差错报告报文
(1)对于分片的分组,若是不是第一个分片出错,则不产生ICMP差错报文。
(2)多播分组出错,不产生ICMP差错报文。
(3)具备特殊地址(127.0.0.0或0.0.0.0)的分组出错,不产生ICMP差错报文。测试

ping命令(Packet Internet Gtoper,因特网控制消息协议)

ping后面跟的是域名,不是URL。设计

ping是Windows、Unix和Linux系统下的一个命令。也属于一个通讯协议是TCP/IP的一部分,用于在IP主机、路由器之间传递控制信息code

ping的做用

  1. 利用ping能够查看网络的连通性,更好的帮助咱们分析和判断网络故障。ping发送一个ICMP,回声请求消息给目的地并报告是否收到所但愿的ICMP echo(ICMP回声应答),是用来检测网络是否畅通或者网络链接速度的命令。
  2. ping也会统计响应时间和TTL(生存周期)。

在Windows下:
这里写图片描述
在Linux下:
这里写图片描述
ping命令一般用来做为网络可用性的检查。ping命令能够对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此测试网络。xml

ping的原理

向指定的网络地址发送一个长度的数据包(ICMP Echo Request),按照约定,若指定网络地址存在,会返回一样大小的数据包(ICMP Echo Reply)。若没有返回,就是超时了,会认为指定的网络地址不存在。blog

ICMP协议经过IP协议发送的.图片

  • 在Linux/Unix系统下,序号从0开始计数,依次递增。
  • 而Windows ping程序的ICMP是没有规律的。

ping和ICMP的关系

ping命令发送数据使用的是ICMP协议。

咱们知道,telnet是23号端口,ssh是22号端口。那么,ping是什么端口呢?

谈到这句话,有的人可能就会懵了,ping是没有端口的,在网络层,端口号是传输层的内容,ping不使用TCP/UDP,跨过传输层,在网络层用的是ICMP协议,属于原生套接字,不须要端口号。