网络编程学习笔记(数据封包拆包 + 协议格式 + 网络工具 + HTTP 协议)

一、数据的封包与拆包过程

1. 核心概念

网络传输中,原始应用数据 无法直接在物理介质中传输,必须遵循TCP/IP 五层 / 四层模型 进行层层封包 (添加协议头);接收方则层层拆包(剥离协议头),最终还原原始数据。

  • 封包:自上而下,每一层为数据添加对应协议头(部分协议含尾部)
  • 拆包:自下而上,每一层剥离对应协议头,提取有效数据

2. 完整流程(以 TCP 传输为例)

层级 封包操作(添加协议头) 拆包操作(剥离协议头) 核心数据载体
应用层 生成原始数据,添加应用层协议头 剥离应用层协议头,获取原始数据 应用层数据包
传输层(TCP) 添加 TCP 首部,形成 TCP 报文段 剥离 TCP 首部,提取应用层数据 TCP 报文段
网络层(IP) 添加 IP 首部,形成 IP 数据报 剥离 IP 首部,提取 TCP 报文段 IP 数据报
数据链路层 添加 MAC 帧首部 + 尾部,形成以太网帧 剥离 MAC 帧首尾,提取 IP 数据报 以太网 MAC 帧
物理层 转为比特流,通过介质传输 转为 MAC 帧,传递给数据链路层 比特流

3. 核心作用

  • 协议头:标识数据来源、目的地、协议类型、数据长度、校验信息等,是跨设备 / 跨网络传输的核心依据;
  • 拆包:必须严格遵循协议头格式,否则无法正确提取有效数据,是网络编程解析数据包的基础。

二、核心协议格式(必学:MAC 帧 / IP 数据报 / TCP 报文段)

(一)以太网 MAC 帧结构(数据链路层)

用于局域网内设备间数据传输,是 TCP/IP 协议的底层载体。

1. 整体结构(总长度:64~1518 字节)
组成部分 长度 核心字段说明
首部 14 字节 1. 目的 MAC 地址(6 字节):接收方物理地址(唯一标识局域网设备)2. 源 MAC 地址(6 字节):发送方物理地址3. 帧类型(2 字节):标识上层协议(0x0800=IP,0x0806=ARP)
数据部分 46~1500 字节 上层传递的有效数据(如 IP 数据报);若数据不足 46 字节,自动填充至 46 字节
尾部 4 字节 CRC 校验码:循环冗余校验,用于检测数据传输过程中是否出现丢失、错误
2. 结构示意图
复制代码
+-----------------+-----------------+-----------------+-----------------+
| 目的MAC(6B) | 源MAC(6B)  | 帧类型(2B) | 数据(46~1500B) | CRC(4B)  |
+-----------------+-----------------+-----------------+-----------------+

(二)IP 数据报格式(网络层)

用于跨网络(互联网) 数据传输,是 TCP/UDP 数据的载体,首部长度可变(20~60 字节)。

1. 固定首部(20 字节,核心必记)
字段名 位数 核心说明
版本 4 位 IP 协议版本:IPv4=4,IPv6=6
首部长度 4 位 单位:4 字节;最小值 5(20 字节),最大值 15(60 字节)
服务类型 8 位 区分数据优先级、传输类型(如低延迟、高可靠性)
总长度 16 位 IP 数据报总长度(首部 + 数据),最大 65535 字节
标识 16 位 用于分片重组,标识同一 IP 数据报的分片
标志位 3 位 控制分片:DF=1 禁止分片,MF=1 表示后续还有分片
片偏移 13 位 标识分片在原数据报中的位置
TTL(生存时间) 8 位 最大传输跳数,每经过路由器减 1,为 0 则丢弃(防循环传输)
协议 8 位 标识上层协议:6=TCP,17=UDP,1=ICMP
校验和 16 位 校验 IP 首部完整性,校验失败则丢弃
源 IP 地址 32 位 发送方设备的 IP 地址(如 192.168.1.100)
目的 IP 地址 32 位 接收方设备的 IP 地址(如 180.101.49.11)
2. 可变部分(0~40 字节)

可选字段:用于网络测试、安全认证等,长度为 4 字节的整数倍。

3. 结构示意图
复制代码
+----------------+----------------+----------------+----------------+
| 版本(4) | 首部长度(4) | 服务类型(8) | 总长度(16) |
+----------------+----------------+----------------+----------------+
| 标识(16) | 标志(3) | 片偏移(13) | TTL(8) | 协议(8) | 校验和(16) |
+----------------+----------------+----------------+----------------+
| 源IP地址(32位) |
+----------------+----------------+
| 目的IP地址(32位) |
+----------------+----------------+
| 可变部分(0~40B) | 数据部分(可变) |
+----------------+----------------+

