Skip to content

第二篇 认识一条 TCP 连接

在第一篇中,我们探讨了网络分层与字节流模型。从这篇开始,我们将把这些抽象概念落地,通过三种可以亲手验证的对象来真正“看见”一条 TCP 连接:Python 程序中的 Socket 对象、操作系统维护的连接状态,以及 Wireshark 捕获的真实 TCP 报文(Segment)。

本篇将围绕一条本地回环(Loopback)连接展开实战。服务端监听 127.0.0.1:50007,客户端则使用操作系统随机分配的临时端口,让双方交换一条带有 4 字节长度字段的消息。接下来的三个章节会反复拆解这同一条连接,每章都会为你补充一种全新的排查视角与实证手段。

本篇完成后的能力

完成本篇学习后,你将能够:

  • 熟练使用四元组(本地 IP、本地端口、远端 IP、远端端口)来唯一标识并描述一个已连接的 Socket;
  • 清晰区分“用于监听的 Socket”和通过 accept 返回的“已连接的 Socket”;
  • 准确理解并说明 bindlistenacceptconnectsendallrecv 以及 close 这些核心网络 API 在代码中的实际作用;
  • 借助 Get-NetTCPConnection 命令,将代码里的 Socket 对象与操作系统底层的 TCP 连接状态一一对应;
  • 在 Windows 环境下,通过回环网卡完整抓取 TCP 连接的建立、数据传输和断开过程;
  • 结合 tcp.stream 过滤器、四元组特征和程序日志时间戳,在茫茫网络流量中精准定位属于你的数据包。

学习路线

章节观察对象本章成果
第4章 Socket、地址、端口和四元组Socket 与系统连接表用四元组准确区分三个并发连接
第5章 用一个最小程序建立 TCP 连接Python Socket API跑通并能优雅释放资源的 TCP 回显(Echo)程序
第6章 第一次抓包Wireshark 报文与分析结果捕获、保存并深度解析一条完整的 TCP 数据流

统一实验约定

为了排除外界环境的干扰,我们做出以下轻量级约定:

  • 仅依赖 Python 3 标准库:无需安装第三方依赖,保持环境清爽。
  • 固定走 IPv4 回环路径:统一使用 127.0.0.1,确保流量只在本地流转。
  • 默认使用 TCP 50007 端口:如果遇到端口被占用的情况,请在客户端和服务端代码中同步更换为一个空闲端口。
  • 强制 UTF-8 编码:在 PowerShell 运行代码时带上 python -X utf8,保证中文日志输出不乱码。
  • 抓包工具配置:使用 Wireshark 配合 Npcap 提供的回环网卡(Loopback Adapter)进行流量捕获。
  • 多维度交叉验证:每次实验都要同时记录“客户端日志”、“服务端日志”、“系统连接状态表”和“抓包文件”,这四类证据将拼凑出一条严丝合缝、可复核的时间线。

:为了聚焦核心流程,本篇暂时只处理“单次请求—响应”的最简场景。至于多消息循环处理、网络超时、高并发服务、背压(Backpressure)机制以及更健壮的错误处理,我们会在第六篇中为你逐一揭晓。

第二篇综合任务

你需要提交一份能够完整复盘 TCP 连接过程的实验记录,具体内容应包含:

  1. 第 5 章里的极简客户端和服务端程序代码,并明确标注实际测试时使用的 IP 地址和端口号。
  2. 客户端与服务端的终端输出日志,请务必保留关键 Socket API 的调用动作、返回值、端点信息及对应的时间戳。
  3. 连接存续期间操作系统的网络连接状态快照,重点记录处于 LISTENESTABLISHED 状态的记录。
  4. 从建连握手到挥手断开的完整抓包文件,以及经过 tcp.stream 过滤后的核心报文截图或表格摘要。

记录要求与提示

在整理四元组状态表时,请将监听 Socket 记录为“本地监听端点 + 未指定的远端端点”;将 accept 返回的已连接 Socket 记录为“完整的四元组”。如果你尝试同时运行了多个客户端,请为每条独立连接单独记录其临时端口号,借此来体会多个客户端是如何共享同一个服务端监听端口的。

最后,请将两端的运行日志、系统底层的状态快照以及网络抓包按时间顺序进行严格对齐。你需要逐一解释 connectacceptsendallrecvclose 等关键 API 动作,并与 TCP 协议层面的 SYN、SYN+ACK、ACK 确认帧、数据段(Segment)、以及 FIN 或 RST 等关键报文一一呼应。在进行时间线对齐时,请清晰标明每条结论的来源(是来自程序日志、系统状态、线上报文还是分析工具的推断),确保整个解释过程逻辑闭环,凡事皆有证据可沿线回查。

上一篇:第一篇 TCP 基础直觉与通信模型 · 返回教程总览 · 下一章:第4章 Socket、地址、端口和四元组

Licensed under CC BY-NC-SA 4.0.