计算机网络学习:网络层IP数据报、ICMP协议 看一篇就够了!(含具体实验演示)

195 阅读11分钟

目录

一、前言

二、IP数据报

1、版本

2、首部长度

3、区分服务

4、总长度

5、标识

6、标志

7、片偏移

8、生存时间

9、协议

10、首部检验和

三、Cisco模拟器实验

四、ICMP协议

1、终点不可达

2、源点抑制

3、超时

4、参数问题

5、改变路由(重定向)

6、回送请求和回答

7、时间戳请求和回答

五、ICMP实践应用

一、前言

在上一篇中开始了网络层的探索,《计算机网络学习:分组转发和路由选择、ARP协议》主要记录了网络层的核心功能:分组转发和路由选择。同时也讲解了重要的ARP逆地址解析协议。网络层内容非常丰富,这次准备对TCP/IP体系中的两个重要标准进行详细记录:IP数据报和ICMP协议

这段时间写关于计算机网络方面的知识,我的初衷是对以前学习过的内容进行一个系统的整理,梳理思路,将零散的知识碎片集成一个相对完善的知识体系,这样能够更好地去理解知识。最近我领悟了一个道理:**不要急着往前走,偶尔回顾自己所学所经历,善于总结,才能走得更轻松更远!**哈哈哈,尝试着文学式表达感悟,似乎与理工科格格不入,不过有时候会理工科的文学更有趣。

进入正题,看完这篇能学到什么呢?

  1. IP数据报格式和首部字段的功能;
  2. Cisco实验验证实际通信过程中IP数据报具体内容;
  3. ICMP协议以及报文内容;
  4. ICMP在实际中的应用。

值得一提,我觉得 学习IP数据报和ICMP协议的基本内容 看完这篇就够了!

二、IP数据报

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

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

这张图我觉得是最清晰直观的,一眼就可以发现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数据报的格式。

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

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

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

四、ICMP协议

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

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

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

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

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

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

1、终点不可达

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

2、源点抑制

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

3、超时

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

4、参数问题

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

5、改变路由(重定向)

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

询问报文有两种类型:

6、回送请求和回答

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

7、时间戳请求和回答

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

五、ICMP实践应用

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

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

在自己电脑的命令提示符cmd测试:

ping www.csdn.net

可以看到询问报文应答的一些信息。

另外,tracert命令可以探测路由信息,也是发送ICMP回送请求报文

tracert www.csdn.net

通过最多 30 个跃点跟踪
到 www.csdn.net [39.105.14.128] 的路由:

这次详细记录了网络层IP数据报和ICMP协议的内容,直观的演示和实践可以更好地掌握这方面的知识。

这段时间写关于计算机网络方面的知识,我的初衷是对以前学习过的内容进行一个系统的整理,梳理思路,将零散的知识碎片集成一个相对完善的知识体系,这样能够更好地去理解知识。最近我领悟了一个道理:**不要急着往前走,偶尔回顾自己所学所经历,善于总结,才能走得更轻松更远!**哈哈哈,尝试着文学式表达感悟,似乎与理工科格格不入,不过有时候会理工科的文学更有趣。

你是不是觉得 学习IP数据报和ICMP协议的基本内容 看完这篇就够了呢!

如果觉得不错欢迎“一键三连”哦,点赞收藏关注,评论提问建议,欢迎交流学习!一起加油进步!

本文首发我的CSDN博客:csdn-czh.blog.csdn.net/article/det…