Skip to content

第一篇 TCP 基础直觉与通信模型

本篇旨在帮你建立 TCP 通信的全局视角。

我们将从一个简单的 URL 开始,顺着请求的足迹,逐步探索域名解析、路由选择、链路传输、TCP 连接建立直到应用层请求的整个流程。接着,我们会深入看看 TCP 是怎么施展魔法,在一个本身不可靠(有损)的 IP 网络之上,为你搭建出一条可靠的、全双工的有序字节流通道。最后,我们还会通过动手实验,亲自复现 TCP 中经典的“粘包”和“拆包”现象——也就是一次发送导致多次读取,或者多次发送被合并成一次读取的情况。

学习目标

学完本篇内容后,你将能够:

  • 清楚区分域名、IP 地址、MAC 地址以及端口号,并说出它们各自的应用场景与作用范围。
  • 画出应用层数据经过 TCP 封装成报文段(Segment)、IP 封装成数据报、再到链路层封装成帧,最后发往下一跳的完整过程。
  • 解释 TCP 内部的几大核心机制是如何协同工作的,包括序列号(Sequence Number)、确认应答(ACK)、超时重传、接收窗口(Window)以及拥塞控制(Congestion Control)。
  • 准确描述代码中一次 send 调用与一次 recv 调用之间到底是什么关系。
  • 掌握如何使用“长度前缀”等协议设计技巧,从连续的字节流中准确拆分出独立的应用层消息。

章节

  1. 一次网络请求是怎样发生的:从输入 URL 到收到响应,一步步梳理出完整的网络通信路径。
  2. TCP 提供怎样的通信能力:拆解 TCP,理解有序、可靠、全双工字节流背后的核心机制体系。
  3. TCP 是字节流:通过可复现的代码实验,直观感受流式读取的边界问题,并亲手实现基于长度前缀的消息分帧。

本篇综合任务

建议你在阅读完以上三章后,尝试画出两张图作为学习巩固:

  1. 协议分层封装图:从应用层消息开始,一直画到 TCP 报文段(Segment)、IP 数据报以及链路层数据帧。请在图上准确标出域名、IP 地址、MAC 地址、端口以及 Socket 分别在哪个环节起作用。
  2. 字节流接收分块图:假设发送方按顺序发送了 ABCDEFGHI 三组数据。请画出接收方在调用 recv 时,至少三种合法的返回组合(只需保证最终拼出来的字节序列和发送端完全一致即可)。

在绘制这些图时,尽量为你的每一个结论提供事实依据:你可以通过网络抓包来观察底层的 TCP 报文段,也可以利用应用层的代码日志来验证消息处理结果。把抓包与日志结合起来,你就能对 TCP 的真实行为给出一份全面而清晰的解释。


上一篇:导读 · 返回教程总览 · 下一章:一次网络请求是怎样发生的

Licensed under CC BY-NC-SA 4.0.