Wireshark网络协议抓包解析(一)ping www.baidu.com 都发生了什么?

Ping baidu过程中使用了ICMP协议
ICMP(Internet Control Message Protocol,互联网控制消息协议)是网络层的一个核心协议,主要负责在IP主机、路由器之间传递控制消息。这些控制消息用于诊断网络问题、管理网络设备等。ICMP协议的主要功能包括错误报告,当IP数据报无法到达目的地时,路由器或目的主机会向源主机发送ICMP错误报告报文,告知出错的原因。
以Ping为例,ICMP的工作流程可以这样理解:Ping命令通过发送ICMP回送请求报文(Echo Request)到目标主机,目标主机收到请求后,会发送一个回送应答报文(Echo Reply)。Ping会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。这个过程本质上是ICMP数据包的发送与解析流程。
ICMP报文格式主要分为两种报文:一类是通知出错原因,另一类是用于诊断查询。在Ping操作中,使用的是ICMP回显请求和应答报文。ICMP回显请求报文(类型值为8)用于检查特定节点的IPv4连接以排查网络问题,而节点发送回显答复消息响应ICMP回显消息(类型值为0)

![]()


如图No 42 192.168.76.18给出请求,在info处(reply in43)告知对方响应时No应该给43。
157.148.69.74响应时,告知对方,响应的是NO 42的请求。
通过序号确认请求和回复。
解析
以NO42数据包为例


报文结构:
-
帧信息(Frame):
- 显示了数据包的总长度(74字节)和捕获长度(592位,即74字节)。
-
数据链路层(Ethernet II):
- 源MAC地址(Src): Intel_a8:b8:5d (c0:3c:59:a8:b8:5d)
- 目标MAC地址(Dst): 3e:d1:d2:ce:e3:98
-
网络层(Internet Protocol Version 4, IPv4):
- 版本(Version): 4,表示这是一个IPv4数据包。
- 头部长度(Header Length): 20字节。
- 总长度(Total Length): 60字节,包括头部和数据。
- 标识符(Identification): 0x29ec (10732),用于数据包的重组。
- 生存时间(Time to Live, TTL): 128,表示数据包在网络中可以经过的最大路由器数量。
- 协议(Protocol): ICMP (1),表示这是一个ICMP数据包。
- 源IP地址(Src): 192.168.76.18
- 目标IP地址(Dst): 157.148.69.74
-
传输层(Internet Control Message Protocol, ICMP):
- 类型(Type): 8,表示这是一个Echo(ping)请求。
- 代码(Code): 0,对于Echo请求,代码通常为0。
- 校验和(Checksum): 0x4d56 [correct],用于错误检查。
- 标识符(Identifier): 1 (0x0001),用于匹配请求和回复。
- 序列号(Sequence Number): 5 (0x0005),用于标识发送的Ping请求的顺序。
- 数据(Data): 32字节,通常包含用于测试的填充数据。
-
数据(Data):
- 显示了ICMP数据包的数据部分,这里是32字节的填充数据,用于测试网络连接。
详解
帧信息(Frame Information):

帧编号(Frame Number):42
帧长度(Frame Length):74字节(592位)
捕获长度(Capture Length):74字节(592位)
到达时间(Arrival Time):显示了数据包被捕获的具体时间。
以太网信息(Ethernet II):

源MAC地址(Src):Intel_a8:b8:5d (c0:3c:59:a8:b8:5d)
目标MAC地址(Dst):3e:d1:d2:ce:e3:98
IP协议信息(Internet Protocol Version 4):

源IP地址(Src):192.168.76.18
目标IP地址(Dst):157.148.69.74
版本(Version):4
头部长度(Header Length):20字节
总长度(Total Length):60字节
标识符(Identification):0x29ce (10732)
生存时间(Time to Live, TTL):128
协议(Protocol):ICMP (1)
ICMP协议信息(Internet Control Message Protocol):

