您当前的位置: 首页 > 

恐龙弟旺仔

暂无认证

  • 3浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ICMP协议解析与实战

恐龙弟旺仔 发布时间:2022-05-21 11:02:05 ,浏览量:3

1.ICMP协议概述 1.1 什么是ICMP?

ICMP(Internet Control Message Protocol的缩写),中文就是:网际报文控制协议。

该协议是网络协议族的核心协议之一。通过一张图来看下该协议所处位置:

(图片来自 百度安全验证):

可以看到,ICMP协议与IP协议同属网络层。

虽然两者同属网络层,没有上下级关系,但是ICMP协议最终还是要依靠IP协议将报文发送出去。

1.2 ICMP协议作用

IP协议我们知道是发送数据包的重要协议,实现了数据包的分片发送。那么ICMP协议呢?

ICMP主要是用于ip主机、路由器直接传递控制消息。

控制消息:网络是否通、主机是否可达、路由是否可用等网络本身的消息。

所以ICMP消息不同于正常的网络通讯包,它主要是传递网络本身问题的消息。

通过ICMP协议发送消息,我们可以确认IP包是否成功达到目标IP;如果数据包在发送过程中被丢弃,ICMP会响应具体的原因;

1.3 基于ICMP协议的命令

1)ping

    该命令我们都比较熟悉了,通常会用来检测目标ip是否存活、发送包传递时间等

2)traceroute

    该命令能够打印出当前主机发送数据包到目标ip主机中经历了多少路由器

2.ICMP协议报文格式

先来简单看下ICMP的报文格式

 

 

(1)类型:一个8位类型字段,表示ICMP数据包类型。
(2)代码:一个8位代码域,表示指定类型中的一个功能。如果一个类型中只有一种功能,代码域置为0。
(3)检验和:数据包中ICMP部分上的一个16位检验和。

ICMP协议的类型目前已经定义了十多种,具体如下(来自百度百科):

TYPE

CODE

Description

Query

Error

0

0

Echo Reply——回显应答(Ping应答)

x

3

0

Network Unreachable——网络不可达

x

3

1

Host Unreachable——主机不可达

x

3

2

Protocol Unreachable——协议不可达

x

3

3

Port Unreachable——端口不可达

x

3

4

Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特

x

3

5

Source routing failed——源站选路失败

x

3

6

Destination network unknown——目的网络未知

x

3

7

Destination host unknown——目的主机未知

x

3

8

Source host isolated (obsolete)——源主机被隔离(作废不用)

x

3

9

Destination network administratively prohibited——目的网络被强制禁止

x

3

10

Destination host administratively prohibited——目的主机被强制禁止

x

3

11

Network unreachable for TOS——由于服务类型TOS,网络不可达

x

3

12

Host unreachable for TOS——由于服务类型TOS,主机不可达

x

3

13

Communication administratively prohibited by filtering——由于过滤,通信被强制禁止

x

3

14

Host precedence violation——主机越权

x

3

15

Precedence cutoff in effect——优先中止生效

x

4

0

Source quench——源端被关闭(基本流控制)

5

0

Redirect for network——对网络重定向

5

1

Redirect for host——对主机重定向

5

2

Redirect for TOS and network——对服务类型和网络重定向

5

3

Redirect for TOS and host——对服务类型和主机重定向

8

0

Echo request——回显请求(Ping请求)

x

9

0

Router advertisement——路由器通告

10

0

Route solicitation——路由器请求

11

0

TTL equals 0 during transit——传输期间生存时间为0

x

11

1

TTL equals 0 during reassembly——在数据报组装期间生存时间为0

x

12

0

IP header bad (catchall error)——坏的IP首部(包括各种差错)

x

12

1

Required options missing——缺少必需的选项

x

13

0

Timestamp request (obsolete)——时间戳请求(作废不用)

x

14

Timestamp reply (obsolete)——时间戳应答(作废不用)

x

15

0

Information request (obsolete)——信息请求(作废不用)

x

16

0

Information reply (obsolete)——信息应答(作废不用)

x

17

0

Address mask request——地址掩码请求

x

18

0

Address mask reply——地址掩码应答

 

还是先实战一下,方便我们对其有个更具象的认知。

3.ICMP协议实战 3.1 ping命令实战(正常主机)

笔者准备两台机器,采用ping的方式来进行通讯,ping之前启动好wireshark来进行相应ip抓包

 

3.1.1 抓包实战

客户端直接启动cmd命令行,发送ping命令如下:

C:\Users\lucky>ping 192.168.3.18

正在 Ping 192.168.3.18 具有 32 字节的数据:
来自 192.168.3.18 的回复: 字节=32 时间=114ms TTL=64
来自 192.168.3.18 的回复: 字节=32 时间=65ms TTL=64
来自 192.168.3.18 的回复: 字节=32 时间=45ms TTL=64
来自 192.168.3.18 的回复: 字节=32 时间=3ms TTL=64

192.168.3.18 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 3ms,最长 = 114ms,平均 = 56ms

发送了4次请求,也收到4次回复。

3.1.2 wireshark抓包分析

在进行3.1.1动作之前,先启动wireshark,准备好抓取相应包信息,抓取信息如下:

这里是4次ping请求和响应的总输出。

我们分析下其中一次即可,No.333和No.336

No.333 ping请求体分析

 

No.     Time           Source                Destination           Protocol Length Info
    333 11.697911      192.168.3.8           192.168.3.18          ICMP     74     Echo (ping) request  id=0x0001, seq=11611/23341, ttl=64 (reply in 336)

