NNetpath
原理入门预计 25 分钟

从一次 curl 说起:网络到底是什么

不谈调优、不谈参数。用一条命令把 DNS、TCP、TLS、HTTP 串起来,顺手把后面要用的名词认全。

学完这节你能做到

  • 说出一次 curl 背后依次发生的五件事,以及各自可能在哪一步失败
  • 认识 MAC / IP / 端口 / 网关 / DNS / MTU / RTT 这几个后面天天出现的名词
  • 知道自己该按哪条路线学下去,以及哪些内容现在可以先跳过

这一节不讲任何参数

如果你刚毕业、没排查过线上网络问题,从这里开始。这一节不调优、不背参数,只做三件事:

  1. 用一条命令看清"访问一个网站"到底发生了什么
  2. 把后面天天出现的名词一次性认全
  3. 告诉你该往哪条路线走,以及现在可以先跳过什么

学校里学的 OSI 七层没有错,但它给不了排障能力——因为它没告诉你每一步在哪里会坏、怎么看。 这一节补的就是这个。

一条命令,五件事

curl https://example.com

看着是一步,实际依次发生了五件事。顺序很重要,因为故障总是发生在某一步。

① 查地址(DNS)      example.com → 93.184.216.34
       ↓
② 建立连接(TCP)    三次握手,和对方的 443 端口
       ↓
③ 协商加密(TLS)    交换证书,确认对方是谁,商定密钥
       ↓
④ 收发数据(HTTP)   发请求、收响应
       ↓
⑤ 关闭连接

每一步失败的样子完全不同,看报错就能定位到步骤

报错卡在哪一步说明什么
Could not resolve host① DNS域名没解析出来,网络本身可能是好的
Connection timed out② TCP包发出去了没人应答:地址不通、防火墙拦了
Connection refused② TCP对方在,但那个端口没有程序在听
certificate has expired③ TLS网络完全正常,证书过期了
404 / 500④ HTTP网络全对,是应用的问题
timeout 与 refused 差别巨大

这是新人最该先分清的一对:

  • refused = 你的包到了对面,对面明确说"这个端口没人"。网络是通的,问题在服务没启动或端口写错。
  • timeout = 你的包发出去,什么回音都没有。可能是地址不对、路由不通、防火墙静默丢弃。

一个是"到了但被拒绝",一个是"根本没到"。搞混这两个,排查方向会完全相反。

亲手看一遍

-v 会把上面五步逐行打出来。这是最值得养成的习惯:

curl -v https://example.com
* Host example.com:443 was resolved.
* IPv4: 93.184.216.34                        ← ① DNS 完成
*   Trying 93.184.216.34:443...
* Connected to example.com (93.184.216.34) port 443   ← ② TCP 完成
* TLS handshake, Certificate (11):
* SSL connection using TLSv1.3 / AES_256_GCM  ← ③ TLS 完成
> GET / HTTP/2                                ← ④ 发出请求(> 是发出)
> Host: example.com
>
< HTTP/2 200                                  ← ④ 收到响应(< 是收到)
< content-type: text/html

三个读法记住:

  • * 开头是 curl 自己的过程说明
  • > 开头是发出去的内容
  • < 开头是收回来的内容

看到最后一行是什么,就知道走到了第几步。

四个地址,各管一段

新人最容易糊的地方:为什么有这么多"地址"?因为每一段路要解决的问题不同。

名字例子管什么作用范围
MAC 地址b8:ce:f6:2a:1c:40同一个局域网内找到那台机器只在本网段有意义
IP 地址10.0.12.34跨网段找到那台机器全网
端口443找到机器上的哪个程序单台机器内
域名example.com给人记的名字,靠 DNS 换成 IP全网

一个类比:IP 是小区地址,MAC 是这栋楼在小区里的门牌,端口是几号房间,域名是"张三家"这个叫法。

所以一次访问需要:域名 →(DNS)→ IP →(路由)→ 找到那台机器 →(端口)→ 找到那个程序。 后面每一节课,本质上都是在讲这条链条上的某一环。

新人术语速查表

这些词后面会反复出现。现在不用记住细节,知道它是干什么的就够了, 遇到时回来查一眼。

硬件与链路

名词一句话
网卡(NIC)机器上收发包的硬件。bond0eth0 这类名字就是它
交换机同一网段内转发,按 MAC 地址决定往哪个口发
路由器跨网段转发,按 IP 地址决定下一跳
网关本网段的出口。目标不在本网段时,包都先交给它
MTU一个包最大能多大,默认 1500 字节。端到端必须一致,不一致会出很诡异的故障

