大家好,又见面了,我是你们的朋友全栈君。
目录
捕获准备:
启动wireshark录制数据包,打开命令行窗口输入ping www.sina.com.cn。
Wireshark已记录下报文,在过滤器输入 ip.addr == 120.192.83.125过滤报文。
ICMP的相关知识:
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位) ,8bits类型和8bits代码字段一起决定了ICMP报文的类型。
类型代码 : 类型描述
- 0 : 响应应答(ECHO-REPLY)
- 3 : 不可到达
- 4 : 源抑制
- 5 : 重定向
- 8 : 响应请求(ECHO-REQUEST)
- 11 : 超时
- 12 : 参数失灵
- 13 : 时间戳请求
- 14 : 时间戳应答
- 17 : 地址掩码请求
- 18 : 地址掩码应答
- 30 : 路由跟踪
常见的 type类型字段(8位)、code代码字段(8位) 组合有:
- 类型0、代码0:回应应答。
- 类型3、代码0:网络不可达
- 类型3、代码1:主机不可达
- 类型5、代码1:为主机重定向数据包
- 类型8、代码0:回应
- 类型11、代码0:传输中超出TTL(常说的超时)
简单类型分析:
(1)响应请求
我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的:tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。
(2)目标不可到达、源抑制和超时报文
这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。
16bits校验和字段: 包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。
报文分析:
- PING 响应请求报文
选取第1条报文分析,右键然后点击”Follow TCP Stream”(跟踪流)。这样做的目的是为了得到与浏览器打开网站相关的数据包,
从报文格式中可以看出ICMP协议是TCP/IP协议族的一个子协议。
IP报文格式:
IP报文版本号是IPV4,
首部长度:20 bytes,
数据包总长度:60,
标示符:0x53ab,
标志:0x00,
比特偏移:0x00,
寿命:64,
上层协议:ICMP,
首部校验和:0xd7de,并且是正确的。
源IP地址:172.26.214.223
目的IP地址:120.192.83.125
ICMP报文格式:
类型:8 (回显请求) 代码/编码:0
校验和:0x4716 (正确的校验和)
标示符(大端顺序):1(0x0001);
标示符(小端顺序):256(0x0100);
序列号(大端顺序):1605(0x0645);
序列号(小端顺序):17670(0x4506)。
报文统计和报文具体内容可以用wireshark对应。发现标示符LE与BE都指向二进制报文内容的0x0001,后来在网上搜索是大小端问题,window系统与Linux系统发出的ping报文(主要指ping应用字段而非包含IP头的ping包)的字节顺序不一样(windows为LE:little-endian byte order,Linux为BE:big-endian)。可以看出报文其实就是一些比特流,网络协议就是解释它的东西。
其ICMP Type为8,与知识背景相符,是请求报文。
- PING 响应应答报文
选取第2条报文分析:
其ICMP Type为0。
由上两图可以看出分别经历了四次响应请求和响应应答,数据长度为32bytes,符合ping命令行为。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131235.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...