一、ICMP协议
1.1、定义
ICMP(Internet Control Message Protocol,互联网控制消息协议)是一个支持IP层数据完整性的协议,主要用于在IP主机、路由器之间传递控制消息。这些控制消息用于报告IP数据报在传输过程中的错误,或者用于诊断网络问题。
1.2、作用
- 错误报告:当IP数据报在传输过程中发生错误时(如目标不可达、超时、参数问题等),ICMP会发送一个错误报告给发送方。这有助于发送方了解问题所在,并采取相应的措施。
- 诊断工具:ICMP提供了一些诊断工具,如ping命令和traceroute命令。ping命令通过发送ICMP回显请求报文并等待回显应答报文来测试两台主机之间的连通性。traceroute命令则通过发送具有递增TTL(Time To Live)值的IP数据报来跟踪数据包从源主机到目标主机所经过的路由。
1.3、类型
ICMP报文主要分为两大类:ICMP差错报文和ICMP查询报文。根据ICMP报文中的字段类型和编码字段值的不同,将ICMP报文细分许多不同的类型。如下图:
常见类型:
- 终点不可达报文(类型3):IP数据报无法到达目的地时,路由器或主机向源主机发送终点不可达报文。
- 源站抑制报文(类型4):当路由器由于拥塞而丢弃IP数据报时,就发送源站抑制报文,通知源主机降低数据发送速率。
- 重定向报文(类型5):当有到达目的网络更好的路由时,路由器通过发送重定向报文通知源主机。
- 超时报文(类型 11):当IP数据报的TTL值减为0时,路由器会向主机发送超时报文;当分片丢失造成主机无法完成IP数据报的重组时,主机会向源主机发送超时报文。
- 参数出错报文(类型12):当路由器发现IP数据报首部的参数有问题,无法完成对数据报的处理时,就向源主机发送参数出错报文。
- 回声请求(类型8)和回声应答(类型0)报文:这两个报文成对出现,用来验证两台主机之间的可达性。
- 时间戳请求(类型13)和时间戳应答(类型14)报文:它们用来向一个主机查询当前的时间。
- 地址掩码请求(类型17)和地址掩码应答(类型18)报文:它们用来帮助一个主机获得子网掩码。
1.4、报文格式
ICMP协议的报文格式很简单,只有几个字段.
- 类型(Type):
- 占8位,用于指示ICMP报文的类型。
- 例如,类型8代表Echo Request(回声请求),用于测试网络中的数据包是否能够正确传输;类型0代表Echo Reply(回声应答),是Echo Request的响应。
- 代码(Code):
- 占8位,为ICMP消息类型提供额外的细分信息。
- 例如,当Type字段为“Destination Unreachable”(目标不可达)时,Code字段可以进一步指示具体的原因,如网络不可达、主机不可达等。
- 校验和(Checksum):
- 占16位,用于检测报文中的错误。
- 校验和字段对整个ICMP报文进行校验,以确保报文在传输过程中没有被损坏。
- 其他字段:
- 根据不同类型的ICMP报文,可能会包含其他字段。
- 例如,Echo Request和Echo Reply报文包含标识符(Identifier)和序列号(Sequence Number)字段,用于匹配请求和应答。
二、ping测试并分析
2.1、实验步骤
2.1.1、步骤一
打开wiresahrk抓包工具,选择WLAN接口并开始抓包
2.1.2、步骤二
win+R调出命令行界面,并输入ping baidu.com(我这里是ping百度,你可以ping其他网站)
2.1.3、步骤三
返回wireshark工具,停止抓包并以ICMP为筛选字段
2.2、报文分析
第一个报文的序列号为256的某一个倍数,以后的每个报文的序列号在这个基础上增加256。
ping回声请求报文
ping回声应答报文
总结
Ping测试是一种网络诊断工具,它利用ICMP协议来检测网络连通性。Ping命令会向目标主机发送一个ICMP Echo请求报文,然后等待目标主机的响应。如果目标主机可以接收到这个请求并回复,那么就可以认为目标主机与源主机之间存在一条可达的网络路径。
1)测试网络的连通性:通过向目标主机发送小数据包,Ping可以判断网络是否连通。如果目标主机能够接收并响应Ping请求,那么网络连接就是正常的;反之,如果无法收到响应,就说明网络存在问题,需要进一步诊断和排除。
2)测试网络延迟:Ping工具会记录从发送数据包到接收响应的时间,根据这个时间可以衡量网络的延迟情况。延迟越低,网络的响应速度就越快。对于实时性要求高的应用,如在线游戏和视频会议,低延迟是非常重要的。
3)排除网络故障:当网络出现故障时,Ping可以帮助系统管理员进行故障诊断和排除。通过比较电脑和目标主机之间的Ping延迟,可以判断网络中存在的问题,如网络阻塞、丢包等。这样可以快速确定故障点,并采取相应的措施来修复网络故障。
4)确定TCP/IP参数设置:Ping测试可以验证TCP/IP参数是否设置正确,以及网络是否正常运行。通过发送ICMP回显数据包并侦听回显回复数据包,可以验证与一台或多台远程计算机的连接。
5)测试网络带宽:虽然Ping本身并不直接测试网络带宽,但通过向目标计算机发送大量数据包,可以间接地评估网络的带宽。如果发送的数据包数量足够大,网络带宽就会被占用,从而限制其他网络活动。
三、tracert测试并分析
3.1、实验步骤
与ping步骤操作相同,将ping baidu.com 改为tracert 39.156.66.10(这个ip地址为ping百度时的百度地址)
3.2、报文分析
序列号和生存周期
请求和应答报文
总结
Tracert测试和ping 一样,都是一种网络诊断工具,主要用于测试数据包从发送方到目的地的路径,并显示消息在转发时所经过的路由器和网络节点。Tracert基于ICMP(Internet控制消息协议)实现,其工作原理:
1、首先,Tracert会向目标主机发送一个ICMP回显请求数据包,该数据包包含一个时间戳。
2、当数据包到达第一个路由器时,该路由器会将数据包的时间戳记录下来,并将数据包向下一个节点转发。
3、下一个节点收到数据包后,同样会记录时间戳并继续向目标主机转发。
4、此过程会一直持续下去,直到数据包最终到达目标主机。
5、当目标主机收到数据包后,它会发送一个ICMP回显应答数据包回源主机。
6、源主机收到应答数据包后,Tracert会显示每个路由器/节点的IP地址和数据包往返时长(即延迟)。
通过分析显示的路由器IP和延迟信息,可以确定从源主机到目标主机的网络路径及每个节点的性能。同时,Tracert还提供了一些命令行参数,如设置最大跳数、使用特定的数据包大小等,可以更有效地诊断网络问题。
四、IP数据报分片
4.1、概述
IP数据报是TCP/IP协议族中用于在因特网上传输的数据包,是互联网协议(IP)的核心组成部分。它基于无连接的服务模式,屏蔽了下层各种物理子网的差异,向上层提供统一格式的IP数据报。IP数据报采用数据报分组传输的方式,提供的服务是无连接、不可靠的,即不保证数据报能成功到达目的地,任何可靠性必须由上层(例如TCP)提供。
4.2、分片
当要传输的IP报文的大小超过目标网络的最大传输单元(MTU)时,就需要进行IP分片。MTU是指数据链路层所能传输的最大数据单元,不同网络环境的MTU可能不同。例如,在以太网环境中,MTU通常为1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报负载长度大于1472字节(1500字节减去IP头部和UDP头部的大小),就需要进行分片。
4.3、分片原理
IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也可能对IP数据报进行再次分片。因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。
在IP数据报的首部,有特定的字段用于标识和处理分片。其中,16位的标识字段用于唯一记录一个IP包的ID,具有相同ID的IP分片将被重新组装。13位的片偏移字段记录了某IP片相对整个包的位置。3位的标志字段用于表示该分片后面是否还有新的分片,以及是否禁止分片。
4.4、注意事项
- 尽可能少分片:过多的分片会增加传输过程中的复杂性和错误率。
- 一个最大分片可封装的数据字节数最好是8的倍数:这有助于提高传输效率。
- 避免IP分片:在网络编程中,应尽量避免IP分片,因为IP层没有超时重传机制。如果一个分片丢失,将依赖于传输层进行重传,导致所有分片都需要重传,降低传输效率。
4.5、实验步骤
在正式开始前,我们会使用ping来完成数据报分片的实验,可以先查看ping的使用方法。使用win+R调出命令行界面,输入以下命令:
ping/?
可以查看ping的具体使用方法,如下图:
4.5.1、步骤一
打开wireshark抓包工具,进行抓包。
4.5.2、步骤二
win+R调出命令行界面,在命令行界面上输入以下命令:
ipconfig
查看自身网络的网关
4.5.3、步骤三
将步骤二得到的网关地址进行ping操作,输入以下命令:
ping 10.225.64.1 -l 6000 -n 1
其中:
-l 6000
:这个参数实际上是用于指定 ICMP echo 请求数据包的大小。
-n 1
:这个参数指定了发送的 ICMP echo 请求数据包的次数。
4.6、报文分析
将6000字节分成4个数据包
回声请求报文
回声应答报文
注:内容仅为个人意见,有什么不妥或错误的地方,欢迎指出!!!