(三)TCP 报文段首部格式(传输层)

TCP 是面向连接、可靠传输 的协议,报文段由首部(20~60 字节)+ 数据组成,是 HTTP 等应用层协议的传输载体。

1. 固定首部(20 字节,核心必记)
字段名 长度 核心说明
源端口号 16 位 发送方应用程序端口(如 80=HTTP,443=HTTPS)
目的端口号 16 位 接收方应用程序端口
序号(Sequence) 32 位 标识报文段在发送数据流中的位置,用于可靠传输、有序重组
确认号(Ack) 32 位 期望接收的下一个字节序号,用于确认对方已接收数据
首部长度 4 位 单位:4 字节;最小值 5(20 字节),最大值 15(60 字节)
保留位 6 位 预留,暂未使用,置 0
标志位 6 位 核心标志:URG(紧急指针有效)、ACK(确认号有效)、PSH(推送数据)、RST(重置连接)、SYN(建立连接)、FIN(关闭连接)
窗口大小 16 位 接收方允许接收的字节数(流量控制核心)
校验和 16 位 校验 TCP 首部 + 数据的完整性
紧急指针 16 位 标识紧急数据的最后一个字节位置(URG=1 时有效)
2. 可变部分(0~40 字节)

可选字段:用于扩展功能(如时间戳、窗口缩放),长度为 4 字节的整数倍。

3. 结构示意图
复制代码
+----------------+----------------+----------------+----------------+
| 源端口(16) | 目的端口(16) |
+----------------+----------------+
| 序号(32) |
+----------------+----------------+
| 确认号(32) |
+----------------+----------------+
| 首部长度(4) | 保留(6) | 标志位(6) | 窗口大小(16) |
+----------------+----------------+----------------+----------------+
| 校验和(16) | 紧急指针(16) |
+----------------+----------------+
| 可变部分(0~40B) | 数据部分(可变) |
+----------------+----------------+

三、常用网络测试工具

1. ping

  • 作用 :测试本机与目标设备的连通性,基于 ICMP 协议;
  • 核心参数-c(指定发送次数)、-t(持续发送,Windows)、-i(指定发送间隔);
  • 原理:发送 ICMP 回显请求,目标返回回显应答,通过丢包率、延迟判断网络质量。

2. ipconfig / ifconfig

  • 作用:查看本机网络配置(IP 地址、子网掩码、网关、MAC 地址);
  • 区别:ipconfig(Windows)、ifconfig(Linux/macOS)。

3. telnet

  • 作用 :测试TCP 端口连通性(如 HTTP 80、SSH 22),也可用于简单的文本协议交互;
  • 用法telnet 目标IP 端口,连接成功则端口开放,失败则关闭。

4. netstat

  • 作用:查看本机网络连接、端口监听、路由表等;
  • 核心参数-a(所有连接)、-n(数字格式显示)、-t(TCP 连接)、-u(UDP 连接)。

5. curl

  • 作用:命令行 HTTP/HTTPS 请求工具,用于测试接口、下载文件;
  • 用法curl 网址(发送 GET 请求)、curl -X POST -d "数据" 网址(发送 POST 请求)。

6. 抓包工具(重点:Wireshark)

  • 作用:捕获、分析网络数据包,可视化查看 MAC 帧、IP 数据报、TCP 报文段、HTTP 报文;
  • 核心功能 :过滤数据包(如tcp.port==80过滤 HTTP)、协议解析、数据包详细信息查看;
  • 应用场景:排查网络故障、分析 HTTP 请求 / 响应、调试网络程序。

四、HTTP 协议(超文本传输协议)

HTTP 是应用层协议 ,基于 TCP(默认端口 80),用于万维网(WWW)数据传输,无状态(服务器不记录客户端状态)。

1. 万维网(WWW)核心

  • 组成:Web 服务器(存储资源)、Web 浏览器(请求资源)、HTTP 协议(传输规则);
  • 资源定位:互联网上资源的完整地址,唯一表示某个资源,通过 URL 统一标识网络资源(如网页、图片、接口)。

2. URL 格式(统一资源定位符)

