# WebSocket 帧解码器（RFC 6455）

粘贴十六进制或 base64 编码的 WebSocket 帧数据，逐字节解码 RFC 6455 帧头：FIN、RSV、opcode（文本/二进制/关闭/ping/pong）、MASK 位、7/16/64 位扩展长度、掩码密钥与异或解掩后的 payload。支持多帧连发、关闭状态码语义、协议违规警告，并输出带字节偏移的彩色字段图。

> 标准页面: https://elysiatools.com/zh/tools/websocket-frame-decoder

- **分类:** Development

- **关键词:** websocket, rfc6455, 帧解码, opcode, 掩码密钥, 十六进制, 关闭码

## 概述

帧格式（RFC 6455 §5.2）：第 1 字节 = FIN(0x80) + RSV1-3(0x40/0x20/0x10) + opcode(0x0F)；第 2 字节 = MASK(0x80) + 7 位长度（126 表示后续 2 字节 uint16 BE，127 表示后续 8 字节 uint64 BE）；若 MASK=1 再跟 4 字节掩码密钥；payload 逐字节与 mask[i mod 4] 异或解掩。控制帧（opcode ≥ 8）要求 FIN=1 且 payload ≤ 125 字节；客户端到服务器的帧必须掩码（§5.1）。关闭帧 payload 前 2 字节为状态码（1000 正常、1001 离开、1002 协议错误、1007 无效 UTF-8、1009 过大等）。

## 输入项

- **WebSocket 帧数据（hex 或 base64）** (textarea): 81 85 37 fa 21 3d 7f 9f 4d 51 58 (hex dump or base64, multiple frames allowed)
- **输入编码** (select)
- **最多显示的 payload 字节数** (number)

## 适用场景

- 抓包得到 hex dump 或 Base64，需要核对 opcode、MASK、扩展长度和解掩后的 payload。
- 排查控制帧是否满足 FIN=1、payload ≤ 125 字节，以及客户端帧是否按规范掩码。
- 解读关闭帧的状态码与原因字符串，或检查 RSV、长度编码等协议违规。

## 工作原理

- 将帧数据粘贴到「WebSocket 帧数据」文本框，选择输入编码：自动检测、十六进制或 Base64。
- 可按需设置「最多显示的 payload 字节数」（默认 256，范围 16–4096），避免超大负载刷屏。
- 工具按 RFC 6455 §5.2 解析第 1 字节（FIN/RSV/opcode）与第 2 字节（MASK 与 7 位长度），必要时读取 16/64 位扩展长度和 4 字节掩码密钥，再对 payload 按 mask\[i mod 4\] 异或解掩。
- 输出每帧的字段图、关闭码语义（如 1000 正常关闭）以及控制帧长度、FIN、掩码规则等违规警告。

## 使用案例

- 核对抓包中的文本帧或二进制帧：opcode、扩展长度、掩码密钥与解掩明文。
- 验证 ping、pong、close 等控制帧的 FIN、长度和关闭码是否符合 RFC 6455。
- 在联调客户端到服务器方向时，检查帧是否按规范设置 MASK 位。

## 常见问题

### 支持哪些输入格式？

支持十六进制 dump 与 Base64；可自动检测，也可手动指定。同一段数据中可以连续包含多帧。

### 掩码帧的 payload 如何解出明文？

当 MASK=1 时读取随后 4 字节掩码密钥，payload 每个字节与 mask[i mod 4] 异或后得到解掩数据。

### 控制帧有哪些硬性限制？

opcode ≥ 8 的控制帧要求 FIN=1 且 payload 不超过 125 字节；不符合时会给出协议违规警告。

### 关闭帧如何解读状态码？

关闭帧 payload 前 2 字节为状态码（如 1000 正常、1001 离开、1002 协议错误），其后为可选 UTF-8 原因。

### 「最多显示的 payload 字节数」会影响解析吗？

只限制结果中展示的 payload 长度，默认 256，不影响帧头、掩码密钥和长度字段的完整解析。

## 相关工具

- [Base64编码解码](https://elysiatools.com/zh/tools/base64-encoder): Base64编码和解码字符串
- [Base64URL 编解码](https://elysiatools.com/zh/tools/base64url-encoder): Base64URL（URL 安全的 Base64 变体，用于 JWT/JWS/JWE）编解码，并支持标准与 URL 安全 Base64 互转
- [WebAuthn Passkey Assertion 解码与 Challenge 调试器](https://elysiatools.com/zh/tools/webauthn-passkey-assertion-decoder-challenge-debugger): 解析 clientDataJSON、authenticatorData、flags、rpIdHash 和 signCount；提供公钥时验证 ES256、RS256 或 Ed25519 签名。
- [分布式追踪解码与瀑布图可视化](https://elysiatools.com/zh/tools/distributed-trace-decoder-waterfall-visualizer): 解析 Jaeger、Zipkin 或 OpenTelemetry 的 trace JSON，并以瀑布图展示 span 时序与异常节点
- [NTP RFC 5905 / SNTP 闰秒与纪元解码器](https://elysiatools.com/zh/tools/ntp-rfc-5905-sntp-leap-second-epoch-decoder): 解码 NTP/SNTP 48 字节包：字节 0 位域、stratum/poll/precision、root delay/dispersion、reference ID、四个 64 位时间戳（1900 纪元）
- [Snowflake / Discord ID 位字段解码器](https://elysiatools.com/zh/tools/snowflake-discord-id-bit-decoder): 使用无损 64 位解析 Snowflake 风格 ID，提取时间戳、worker、process、sequence 或平台特有字段，并可推断 Discord shard。
- [ULID / NanoID / KSUID / Snowflake 词法 ID 解码器](https://elysiatools.com/zh/tools/ulid-nanoid-ksuid-snowflake-id-decoder): 解码 ULID（Crockford base32）、KSUID（base62）、NanoID、MongoDB ObjectId 与 Discord/Twitter/Sonyflake 雪花 ID：拆解时间戳、随机位、机器位，展示 ISO 时间与十六进制原始值，并按生日界公式估算碰撞概率。
- [Base64转换器](https://elysiatools.com/zh/tools/base64-converter): 将数据编码/解码为Base64格式，支持URL安全选项

## 示例

- [WebSocket 示例](https://elysiatools.com/zh/samples/websocket): 使用 WebSocket 协议的实时通信示例，包括聊天、通知和实时数据流
- [Android Java 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-java): Android Java 图像处理示例，包括图像读取保存、缩放和格式转换
- [Android Kotlin 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-kotlin): Android Kotlin 图像处理示例，包括图像读取保存、缩放和格式转换
- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换

## 相关内容

- [半结构化文本解析与表格提取工具](https://elysiatools.com/zh/hubs/semi-structured-text-table-extraction): 使用定宽解析、分隔符识别、日志处理和表格提取工具，将混乱文本转换为干净的 CSV、JSON、XML 或 Excel 数据。