Frame 333: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0
Ethernet II, Src: IntelCor_40:2c:f7 (10:f0:05:40:2c:f7), Dst: bc:d0:74:13:40:02 (bc:d0:74:13:40:02)
Internet Protocol Version 4, Src: 192.168.3.8, Dst: 192.168.3.18
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)			# ping请求
    Code: 0									# ping请求
    Checksum: 0x2000 [correct]				# 校验和
    [Checksum Status: Good]
    Identifier (BE): 1 (0x0001)				# 标识符
    Identifier (LE): 256 (0x0100)			# 标识符
    Sequence number (BE): 11611 (0x2d5b)	# 序列号
    Sequence number (LE): 23341 (0x5b2d)	# 序列号	
    [Response frame: 336]
    Data (32 bytes)

注意:

Sequence number(BE)和Sequence number(LE)的值也是相同的,BE和LE是什么区别,他们在内容上只是顺序的不同,而对应的hex值是相同的。

通过资料的查找,可以这样理解:

wireshark考虑到window系统与Linux系统发出的ping报文(主要指ping应用字段而非包含IP头的ping包)的字节顺序不一样(windows为LE:little-endian byte order,Linux为BE:big-endian),别分告诉信息,其本质内容是没有不变的,只是表达形式不同。

No.336 ping响应体分析

No.     Time           Source                Destination           Protocol Length Info
    336 11.812172      192.168.3.18          192.168.3.8           ICMP     74     Echo (ping) reply    id=0x0001, seq=11611/23341, ttl=64 (request in 333)

Frame 336: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface 0
Ethernet II, Src: bc:d0:74:13:40:02 (bc:d0:74:13:40:02), Dst: IntelCor_40:2c:f7 (10:f0:05:40:2c:f7)
Internet Protocol Version 4, Src: 192.168.3.18, Dst: 192.168.3.8
Internet Control Message Protocol
    Type: 0 (Echo (ping) reply)				# ping响应
    Code: 0									# ping响应
    Checksum: 0x2800 [correct]				# 校验和
    [Checksum Status: Good]
    Identifier (BE): 1 (0x0001)				# 标识符(这里与ping请求体中的Identifier是相同的)
    Identifier (LE): 256 (0x0100)			# 标识符(这里与ping请求体中的Identifier是相同的)
    Sequence number (BE): 11611 (0x2d5b)	# 序列号(这里与ping请求体中的Sequence number是相同的)
    Sequence number (LE): 23341 (0x5b2d)	# 序列号(这里与ping请求体中的Sequence number是相同的)
    [Request frame: 333]					# 响应帧
    [Response time: 114.261 ms]				# 响应耗时
    Data (32 bytes)

以上就是一个正常的ping命令实战过程。

下面我们来看一个不太正常的,了解下ICMP协议是如何响应控制消息的。

3.2 ping命令实战(非正常主机)

我们来简单测试一种,目标主机不可达的情况。

我们来对一个不存在的主机(ip:192.168.3.18)来发送ping命令,测试下响应结果

3.2.1 抓包实战

客户端直接启动cmd命令行,发送ping命令如下:

C:\Users\lucky>ping 192.168.3.199

正在 Ping 192.168.3.199 具有 32 字节的数据:
来自 192.168.3.8 的回复: 无法访问目标主机。
来自 192.168.3.8 的回复: 无法访问目标主机。
来自 192.168.3.8 的回复: 无法访问目标主机。
来自 192.168.3.8 的回复: 无法访问目标主机。

192.168.3.199 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

ping请求直接返回了目标主机无法访问

3.2.2 wireshark抓包分析

在进行3.2.1动作之前,先启动wireshark,准备好抓取相应包信息,抓取信息如下:

 

这里协议Info内容也是Destination unreachable

来看下具体信息

No.     Time           Source                Destination           Protocol Length Info
      4 9.008265       192.168.3.8           192.168.3.8           ICMP     92     Destination unreachable (Host unreachable)

Frame 4: 92 bytes on wire (736 bits), 92 bytes captured (736 bits) on interface 0
Null/Loopback
Internet Protocol Version 4, Src: 192.168.3.8, Dst: 192.168.3.8
Internet Control Message Protocol											# ICMP响应
    Type: 3 (Destination unreachable)										# 主机不可达
    Code: 1 (Host unreachable)												# 主机不可达
    Checksum: 0xe37f [correct]
    [Checksum Status: Good]
    Unused: 00000000
    Internet Protocol Version 4, Src: 192.168.3.8, Dst: 192.168.3.199
    Internet Control Message Protocol										# ICMP请求体
        Type: 8 (Echo (ping) request)										# ping请求
        Code: 0																# ping请求
        Checksum: 0x1f9f [unverified] [in ICMP error packet]
        [Checksum Status: Unverified]
        Identifier (BE): 1 (0x0001)
        Identifier (LE): 256 (0x0100)
        Sequence number (BE): 11708 (0x2dbc)
        Sequence number (LE): 48173 (0xbc2d)
        Data (32 bytes)

总结:根据ICMP响应的Type和Code,对照表内容之后,可以知道目标主机不可达

总结:

ICMP协议与IP协议一样,都是位于网络层的协议。

但是ICMP协议主要是用来传递控制消息,根据不同的Type和Code来展示目标主机的基本情况(是否可达、路由是否可用等信息)。 本质上,ICMP协议需要借助IP协议将网络包发送出去。

关注
打赏
1655041699
查看更多评论
立即登录/注册

微信扫码登录

0.0747s