协议与行为

名词一句话
TCP可靠传输:保证送到、保证顺序,代价是要握手、会重传
UDP不保证送到,但没有握手开销。DNS、视频、RDMA 都用它
ARP在同网段里问"这个 IP 是哪块网卡",拿到 MAC 地址
DNS域名换 IP
NAT改写包里的地址。你家路由器让多台设备共用一个公网 IP 就靠它
RTT往返时延。一个包过去再回来花的时间,同机房通常零点几毫秒
丢包包没到。TCP 会重传(变慢),UDP 就直接没了
重传TCP 发现包丢了重新发一遍。重传率高 = 链路有问题

排障常用

名词一句话
带宽单位时间能搬多少数据,用 Gbps 计
PPS每秒处理多少个包。小包场景下它比带宽更容易先撞墙
队列处理不过来时排队的地方。排队 = 延迟;队列满 = 丢包
抓包把经过网卡的包录下来看,工具是 tcpdump
计数器内核和网卡记的各种数字(收了多少、丢了多少)。排障主要靠看它,不是靠猜
i为什么强调「看计数器」

新人排障最常见的做法是"改一个参数试试",然后网络好了也不知道为什么好。

正确的路子是:每一层都有计数器,看数字说话。 网卡丢了多少包、内核丢了多少、 TCP 重传了多少次——这些都有明确的数字可查。后面《网络观测工具箱》那节会给你一套固定命令, 《一台"网络慢"的机器》那一关会让你用它真的破一个案子。

三个先记住的判断

哪怕后面的课都还没学,这三条也能让你在工作里少走弯路:

  1. ping 通不代表业务正常。 ping 用的是很小的包、很低的频率。高负载下丢包、 某个端口没监听、证书过期,ping 全都发现不了。
  2. "网络慢"八成不是网络的问题。 可能是应用读得慢、CPU 忙不过来、DNS 解析慢。 先分清是哪一步慢,再动手。
  3. 不要一上来就抓包。 抓包信息量太大。先看计数器把范围收窄,带着假设去抓,效率高一个数量级。

接下来学什么

你在这里
   ↓
L0 网络基础     ← 所有人都该学完,约 3.5 小时
   ↓
T  代理与隧道   ← 紧接着学这个:门槛低、入职第一周就用得上
   ↓
   ├─ 做后端 / 平台 → L1 容器网络
   ├─ 做 AI 集群   → L2 高性能网络(先跳过标「深入」的,回头再补)
   ├─ 做方案 / 售前 → L3 网络规划
   └─ 想深挖某个点 → L4 进阶专题(按需取用,不用通读)

注意 T 不是"第五阶段",它是一条旁路:只依赖 L0,不依赖 L1/L2/L3。 所以它排在 L0 后面而不是压到最末 —— 学完就能用,比继续堆概念更容易撑住。

几条实际建议:

  • L0 按顺序学完,它是后面所有内容的前提,跳过会处处别扭
  • 接着去 T 的前两节(HTTP/SOCKS5 代理、SSH 端口转发)—— 入职第一周大概率就要用跳板机,这两节立刻能用上
  • 看到标 「深入」 的课可以先跳过,等遇到具体问题再回来
  • 课程页顶部的**「建议先学」**会告诉你这一节缺哪些前置,不用自己记依赖关系
  • 首页有一条**「新手路线」**,14 节课约 7 小时,照着走就行

检查点

检查点单选

curl 报 Connection refused,最合理的判断是?

检查点多选

下面哪些说法是对的?(多选)

检查点单选

同事报障说「服务访问很慢」。按这节课的思路,第一步该做什么?

这节课的落点

  • 一次访问 = DNS → TCP → TLS → HTTP → 关闭,故障总在某一步,看报错就能定位
  • timeout(根本没到)与 refused(到了被拒)方向完全相反,先分清这一对
  • curl -v* / > / < 三种前缀分别是过程、发出、收到
  • 四个地址各管一段:MAC 管同网段、IP 管跨网段、端口管程序、域名管人记
  • 三条先记住:ping 通 ≠ 业务正常;"网络慢"多半不是网络;别一上来就抓包
  • 排障靠看计数器,不靠改参数试
  • L0 按顺序学完,然后按岗位选方向;标「深入」的可以先跳过

延伸资料

  • ·Systems Performance, 2nd Edition — Brendan Gregg