§ 7·CS 地基4 prompts

计算机网络

了解网络结构与协议通信方式。实践:装 Wireshark 抓包。

先读这部分
§ 7

计算机网络

了解网络结构与协议通信方式。实践:装 Wireshark 抓包。

必须会的核心概念
  • TCP vs UDP。TCP 可靠(有重传),UDP 快速(不保证送达)。
  • 丢包率、延迟、带宽。三个指标知道是什么、怎么影响体验。
  • IPv4、IPv6。知道有两个版本,IPv6 地址更长。
  • 端口号。同一个 IP 上不同服务的区分方式。
  • 局域网地址10.x.x.x192.168.x.x 是经典段。
学到什么程度

用 TCP 写一个小聊天程序,能和另一台机器(或同一台机器的另一个端口)建立连接、互相发消息。能通就算过关。

实践方法
装一个 Wireshark,发一个请求抓包看里面发生了什么。一个包可能只有 1000 多字节,每个包都可能会丢,程序要设计得即使丢包也不该直接出问题。
动手做 · 提示词卡

把这段知识变成一段可执行的练习

以下 4 张卡,每张都是一段可复制的提示词。打开 Claude Code(或任何 LLM 终端),把卡里的提示词粘进去,AI 会陪你完成这一步。遇到不会的概念,把 AI 的回答贴回 卡里继续问下一步。可以一次做完,也可以分几次。

4 操作
Prompt 01操作★★

Wireshark 抓 TCP 握手

为什么要学网络出问题只会刷新页面。Wireshark 让你看到包到底发了什么。
打个比方邮局看快递日志:每个包裹哪天发哪天到,比猜'怎么还没到'准。
VibeCoder 场景Claude Code 写的 API 调用超时,你想看是请求没发还是没回。

装个 Wireshark 抓包看里面发生了什么。

前置本地装好 Wireshark · 能跑 curl
  1. 01Wireshark 选活跃网卡开始抓包。
  2. 02输入过滤 host example.com and tcp port 80。
  3. 03另开终端 curl http://example.com。
  4. 04找到 3 个握手包,看 Flags 字段。
  5. 05让 AI 用 4 行解释握手目的。
粘贴到 Claude Code(或任何 LLM 终端)
教我用 Wireshark 抓一次 TCP 三次握手。步骤:1. 启动 Wireshark 选哪个网卡接口(Wi-Fi 还是以太网)。2. 过滤表达式怎么写(host example.com and tcp port 80)。3. 在浏览器或 curl 访问一次 http://example.com。4. 在抓到的包里找前 3 个 TCP 包,告诉我哪个是 SYN、哪个是 SYN+ACK、哪个是 ACK,分别看 Flags 字段哪一位是 1。5. 用 4 行解释三次握手的目的是什么。
✓ 完成判据你能在 Wireshark 抓包列表里圈出 SYN、SYN+ACK、ACK 三个包。
访问 HTTPS 站点抓到的是 TLS 加密内容;先用 HTTP 站点(example.com 或 neverssl.com)练习。
Prompt 02操作★★★

TCP 写小聊天

为什么要学不会用 socket,AI 写 server 你只会 copy。出问题完全是黑盒。
打个比方装电话:拨号、接通、说话、挂断——每步对应一个 socket 调用。
VibeCoder 场景Claude Code 给你 WebSocket 代码,你想自己写个最小版验证理解。

写一个 TCP 小聊天程序,能通就算过关。

前置本地装好 Python 3
  1. 01AI 给两份代码。
  2. 02一个终端跑 python server.py。
  3. 03另一个终端跑 python client.py。
  4. 04两边互发消息,对方能实时收到就算过关。
  5. 05把 server bind 改成 0.0.0.0,从局域网另一台机器连上来再试。
粘贴到 Claude Code(或任何 LLM 终端)
教我用 Python 标准库 socket 写一个最小 TCP 聊天程序:1 个 server.py + 1 个 client.py。要求:1. server 监听 127.0.0.1:9999,接受 1 个客户端连接。2. client 连上去后,双方都能在终端输入消息发给对方,对方实时打印。3. 用 threading 或 select 处理'边发边收'。4. 代码合计不超过 100 行。5. 每个关键 socket 调用(socket、bind、listen、accept、connect、send、recv)旁边加 1 行注释说它在 OSI 哪一层、在干啥。
✓ 完成判据两边能互发消息且无延迟;你能脱稿解释 listen 和 accept 的区别。
server 不调 listen 直接 accept 会报错;端口被占用时换一个或先 kill 占用进程。
Prompt 03操作★★

故意丢包测 TCP 重传

为什么要学弱网下 AI 写的应用很多直接挂。你不知道 TCP 本来就处理丢包。
打个比方寄快递丢件,邮局自动补寄一份,你不用知道丢过;TCP 同理。
VibeCoder 场景Claude Code 写的接口在差网络下报错,你想模拟测它够不够稳。

每个包都可能丢,程序要设计得丢包也不出问题。

前置macOS 装好 pfctl/dummynet 或 Linux 装好 tc/netem · 管理员权限
  1. 01ping 一次记录 0% 基准。
  2. 02上 netem 或 pfctl 规则,引入 10% 丢包。
  3. 03再 ping 看丢包率 ≈ 10%。
  4. 04跑 TCP 小程序看 100 条全到。
  5. 05取消规则恢复正常。
粘贴到 Claude Code(或任何 LLM 终端)
教我在本地模拟丢包。1. macOS 用 pfctl + dnctl(dummynet),Linux 用 tc netem,分别给出加 10% 丢包率的命令。2. 启动一个 ping 8.8.8.8 测正常网络的丢包率(应该接近 0%)。3. 加上规则后再 ping,看丢包率(应该 ≈ 10%)。4. 取消规则恢复正常。5. 写一段 Python 代码用 TCP 发 100 条消息到 127.0.0.1,对照 ping 的丢包率,看 TCP 是不是真的没丢消息(因为有重传)。
✓ 完成判据你能用一句话解释为什么 TCP 在 10% 丢包下应用层无感。
pfctl/tc 改完忘了清理会一直影响你的网络,先把清理命令写下来。
Prompt 04操作★★

端口扫描看监听

为什么要学部署完不知道服务起没起。端口扫描 = 看哪些门是开着的。
打个比方商场逛店:看哪家亮灯营业、哪家拉闸关门,一目了然。
VibeCoder 场景Claude Code 起服务报'端口被占用',你不知是哪个进程占着。

你想知道本机现在哪些端口在监听。

  1. 01跑监听列表命令。
  2. 02找一个你认识的端口(22 ssh)。
  3. 03找一个你不认识的端口,让 AI 帮你查那个 PID 是啥进程。
  4. 04用 nc -zv 探测两个端口(一个开、一个关)对比输出。
粘贴到 Claude Code(或任何 LLM 终端)
教我看本机当前所有处于 LISTEN 状态的端口。1. macOS 用 lsof -i -P -n | grep LISTEN,Linux 用 ss -tlnp 或 netstat -tlnp,分别给出命令。2. 解释输出里每一列是啥(PID、进程名、IP、端口)。3. 找出 3 个常见端口(22、80/443、5432 之类)分别对应什么服务。4. 教我用 nc -zv localhost 80 探测一个端口是不是开着。
✓ 完成判据你能列出本机正在监听的端口列表并解释其中至少 3 个。
别在公网服务器上把端口列表完整贴 AI,那是攻击面信息;只贴你不认识的那几行就行。