目录
一、前言
二、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协议。
这段时间写关于计算机网络方面的知识,我的初衷是对以前学习过的内容进行一个系统的整理,梳理思路,将零散的知识碎片集成一个相对完善的知识体系,这样能够更好地去理解知识。最近我领悟了一个道理:不要急着往前走,偶尔回顾自己所学所经历,善于总结,才能走得更轻松更远!哈哈哈,尝试着文学式表达感悟,似乎与理工科格格不入,不过有时候会理工科的文学更有趣。
进入正题,看完这篇能学到什么呢?
值得一提,我觉得 学习IP数据报和ICMP协议的基本内容 看完这篇就够了!
学习一个知识,我们往往倾向于能够直观地感知,而不喜欢抽象的概念,所以这里我先放上图片(来源:百度百科)。
先看看IP数据报长什么样子,我们才能更好地理解它。
这张图我觉得是最清晰直观的,一眼就可以发现IP数据报的格式和基本功能内容,下面就来瞧瞧每个区域分别负责什么。
一个IP数据报由首部和数据两个部分组成。首部的前部分属于固定部分,占20个字节;后面部分属于可变部分,长度时可变的。
首部固定部分主要字段解析:
从图中可以看到,版本字段占4位。记录着通信双方使用的IP协议版本,比如IPv4、IPv6,目前广泛使用的是IPv4。
占4位,表示的单位为4字节,比如1111(十进制的15)就代表首部长度为60字节(15*4=60).以4字节的整数倍划分,不足则填充。最常用的首部长度为0101(20字节)。
占8位,用以获得更好的服务。实际中未使用。
即首部长度和数据长度之和。占16位。因此,最大长度可知为16位都是1,就是65535字节。
在IP层下层数据链路层存在自己的帧格式,帧格式的数据字段最大传送单元(MTU)是1500字节。尽可能长的数据报能够提高传输效率,实际中数据报长度很少大于1500字节。所以,IP标准规定:所有主机和路由器的IP数据报长度不能小于576字节。
如果数据报长度超过MTU,则将进行分片后再传送,与后面的片偏移相关。然后总长度就成了分片后每个分片的首部和数据的长度之和。
占16位。在实际IP中,维持了一个计数器,每产生一个数据报,计数其加1,存放到该字段。IP是无连接服务,不存在按序接收问题,该标识不是序号,而是在进行分片之后对相同的数据报进行标识,属于同一个数据报的标识相同,以便到达目的后被重新封装为原来的数据报。
占3位。目前使用2两位有意义的。
最低位:MF(More Fragment)还有分片,MF=0时说明是最后一个分片。
中间位:DF(Don‘t Fragment)不能分片,DF=0时才能分片。
占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
很容易就计算出每个分片的片偏移。
TTL(Time To Live)占8位。最大值255.每个数据报都有TTL,防止被错误路由在网络中不断循环,消耗网络资源。在实际中,TTL表示的是跳数而不是时间,指明数据报在网络中最多可经过多少个路由器。
占8位。指明数据报携带的数据是使用什么协议,方便目的主机的IP层将数据交给对应的程序处理,这里列举几个。
协议 | ICMP | IGMP | TCP | UDP | OSPF |
字段值 | 1 | 2 | 6 | 17 | 89 |
占16位。只校验数据报首部,不包括数据部分。这样可以减少计算量,同时不采用复杂的CRC检验码,而是使用简单的反码算术运算。
反码算术运算:将数据报首部划分为多个16位的序列,16位序列相加之和取反码,写入检验和。接收方再将首部16位序列(包含检验和的16位)相加之和取反码,结果为0则说明数据报正确,否则丢弃。
现在做一个简单的实验,模拟两台主机进行通信,然后查看IP数据报的格式。
实验如图,现在PC0发送ping命令给PC1.
这就是实际中IP数据报的格式,与开始介绍的图一致:
这里使用到ping命令,自然联想到是基于ICMP协议进行通信的。接下来看看ICMP协议具体是什么。
网际控制报文协议就是熟悉的ICMP全称。
还是先放一个直观容易理解地图片(来源:百度百科)
ICMP报文作为IP数据报的数据,加上IP数据报首部,组成IP数据报被发送出去。
前4个字节是固定格式:包括类型、代码、检验和三个字段。
ICMP报文种类有差错报告报文和询问报文,几种常用的报文类型有:
差错报告报文有5种类型:
当路由器或主机不能交付数据报时,就向发送方发送源点不可达报文。
由于拥塞而丢弃数据,就发送源点抑制报文告知发送方降低放松频率。
当TTL减少至零时,说明目的接收方没有接收数据报,发送超时报文告知发送方。
接收方收到的数据首部的一些字段不正确时,发送参数问题报文。
发送方按路由表中的默认路由发送数据给目的主机,因为每个路由器都有一个最佳路由到达每个网络。所以如果该路由不是最佳的,路由器就把新的路由信息发送给源主机,告知下次发送时有更好地路由选择。
询问报文有两种类型:
上面使用到的ping命令就是发送了询问报文,测试目的是否可到达。
请某个主机或路由器回答当前的日期时间,可以用来进行时钟同步和测量时间。
在上面的模拟实验也可以看到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博客:https://csdn-czh.blog.csdn.net/article/details/115956836