网络抓包与协议分析
一. 以太网帧格式分析
这是以太网数据帧的基本格式,包含目的地址(6 Byte)、源地址(6 Byte)、类型(2 Byte)、数据(46~1500 Byte)、FCS(4 Byte)。
-
Mac 地址类型
分为单播地址、组播地址、广播地址。
单播地址:是指第一个字节的最低位是 0 的 MAC 地址。
组播地址: 是指第一个字节的最低位是 1 的 MAC 地址。
广播地址:广播地址是发送至网络上所有设备的特殊地址,全为1(FF:FF:FF:FF:FF:FF)。
- OUI(Organizationally-Unique Identifier): 厂商代码
-
头部信息
目的Mac地址:标识帧的接收者,6个字节;
源Mac地址:标识帧的发送者,6个字节;
以太类型:指示帧中数据的类型,2个字节,例如:IPv4 (0x0800)、ARP (0x0806)。
-
长度
以太网帧的头部位14个字节,以太帧尾占4个字节,所搭载的数据长度位461500个字节。总的长度应为641518字节。
-
封装
以太网帧将上层协议的数据封装在帧的数据部分,并通过类型(2 Byte)进行标识。
二. ARP协议分析
2.1 ARP数据包分析
我们通过Wireshark随机抓取一个ARP数据包,并分析其格式:
比如抓到的这个ARP数据包:
-
由于ARP是网络层的协议,故前面14个字节为底层(数据链路层)封装的以太帧头:分别表示目的Mac(广播)、源Mac、类型(0x0806:ARP)。
-
接下来是ARP协议的内容:
-
在最后,有一串0来补全,让数据帧长度满足最小长度64字节。
此处是补全为60个字节,加上以太帧尾4个字节,达到64个字节。
2.2 ARP协议工作过程
当主机 A 需向主机 B 发送数据且在 ARP 缓存中未找到 B 的 IP 与 MAC 对应关系时,A 广播 ARP 请求报文,包含 A 的 IP、MAC 及 B 的 IP。网络中只有 B 响应请求,以单播发回包含自己 IP、MAC 及 A 的 IP、MAC 的应答报文。A 收到应答后将 B 的 IP 与 MAC 对应关系存入 ARP 缓存。
三. ICMP协议分析
ICMP(Internet Control Message Protocol)即互联网控制报文协议,是 TCP/IP 协议族的一个子协议。
通过Ping程序,我们能够很容易地抓取到ICMP数据包。
3.1 ICMP格式:
- Type字段表示ICMP消息的类型;
- Code字段表示ICMP消息类型细分的子类型;
- Checksum字段表示ICMP报文的校验和。
3.2 ICMP抓包
我们可以在命令提示符种Ping某个公网地址,就会产生ICMP报文。
此处的ICMP类型就是Echo请求报文。
3.3 ICMP功能
- 确认IP包是否成功到达目的地址
- 通知在发送过程中IP包被丢弃的原因
四.抓取DNS数据并分析UDP协议
dns是一个应用层协议,其传输层有时会使用TCP协议,有时会使用UDP协议。对于个人用户来说,大部分的使用场景都是UDP协议。
-
UDP使用场景:一般的域名解析查询,例如查询一个网站的 IP 地址等操作,通常使用 UDP 进行通信。
-
TCP使用场景:主要用于DNS服务器同步数据。
抓取DNS数据:
在抓取的DNS数据中,前14个字节为以太帧头,接下来20个字节为IPv4头,接下来8个字节为UDP头,其余的为DNS数据。
UDP协议分析:
UDP头长度为8个字节,依次为源端口(2 Byte)、目的端口(2 Byte)、数据总长度(2 Byte)、校验和(2 Byte)。
五. TCP协议分析
抓取TCP报文段:
-
比如抓到的这个TCP数据段,可以观察到源端口、目的端口、序号、确认序号等信息。
-
但我们也发现现在呢不再是6个标志位,而是9个标志位。我们抓取的是
FIN
、ACK
为1的数据段,这应该是在延时应答与捎带应答的机制下,被动接收断开连接的一方将“两次挥手”合并导致的。 -
此处抓到的TCP数据段,头部长度为20个字节,即没有选项。但我们依然可以看到一些选项的踪迹,比如此处的窗口扩展因子 ( Window size scaling factor)就是选项的一部分,因为没有选项,故此处是未知的。
六. HTTP协议分析
为了更方便的抓取到HTTPS的数据包,我们使用Fiddler进行抓包,比如抓到的学校的办事大厅的数据包:
HTTP的头部是以文本形式 (键值对) 进行组织的,比如此处用到了GET方法、协议是HTTP/1.1、Host是ehall.dlut.edu.cn。也可以看到客户端携带Cookie作为个人身份标识来访问服务器。
同时,我们也能看到返回的HTTP数据,第一行依次为 协议、状态码、状态。
七. 思考及感悟
- 使用了显示过滤器后,Wireshark 的抓包工作量会减少吗?
不会,Wireshark 的显示过滤器是在数据包已经被捕获后,对已捕获的数据包进行筛选显示,它并不影响抓包的过程。
- MAC 帧的长度和 IP 数据报的长度有怎样的关系?
MAC帧是在IP数据包的头部和尾部分别加上帧头(14 Byte)和帧尾(4 Byte)。
MAC 帧长度在以太网中最小 64 字节,最大 1518 字节。IP 数据报长度可变,若过长可能需分片封装在多个 MAC 帧中;若过短可能需填充以满足 MAC 帧最小长度要求。
- 心得感悟
常常使用Wireshark、Fiddler等抓包工具有助于我们更好的理解网络中各个层次的结构,让我们对网络有更好的理解。