数据封包与协议头分析
MAC头
位于数据链路层,包含源MAC地址和目标MAC地址,用于局域网内设备间的直接通信。
IP头
- TTL(生存周期):初始值通常为64,数据包每经过一个网络节点(如路由器)减1。若TTL为0,数据包被丢弃,防止无限循环。
- IP Flag :
- D(Don't Fragment):若置1,禁止分片传输。
- M(More Fragments):若置1,表示后续还有分片;0则为最后一片。
TCP头
- 控制标志位 :
- A(ACK):确认应答。
- P(PSH):推送数据,要求接收方立即处理。
- R(RST):强制断开连接。
- S(SYN):发起连接请求。
- F(FIN):正常终止连接。
UDP头
无连接协议,头部简单,仅包含源端口、目标端口、长度和校验和,不提供可靠性保证。
Wireshark抓包工具使用
启动与设备选择
- Linux系统通过
sudo wireshark启动,选择网络接口:- 本机通信选
loopback。 - 外网通信选
ens33(或类似网卡名)。 - 不确定时可选
any捕获所有流量。
- 本机通信选
过滤条件
- 按IP过滤:
ip.addr == 192.0.2.1 - 按端口过滤:
tcp.port == 80 || udp.port == 80
HTTP协议详解
基本概念
- 用途:传输网页数据,基于TCP实现可靠传递。
- URL结构 :
http://主机名:端口号/路径(默认端口80可省略,如http://news.sohu.com/)。
通信流程
- 请求报文 :文本格式,包含请求行(方法、URL、协议版本)、头部字段(如
Host、User-Agent)、空行及可选正文。 - HTML:超文本标记语言,浏览器解析后渲染为可视化网页。
关键字段示例
-
请求方法:
GET / HTTP/1.1 -
头部示例:
Host: example.com User-Agent: Mozilla/5.0
代码与公式规范示例
若需描述校验和计算(如UDP):
- 校验和公式 :
\sum_{i=1}^{n} (data_word_i \oplus mask)
Python伪代码示例:
python
def calculate_checksum(data):
checksum = 0
for word in data:
checksum += word
return checksum & 0xFFFF