类型(Type):8(Echo request,即Ping请求)
代码(Code):0
校验和(Checksum):0x0d56(正确)校验和是一个错误检测机制,用于确保ICMP消息在传输过程中没有被损坏。如果校验和显示为[correct],这意味着收到的数据包在到达目的地时是完整的。
标识符(Identifier):1280 (0x0500) 可以帮助区分不同的Ping会话或请求。
序列号(Sequence Number):5 (0x0005)
序列号(Sequence Number):
序列号用于标识发送的Ping请求的顺序。它也是一个16位的数字,通常从0开始递增。序列号可以帮助发送方识别收到的回复是否对应于特定的请求。
“seq=5/1280”![]()
大端序(BE: Big Endian):5 (0x0005),表示序列号在大端序格式下的值。大端序是一种字节序,其中最重要的字节存储在最低的内存地址。
小端序(LE: Little Endian):1280 (0x0500),表示序列号在小端序格式下的值。小端序是另一种字节序,其中最低有效字节存储在最低的内存地址。
请求帧
![]()
响应帧(Response frame):
43,这表示与此请求对应的ICMP回复(Echo Reply)数据包的帧编号。
数据(Data):

ICMP Echo Request数据包通常包含一些填充数据,这些数据没有特定的含义,主要用于测试网络连接。在Ping操作中,这些数据可以是任意的,但通常包含可读的ASCII字符,如连续的字母或数字。
这里显示了ICMP数据包的数据部分,共有32字节。
数据内容以十六进制格式显示:616263646566676869706a6b6c6d6e6f707172737475767778797a...,这通常是为了测试而填充的模式,可以转换为ASCII字符表示为"abcdefghijklmnopqrstuvwxyzabcdefgh"。
问题0:seq是什么?有什么用?
答:序列号(seq)是一个重要的参数,它用于标识发送的ICMP回声请求消息的顺序,确保回复能够与请求正确匹配。
问题1:为什么要有数据包编号,为什么是“reply in 42”、“reply in 46”、“reply in 53”、“reply in 56”?
答:在Wireshark抓包中,“reply in 42”、“reply in 46”、“reply in 53”、“reply in 56”这样的标记表示的是数据包的回复关系。这些数字对应于数据包列表中的编号,表明某个数据包是对之前某个编号数据包的回复。数据包编号是Wireshark为了方便用户追踪和识别数据包而自动分配的,它按照捕获顺序递增
问题2:为什么要发四次请求?
答:发送四次请求是为了进行网络连通性测试。Ping命令通常发送一系列数据包到目标地址,然后等待回复。通过比较发送和接收的数据包,可以计算出往返时间(RTT),从而评估网络延迟。发送多个数据包还可以帮助识别网络中的潜在问题,比如丢包率。
问题3:每个请求都有一个特定的标识符起什么作用?
答:每个请求都有一个特定的标识符(在这个例子中是id=0x0001),这个标识符用于区分不同的Ping会话。当网络设备或主机收到ICMP Echo请求时,它会使用相同的标识符来发送回复。这样,发送方就可以将回复与相应的请求匹配起来,确保数据的完整性和准确性。标识符还有助于在网络中区分来自不同源的Ping请求,尤其是在多播或广播场景中
问题4:这里ttl是什么有什么用处?
答:TTL(Time to Live,生存时间)是一个网络术语,用于限制IP数据包在计算机网络中的存在时间。TTL的主要作用是避免IP包在网络中的无限循环和收发,节省了网络资源,并能使IP包的发送者能收到告警消息。每当数据包经过一个路由器时,其TTL值就会被减一。当TTL值减少到0时,路由器会丢弃该数据包,并向数据包的发送者发送一个ICMP消息,告知跃点数超限。
-
TTL=128:这通常是一个初始的TTL值,表示数据包在发送时被设置为可以经过128个路由器。这个值是发送方(在这种情况下是192.168.76.18)的系统默认设置。
-
TTL=63:当数据包从157.148.69.74回复到192.168.76.18时,TTL值为63。这表明在数据包从157.148.69.74返回的过程中,它已经经过了一些路由器,TTL值从初始值(可能是128或更高)减到了63。这可以用于推断网络路径中的路由器数量。
更多推荐
所有评论(0)