标准格式协议://主机名[:端口]/路径?查询参数#片段

  • 示例:https://www.baidu.com/s?wd=HTTP#1
  • 字段说明:
    • 协议:http/https(加密 HTTP);
    • 主机名:服务器域名 / IP(如www.baidu.com);
    • 端口:可选,默认 80(HTTP)、443(HTTPS);
    • 路径:服务器资源路径(如/s);
    • 查询参数:?key=value,用于传递参数;
    • 片段:#,客户端本地跳转,不发送给服务器。

3.超文本传输协议http

作用:保证服务器准确无误的将资源传给客户端(传文本、图片、视频等)。

4.超文本标记语言HTML

作用:定义网页的结构和内容(绘制网页)。

3. HTTP 请求报文格式

客户端向服务器发送的请求数据,由请求行、请求头、空行、请求体四部分组成。

示例(GET 请求)
复制代码
GET /s?wd=HTTP HTTP/1.1  // 请求行:方法 路径 协议版本
Host: www.baidu.com     // 请求头:主机名
User-Agent: Chrome/120.0 // 请求头:浏览器信息
Accept: text/html       // 请求头:接收的数据类型
                       // 空行(分隔头和体)
// 请求体(GET请求通常为空,POST请求有数据)
核心字段:
  • 请求方法:GET(查询数据)、POST(提交数据)、PUT(修改)、DELETE(删除);
  • 协议版本:HTTP/1.1(主流)、HTTP/2。

4. HTTP 响应报文格式

服务器向客户端返回的响应数据,由状态行、响应头、空行、响应体四部分组成。

示例(成功响应)
复制代码
HTTP/1.1 200 OK          // 状态行:协议版本 状态码 状态描述
Server: nginx            // 响应头:服务器信息
Content-Type: text/html   // 响应头:数据类型
Content-Length: 1024      // 响应头:数据长度
                       // 空行
<!DOCTYPE html>...       // 响应体:返回的网页/数据
核心状态码(必记):
  • 2xx(成功):200(请求成功)、201(创建成功);
  • 3xx(重定向):301(永久重定向)、302(临时重定向);
  • 4xx(客户端错误):404(资源不存在)、403(权限拒绝);
  • 5xx(服务器错误):500(服务器内部错误)、502(网关错误)。

5. HTTP 抓包实操(Wireshark)

  1. 打开 Wireshark,选择网卡,开始捕获;
  2. 浏览器访问 HTTP 网址(如http://www.baidu.com);
  3. 过滤条件输入http,仅显示 HTTP 数据包;
  4. 查看数据包详情:
    • 解析请求行 / 请求头状态行 / 响应头
    • 查看 TCP 三次握手(SYN→SYN+ACK→ACK)和四次挥手(FIN→ACK→FIN→ACK);
    • 对比 MAC 帧、IP 数据报、TCP 报文段的封装结构。

五、学习总结

  1. 封包拆包是网络传输的基础,核心是协议头的封装与解析,需牢记 TCP/IP 分层模型的对应关系;
  2. 协议格式是网络编程的核心:MAC 帧(局域网)、IP 数据报(跨网)、TCP 报文段(可靠传输)、HTTP(应用层),重点掌握各字段的作用;
  3. 工具使用:ping/ifconfig/netstat 测连通性,curl 测 HTTP 接口,Wireshark 抓包分析是网络调试的必备技能;
  4. HTTP 协议:掌握 URL 格式、请求 / 响应报文结构、状态码,结合抓包工具理解 HTTP 与 TCP 的关联。
相关推荐
稳联技术老娜1 小时前
Profinet转Ethernet IP网关连接库卡机器人问答式精简配置指南
网络
KillerNoBlood1 小时前
OpenClaw笔记
linux·网络·笔记
模拟器连接器曾工2 小时前
6G传输EtherNet/IP 工业以太网 X-code 8针圆形M12连接器
数码相机·网络协议·ethernet/ip·x键位m12航空连接器·工业以太网m12连接器
无籽西瓜a2 小时前
WebSocket详解含图解:协议特性、握手流程
网络·后端·websocket·网络协议·http
爱研究的小梁2 小时前
乾元通渠道商中标大庆油田应急指挥车项目
网络
小王不爱笑1322 小时前
HTTP 与 HTTPS
网络协议·http·https
夜泉_ly2 小时前
泉面 TOP150 -HTTP和HTTPS协议的区别?
网络协议·http·https
攻城狮在此2 小时前
企业网三层交换机与出口路由器互联配置案例
网络·华为
亚远景aspice2 小时前
亚远景-ISO 21434:汽车网络安全全生命周期风险管理的技术框架
运维·网络·安全