开张:SYN/ACK 博客与写作指南

为什么要写这个博客,以及本站支持的 Markdown 扩展语法——时序图、协议头位域图、提示块,一次讲清楚。

DATE
LEN
429 字
TTL
1 min

你好,这里是 SYN/ACK。

TCP 建立连接时,客户端先发出 SYN,服务端回应 SYN/ACK——“我收到了你的请求,同时也向你发出我的请求”。这个博客也想做同样的事:把我学习网络协议分析过程中的笔记、实验和思考发出去,也希望收到你的回应。

为什么写博客

学协议最怕“看懂了”的错觉。RFC 读一遍觉得都明白,真打开 Wireshark 面对一屏报文,还是会卡在某个字段上。写博客逼着我做三件事:

  1. 亲手抓包:每篇文章尽量配一次可复现的实验;
  2. 逐字节解释:不放过任何一个看不懂的字段;
  3. 说人话:如果不能用简单的话讲清楚,说明还没真正理解。

本站的 Markdown 扩展

下面这些是这个博客专门为“协议分析”准备的写法,写文章时直接用即可。

1. 报文时序图 seq

用 ```seq 代码块描述报文交互,构建时会自动渲染成 SVG,进入屏幕时还会有“逐条发包”的动画:

```seq
title: 示例:一次 HTTP 请求
Client -> Server: SYN
Server -> Client: SYN, ACK
Client -> Server: ACK
== 连接建立 ==
Client -> Server: GET /index.html
Server --> Client: HTTP/1.1 200 OK
Client -x Server: 重传前丢失的 ACK
note Server: 等待超时重传
```

效果如下:

SEQ示例:一次 HTTP 请求
Client Server SYN SYN, ACK ACK 连接建立 GET /index.html HTTP/1.1 200 OK 重传前丢失的 ACK 等待超时重传

语法规则:

写法含义
A -> B: 文本实线箭头(普通报文)
A --> B: 文本虚线箭头(响应 / 数据)
A -x B: 文本丢包(箭头中途断开)
== 文本 ==阶段分隔线
note A: 文本在 A 的生命线上加注释
participants: A, B, C指定参与者顺序(可选)

2. 协议头位域图 packet

用 ```packet 代码块画出 RFC 风格的协议头,鼠标悬停在字段上可以看到比特范围:

```packet
title: UDP Header (RFC 768)
0-15: Source Port
16-31: Destination Port
32-47: Length
48-63: Checksum
...: Data
```
HDRUDP Header (RFC 768)
012345678910111213141516171819202122232425262728293031
Source Port16
Destination Port16
Length16
Checksum16
Data
  • 起始位-结束位: 字段名,单个比特写成 位: 字段名;
  • 默认每行 32 bit,可以用 bits: 16 修改(DNS 头部就习惯画成 16 位宽);
  • ...: 名称 表示可变长度的整行字段。

3. 提示块

> [!NOTE]
> 普通笔记

> [!TIP] 自定义标题
> 小技巧

> [!WARNING]
> 注意事项

笔记

普通笔记,适合补充背景知识。

抓包小技巧

用 tcpdump -w 保存成 pcap 文件,再拖进 Wireshark 慢慢看。

重点

重点内容。

注意

注意事项,比如“这个字段在不同 RFC 中含义不同”。

警告

警告:只在你有权限的网络和主机上做扫描、注入类实验。

4. 代码高亮

代码块写上语言名即可,右上角自带复制按钮:

from scapy.all import IP, TCP, sr1

syn = IP(dst="192.0.2.10") / TCP(dport=443, flags="S")
resp = sr1(syn, timeout=2, verbose=0)
print(resp.summary() if resp else "no response")
sudo tcpdump -i eth0 -nn -w capture.pcap 'tcp port 443'

新建文章

在项目根目录执行:

npm run new -- "文章标题"

会在 src/content/posts/ 下生成一个带好 frontmatter 的 Markdown 文件。frontmatter 字段说明:

title: 文章标题
description: 一句话摘要(显示在列表和搜索结果里)
pubDate: 2026-09-01
layer: L4            # L1~L7 / tools / notes,决定文章归到协议栈的哪一层
tags: [TCP, Wireshark]
protocol: TCP        # 首页抓包列表 Protocol 列,缺省取第一个标签
draft: false         # true 则不会发布
pinned: false        # true 则在首页置顶

好了,连接已建立。开始传数据吧。

↑↓ 选择 · Enter 打开 · Esc 关闭