目录
引言
安装抓包工具
抓包基础概念
抓包步骤
流程
抓包工具头的分析
14.3 以太网的完整帧格式
粘包与拆包现象解析及解决方案
发生原因
解决方案
14.3.1以太网头
14.3.2 IP头
14.3.3 UDP头
14.3.4 TCP头
引言
Wireshark是一款功能强大的开源网络协议分析器,它允许用户捕获和查看网络接口上传输的详细数据包信息。无论是网络故障排查、安全分析还是开发调试,Wireshark都能提供深入的网络洞察。本文旨在为初学者提供Wireshark的基本使用方法,帮助快速掌握网络抓包技巧。
安装抓包工具
- Linux环境下:
- 打开终端,输入命令:
sudo apt-get install wireshark
- 打开终端,输入命令:
- Windows环境下:
- 下载并安装Wireshark或其他图形界面抓包工具,如Shark for Windows(俗称“小飞机”)。
官网地址:Wireshark · Download
抓包基础概念
抓包,实质上是捕获网络接口上流经的所有数据包,以进行网络通信分析。为了保证数据包的完整捕获,操作者需要具备对网络接口的完全访问权限,因此,在Linux环境下启动Wireshark时,常需要使用sudo
以获得管理员权限。
抓包步骤
- 运行服务器:在Linux虚拟机上启动服务器,准备接收来自外部的网络请求。
- 启动抓包工具:在另一台计算机上(如Windows环境),打开Wireshark或类似工具。
- 选择网络接口:在抓包工具中选择正确的网络接口,准备开始捕获数据包。
- 过滤无关数据包:利用抓包工具的过滤功能,如Wireshark中的Display Filters,排除无关的数据包,聚焦于感兴趣的通信数据。
- 模拟客户端通信:在抓包工具所在的操作系统上,如Windows,使用小飞机或其他客户端软件,向Linux服务器发送请求,触发网络通信。
- 分析捕获的数据包:观察抓包工具中显示的数据包列表,分析通信细节,如源地址、目的地址、协议类型、数据负载等信息。
流程
抓包工具头的分析
14.3 以太网的完整帧格式
对于网络层最大数据帧长度是1500字节(MTU: 最大传输单元)
对于链路层最大数据长度是1518字节(1500(网络层)+14(以太网)+4(CRC检错))
粘包与拆包现象解析及解决方案
发生原因
TCP粘包或拆包的情况主要由以下几个因素引起:
- 发送缓冲区空间限制:当要发送的数据量超过TCP发送缓冲区的剩余空间时,数据将被拆分成多个数据包进行发送。
- MSS约束:若单次待发送数据量大于MSS(最大报文段长度),TCP协议会自动将数据拆分,确保每个数据包都不超过MSS。
- 数据量小于缓冲区大小:如果发送的数据量小于TCP发送缓冲区的容量,且发送频率高,可能导致多次写入的数据在一次发送中被合并,从而产生粘包现象。
- 接收端处理延迟:接收端应用层未能及时处理接收缓冲区中的数据,导致新到达的数据包与前一个数据包合并,形成粘包。
解决方案
针对粘包与拆包问题,常见解决策略包括:
- 包首部添加长度信息:发送端为每个数据包添加包首部,其中至少包含数据包长度信息。接收端通过读取包首部的长度字段,准确识别每个数据包的边界。
- 固定数据包长度:将数据包统一封装为固定长度,不足部分通过填充(如使用
\0
字符)达到预设长度。接收端按固定长度读取数据,自然区分各个数据包。 - 数据包间设置边界标志:在数据包之间插入特殊符号作为边界标识,接收端依据这些边界符号将连续的数据流拆分成独立的数据包。
14.3.1以太网头
以太网中封装了 目的mac地址 以 及 源mac地址, 还有ip类型, 以太网又称之为mac头 -快递员
切换网络时, ip地址会改变, mac地址不会改变
14.3.2 IP头
笔试题: type类型都有哪些?
0x0800 只接收发往本机的mac的ip类型的数据帧
0x0806 只接收发往本机的ARP类型的数据帧
ARP: ARP协议用于将IP地址解析为MAC地址。
当一个计算机需要向另一个计算机发送数据时,它需要知道目标计算机的MAC地址,而不是IP地址。
RARP: RARP协议则是与ARP相反的过程,它用于将MAC地址解析为IP地址。
0x8035 只接受发往本机的RARP类型的数据帧
0x0003 接收发往本机的MAC所有类型: ip,arp,rarp数据帧, 接收从本机发出去的数据帧,
当打开混杂模式打开的情况下,会接收到非发往本地的MAC数据帧
14.3.3 UDP头
14.3.4 TCP头
Seq: 序列号 用于 非应答包 的数据段
Ack: 应答号 用于应答 非应答包
非应答包: SYN握手包 FIN挥手包 PSH数据报
在 PSH中: Ack = Seq + len;
在 SYN和FIN中: Ack = Seq + 1;
SYN: 握手包, 建立连接的时候才会产生的包
FIN: 挥手包, 断开连接的时候才会产生的包
PSH: 数据包, 传输数据的时候才会产生的包
ACK: 应答包 应答时产生