ICMP 协议详解 | 实验

注: 本文为 “ICMP 协议” 相关文章合辑

未整理去重。


网络层 IP 数据报、ICMP 协议(含具体实验演示)

陆海潘江小 C 于 2021-04-21 17:43:28 发布

一、前言

对以前学习过的内容进行一个系统的整理,梳理思路,将零散的知识碎片集成一个相对完善的知识体系,这样能够更好地去理解知识。

看完这篇能学到什么呢?

  1. IP 数据报格式和首部字段的功能;

  2. Cisco 实验验证实际通信过程中 IP 数据报具体内容;

  3. ICMP 协议以及报文内容;

  4. ICMP 在实际中的应用。

二、IP 数据报

学习一个知识,我们往往倾向于能够直观地感知,而不喜欢抽象的概念,所以这里先放上图片(来源:百度百科)。

先看看 IP 数据报长什么样子,才能更好地理解它。

img

这张图最清晰直观的,一眼就可以发现 IP 数据报的格式和基本功能内容,下面就来瞧瞧每个区域分别负责什么。

一个 IP 数据报由首部和数据两个部分组成。首部的前部分属于固定部分,占 20 个字节;后面部分属于可变部分,长度时可变的。

首部固定部分主要字段解析:

1、版本

从图中可以看到,版本字段占 4 位。记录着通信双方使用的 IP 协议版本,比如 IPv4、IPv6,目前广泛使用的是 IPv4

2、首部长度

占 4 位,表示的 单位为 4 字节,比如 1111(十进制的 15)就代表首部长度为 60 字节(15*4=60). 以 4 字节的整数倍划分,不足则填充。最常用的首部长度为 0101(20 字节)

3、区分服务

占 8 位,用以获得更好的服务。实际中未使用。

4、总长度

首部长度和数据长度之和。占 16 位。因此,最大长度可知为 16 位都是 1,就是 65535 字节。

在 IP 层下层数据链路层存在自己的帧格式,帧格式的数据字段最大传送单元(MTU)是 1500 字节。尽可能长的数据报能够提高传输效率,实际中数据报长度很少大于 1500 字节。所以,IP 标准规定:所有主机和路由器的 IP 数据报长度不能小于 576 字节。

如果数据报长度超过 MTU,则将进行分片后再传送,与后面的片偏移相关。然后 总长度就成了分片后每个分片的首部和数据的长度之和

5、标识

占 16 位。在实际 IP 中,维持了一个计数器,每产生一个数据报,计数其加 1,存放到该字段。IP 是无连接服务,不存在按序接收问题,该标识不是序号,而是 在进行分片之后对相同的数据报进行标识,属于同一个数据报的标识相同,以便到达目的后被重新封装为原来的数据报

6、标志

占 3 位。目前使用 2 两位有意义的。

最低位:MF(More Fragment)还有分片,MF=0 时说明是最后一个分片。

中间位:DF(Don‘t Fragment)不能分片,DF=0 时才能分片。

7、片偏移

占 13 位。用于记录较长分组中,一个分片在原数据报中的相对位置。片偏移以 8 字节为单位,长度是 8 字节的整数倍。

假设一个数据报总长度为 3820 字节。首部 20 字节和数据 3800 字节。现在要求长度不超过 1420 字节,那么它的每个分片为多少呢?

简单分析一下,数据部分尽可能长的可以分为 1400,1400,1000 三个分片,这样再加上首部满足小于 1420 字节。

分片一:0-1399 字节,因此片偏移 = 0/8=0

分片二:1400-2799 字节,片偏移 = 1400/8=175

分片三:2800-3800 字节,片偏移 = 2800/8=350

很容易就计算出每个分片的片偏移。

8、生存时间

TTL(Time To Live) 占 8 位。最大值 255. 每个数据报都有 TTL,防止被错误路由在网络中不断循环,消耗网络资源。在实际中,TTL 表示的是跳数而不是时间,指明数据报在网络中最多可经过多少个路由器。

9、协议

占 8 位。指明数据报携带的数据是使用什么协议,方便目的主机的 IP 层将数据交给对应的程序处理,这里列举几个。

协议 ICMP IGMP TCP UDP OSPF
字段值 1 2 6 17 89

10、首部检验和

占 16 位。只校验数据报首部,不包括数据部分。这样可以减少计算量,同时不采用复杂的 CRC 检验码,而是使用简单的 反码算术运算

反码算术运算:将数据报首部划分为多个 16 位的序列,16 位序列相加之和取反码,写入检验和。接收方再将首部 16 位序列(包含检验和的 16 位)相加之和取反码,结果为 0 则说明数据报正确,否则丢弃。

三、Cisco 模拟器实验

现在做一个简单的实验,模拟两台主机进行通信,然后查看 IP 数据报的格式。

img

实验如图,现在 PC0 发送 ping 命令给 PC1.

img

这就是实际中 IP 数据报的格式,与开始介绍的图一致:

img

这里使用到 ping 命令,自然联想到是基于 ICMP 协议进行通信的。接下来看看 ICMP 协议具体是什么。

四、ICMP 协议

网际控制报文协议就是熟悉的 ICMP 全称

还是先放一个直观容易理解地图片(来源:百度百科)

img

ICMP 报文作为 IP 数据报的数据,加上 IP 数据报首部,组成 IP 数据报被发送出去。

前 4 个字节是固定格式:包括类型、代码、检验和三个字段。

ICMP 报文种类有差错报告报文和询问报文,几种常用的报文类型有:

差错报告报文有 5 种类型:

1、终点不可达

当路由器或主机不能交付数据报时,就向发送方发送源点不可达报文。

2、源点抑制

由于拥塞而丢弃数据,就发送源点抑制报文告知发送方降低放松频率。

3、超时

当 TTL 减少至零时,说明目的接收方没有接收数据报,发送超时报文告知发送方。

4、参数问题

接收方收到的数据首部的一些字段不正确时,发送参数问题报文。

5、改变路由(重定向)

发送方按路由表中的默认路由发送数据给目的主机,因为每个路由器都有一个最佳路由到达每个网络。所以如果该路由不是最佳的,路由器就把新的路由信息发送给源主机,告知下次发送时有更好地路由选择。

询问报文有两种类型:

6、回送请求和回答

上面使用到的 ping 命令就是发送了询问报文,测试目的是否可到达。

7、时间戳请求和回答

请某个主机或路由器回答当前的日期时间,可以用来进行时钟同步和测量时间。

五、ICMP 实践应用

在上面的模拟实验也可以看到 ICMP 报文的内容。

img

使用 ping 命令测试目的主机:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值