10822 字
54 分钟
计算机网络万字详解:从分层模型到协议、安全与排障

计算机网络万字详解:从分层模型到协议、安全与排障#

计算机网络不是一堆协议名的堆叠,而是一套把数据从一个进程可靠或尽力送到另一个进程的工程体系。它同时解决几个问题:如何表示数据、如何在一段链路上传输比特、如何在局域网内找到下一跳、如何跨网络寻址和路由、如何在端到端之间建立通信语义、如何让应用理解数据,以及如何在故障、拥塞、攻击和复杂部署环境下继续工作。

学习网络时最容易犯的错误,是把 OSI 七层、TCP/IP 四层、IP 地址、端口、HTTP、DNS、网关、交换机、路由器这些概念分开背。实际排查问题时,它们永远是连在一起的。打开一个网页,浏览器先解析域名,再选择目标 IP,操作系统根据路由表决定下一跳,链路层通过 ARP 找到网关 MAC,TCP 完成握手,TLS 完成加密协商,HTTP 发送请求,服务端返回响应,中间还可能经过 NAT、负载均衡、防火墙、代理、CDN 和缓存。

本文按“从底层到上层,再回到工程排障”的顺序整理计算机网络。目标不是替代教材,而是把关键概念、协议边界和常见问题串成一条可以复习、面试和实战排查的主线。

1. 网络到底解决什么问题#

网络的本质是通信。通信看似简单:一台主机把数据发给另一台主机。但一旦进入真实环境,问题会立刻变复杂。

第一,发送方和接收方可能不在同一根线缆上。它们之间可能隔着交换机、路由器、运营商网络、数据中心网络、云厂商内网、NAT 网关和防火墙。网络必须解决跨设备、跨链路、跨自治系统的数据转发。

第二,底层介质不可靠。无线信号会衰减,电缆会受干扰,交换机队列会满,路由可能变化,数据包可能丢失、重复、乱序或延迟。网络协议必须在不同层次决定哪些问题由谁处理。

第三,通信对象不是“机器”这么粗的粒度。真正通信的是进程。一个服务器上可能同时运行 Web 服务、数据库、SSH、监控 Agent 和多个容器。IP 地址定位主机或接口,端口定位进程,协议定位通信规则。

第四,网络需要兼容规模。局域网里几十台机器可以靠广播工作,但全球互联网不可能靠广播。于是产生了分层寻址、路由聚合、自治系统、DNS、CDN、NAT 等机制。

第五,网络需要安全。明文传输会泄露内容,伪造请求会冒充身份,未授权访问会扩大影响。网络安全并不是单独一层,而是贯穿地址、路由、传输、应用、身份和日志的整体能力。

所以,计算机网络不是“能连上网”这么简单,而是围绕连接性、可达性、可靠性、性能、扩展性和安全性做出的系统设计。

2. 分层模型:为什么网络要分层#

分层是网络里最重要的工程思想。分层的目的不是为了考试画表,而是为了隔离复杂度。每一层只关心自己的职责,并向上一层提供抽象。

OSI 七层模型从下到上是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP 模型通常分为链路层、网络层、传输层、应用层。实际工程里,更多使用 TCP/IP 模型来理解协议栈。

链路层负责同一链路或同一局域网内的帧传输,例如以太网、Wi-Fi、ARP。它关心 MAC 地址、帧格式、冲突、交换、VLAN 等问题。

网络层负责跨网络寻址和路由,例如 IP、ICMP、路由协议。它关心 IP 地址、子网、路由表、下一跳、TTL、分片、不可达错误等问题。

传输层负责端到端进程通信,例如 TCP 和 UDP。它关心端口、连接、可靠传输、流量控制、拥塞控制、乱序重排、重传、无连接传输等问题。

应用层负责具体业务协议,例如 DNS、HTTP、SMTP、SSH、DHCP、NTP。它关心请求格式、响应格式、状态码、缓存、认证、会话、语义和业务数据。

分层的关键在于封装。应用层产生 HTTP 报文,传输层在外面加 TCP 头,网络层再加 IP 头,链路层再加以太网头和尾。接收端反过来逐层拆封装。每一层都只阅读自己关心的头部字段,把载荷交给上一层。

例如访问 https://example.com 时,应用层看到的是 HTTP 请求,传输层看到的是 TCP 段,网络层看到的是 IP 包,链路层看到的是以太网帧。对交换机来说,它不需要理解 HTTP;对路由器来说,它通常不需要理解 TCP 连接里的业务内容;对浏览器来说,它不需要知道以太网帧校验怎么做。

这种边界让网络可以演进。以太网可以从百兆升级到万兆,IP 仍然工作;HTTP 可以从 1.1 到 2 再到 3,应用语义仍然围绕请求响应展开;IPv4 可以逐步迁移到 IPv6,上层协议只要适配地址格式即可。

3. 封装与解封装:数据如何穿过协议栈#

理解封装可以解决很多“为什么抓包看到这么多头部”的疑问。

假设浏览器要向服务器发送一段 HTTP 请求。应用层构造出类似下面的内容:

GET /index.html HTTP/1.1
Host: example.com
User-Agent: Browser

传输层如果使用 TCP,会加上源端口、目的端口、序号、确认号、窗口大小、校验和等字段。源端口通常是客户端临时端口,目的端口通常是 80 或 443。TCP 头部让接收方知道这段数据属于哪个连接、在字节流中的位置、是否需要确认以及接收窗口大小。

网络层会加上源 IP、目的 IP、TTL、协议号、头部校验和等字段。IP 头部让路由器知道这个包要从哪里到哪里,下一跳应该怎么走。

链路层会加上源 MAC、目的 MAC、以太网类型、帧校验序列等字段。MAC 地址只在当前链路内有效。数据每经过一个三层路由器,二层头都会被重新封装,但源 IP 和目的 IP 通常保持不变,除非经过 NAT。

因此,一个数据包在路由过程中会出现一个常见现象:IP 层的源和目的表示端到端通信对象,而链路层的源和目的表示当前这一跳的发送者和接收者。抓包排障时,如果把 MAC 地址和 IP 地址混成同一层,就很容易判断错。

4. 物理层:比特如何变成信号#

物理层负责把比特转成电信号、光信号或无线电波。它不理解 IP、端口、HTTP,也不理解文件和网页。它只关心如何表示 0 和 1,如何同步时钟,如何传输信号,如何定义接口、电压、频率、速率和线缆规格。

常见传输介质包括双绞线、同轴电缆、光纤和无线信道。双绞线常用于局域网接入,常见网线类别包括 Cat5e、Cat6、Cat6a。光纤常用于长距离、高带宽、抗干扰场景,分为单模光纤和多模光纤。无线网络使用电磁波传播,部署灵活,但容易受到距离、障碍物、干扰和共享介质竞争影响。

物理层里有两个重要概念:带宽和时延。带宽表示单位时间内能传输多少数据,通常用 bps 表示。时延表示数据从发送端到接收端经历的时间。下载大文件更关心带宽,在线游戏和远程控制更关心时延和抖动。

还要区分传播时延、发送时延、排队时延和处理时延。传播时延取决于距离和信号传播速度。发送时延取决于数据大小和链路速率。排队时延取决于设备队列拥塞程度。处理时延取决于设备解析、查表、封装和安全策略处理的开销。

真实网络卡顿通常不是单一原因。带宽不足会慢,延迟高会慢,丢包会慢,DNS 慢会让首屏慢,TLS 握手慢会让 HTTPS 建连慢,服务器处理慢也会表现为网络慢。排障时必须拆开看。

5. 数据链路层:局域网内如何传输#

数据链路层解决同一链路或同一局域网内的传输问题。以太网是最常见的数据链路层技术。以太网帧通常包含目的 MAC、源 MAC、类型字段、数据和帧校验序列。

MAC 地址是网卡的链路层地址,长度 48 位,通常写成十六进制形式。MAC 地址用于局域网内交付,不用于跨互联网寻址。一个 IP 包要发给同网段主机时,发送方需要知道对方 MAC;要发给外网主机时,发送方需要知道默认网关的 MAC。

交换机工作在二层,主要根据 MAC 地址转发帧。交换机会维护 MAC 地址表,记录某个 MAC 地址出现在某个端口。收到帧后,如果目的 MAC 已知,就从对应端口转发;如果未知,就可能泛洪到其他端口。广播帧会被发送到同一广播域内的所有端口。

VLAN 用于划分二层广播域。没有 VLAN 时,同一交换网络里的广播会影响所有主机。划分 VLAN 后,不同 VLAN 之间默认二层隔离,需要三层设备或三层交换来互通。企业网络里,办公网、服务器网、访客网、监控网通常会用 VLAN 隔离。

链路层还要处理差错检测。以太网帧尾部的 FCS 可以检测传输过程中帧是否损坏,但通常不负责重传。错误帧会被丢弃,是否重传由上层协议决定。TCP 会感知丢包并重传,UDP 通常不会自动重传。

6. ARP:IP 地址如何找到 MAC 地址#

ARP 是 IPv4 网络里非常关键但常被忽略的协议。它解决的问题是:已知目标 IP,如何找到对应的 MAC 地址。

假设主机 A 要发送数据给同网段主机 B。A 知道 B 的 IP,但以太网帧必须填写目的 MAC。A 会先查询本地 ARP 缓存。如果没有记录,就发送 ARP 请求广播:“谁是这个 IP?请告诉我你的 MAC。”B 收到后返回 ARP 响应。A 把 IP 到 MAC 的映射写入缓存,然后发送真正的数据帧。

如果目标 IP 不在本地网段,A 不会 ARP 目标服务器的 MAC,而是 ARP 默认网关的 MAC。因为跨网段通信必须把包交给路由器。这个细节很重要:访问公网网站时,你电脑的以太网帧目的 MAC 通常是家用路由器或公司网关,而不是远端服务器。

ARP 的问题是缺少认证。局域网内攻击者可以伪造 ARP 响应,把网关 IP 绑定到自己的 MAC,形成 ARP 欺骗。这样攻击者可以中间人转发、嗅探流量或造成断网。防护方式包括静态 ARP、交换机动态 ARP 检测、网关防护、终端安全软件和网络准入控制。

IPv6 不再使用 ARP,而使用 NDP。NDP 基于 ICMPv6,承担邻居发现、路由器发现、地址自动配置等功能,但同样有邻居欺骗等安全问题,需要 RA Guard、SEND 或交换机安全策略配合。

7. 网络层:IP 的职责和边界#

IP 协议负责跨网络寻址和尽力而为的包转发。尽力而为意味着 IP 不保证一定送达,不保证顺序,不保证不重复,也不保证时延。它只根据目的地址和路由表尽力把包送往下一跳。

IPv4 地址长度 32 位,通常写成点分十进制,例如 192.168.1.10。IPv6 地址长度 128 位,通常写成冒号分隔的十六进制,例如 2001:db8::1。IPv6 的地址空间更大,也内置了更丰富的地址类型和自动配置能力。

IP 地址不是单独使用的,必须和子网掩码或前缀长度一起理解。例如 192.168.1.10/24 表示网络前缀是前 24 位,对应网段通常是 192.168.1.0,可用主机范围在 192.168.1.1192.168.1.254。同网段主机可以通过二层直接通信,不同网段需要路由器转发。

默认网关是主机通往其他网段的出口。当操作系统发现目的 IP 不在直连网段,也没有更具体路由时,就把数据包发给默认网关。网关再根据自己的路由表决定下一跳。

TTL 是 IP 头部里的生存时间字段。每经过一个路由器,TTL 减 1。减到 0 时,路由器丢弃该包并通常返回 ICMP 超时报文。TTL 防止路由环路导致数据包无限转发。tracerttraceroute 正是利用逐步增加 TTL 来探测路径上的路由器。

ICMP 是网络层辅助协议,用于传递错误和诊断信息。常见的 ping 使用 ICMP Echo Request 和 Echo Reply。目的不可达、TTL 超时、需要分片但禁止分片等信息也常通过 ICMP 返回。很多网络故障排查都离不开 ICMP,但生产环境中也常因安全策略限制 ICMP,导致 ping 不通不一定表示业务不通。

8. 子网划分与 CIDR#

子网划分用于把一个地址空间拆成多个更小的网络。它既能减少广播范围,也能方便路由聚合和权限隔离。

CIDR 用前缀长度表示网络部分。例如 /24 表示前 24 位是网络位,剩余 8 位是主机位。主机位全 0 通常表示网络地址,主机位全 1 通常表示广播地址。一个 /24 网段有 256 个地址,通常可用主机地址 254 个。

常见前缀可以快速记忆:

/24 256 个地址,常见小型局域网
/25 128 个地址
/26 64 个地址
/27 32 个地址
/28 16 个地址
/30 4 个地址,常用于点到点链路
/32 1 个地址,表示单个主机路由

私有地址范围包括 10.0.0.0/8172.16.0.0/12192.168.0.0/16。这些地址不能直接在公网路由,需要通过 NAT 或专线、VPN、隧道等方式访问外部或互联。

理解子网有一个实用方法:判断两个 IP 是否同网段,就是把 IP 和掩码做按位与,看网络地址是否相同。例如 192.168.1.10/24192.168.1.20/24 同网段;192.168.1.10/24192.168.2.20/24 不同网段,需要网关。

子网设计不能只看地址数量,还要看安全边界、广播范围、未来扩展、路由聚合、ACL 策略和故障影响面。把所有服务器放在一个大二层里,早期省事,后期排障和安全都会变困难。

9. 路由:数据包如何跨网络前进#

路由器根据路由表转发 IP 包。路由表的核心字段包括目的网段、下一跳、出接口、度量值。匹配路由时遵循最长前缀匹配,也就是更具体的路由优先。

例如路由表里同时有:

0.0.0.0/0 via 192.168.1.1
10.1.0.0/16 via 192.168.1.254
10.1.2.0/24 via 192.168.1.253

当目的地址是 10.1.2.8 时,会匹配 /24 路由,因为它比 /16 更具体。当目的地址是 8.8.8.8 时,没有更具体路由,就走默认路由 0.0.0.0/0

路由来源可以是直连路由、静态路由和动态路由。直连路由来自接口配置。静态路由由管理员手工配置,简单、可控,但维护成本高。动态路由由路由协议自动学习,例如 RIP、OSPF、IS-IS、BGP。

OSPF 常用于一个组织内部,属于链路状态路由协议。它通过收集拓扑信息计算最短路径。BGP 用于自治系统之间,是互联网的核心路由协议。BGP 不只考虑最短路径,还考虑策略、商业关系、路径属性和路由控制。

路由故障常见表现包括单向可达、部分网段不可达、路径绕行、延迟升高、环路、黑洞路由。排查时不能只在源主机 ping 目的地址,还要检查源路由表、网关路由、返回路径、防火墙策略和 NAT 状态。

10. NAT:为什么内网能访问公网#

NAT 是网络地址转换。它最常见的用途是让多个内网私有地址共享一个或少量公网地址访问互联网。

家用路由器上常见的是源 NAT,也叫 PAT 或 NAPT。内网主机 192.168.1.10:50000 访问公网服务器 93.184.216.34:443 时,路由器会把源地址改成自己的公网地址,把源端口改成一个映射端口,并记录转换表。服务器回包到公网地址和端口时,路由器再根据表项把包转回内网主机。

NAT 的好处是节省 IPv4 地址,并隐藏内网地址结构。但 NAT 也带来问题。它破坏了端到端连接模型,使外部主机无法主动访问内网主机,除非配置端口转发、打洞、反向连接或 VPN。很多 P2P、实时音视频、游戏联机都要处理 NAT 穿透。

NAT 还会影响排障。服务端看到的源 IP 可能是网关或代理,不是用户真实内网地址。多层 NAT、运营商 CGNAT、云厂商 SNAT 都可能让连接追踪变复杂。做日志审计时,需要记录源 IP、源端口、时间戳和转换关系,否则难以定位真实客户端。

IPv6 的普及目标之一,是恢复更清晰的端到端寻址。但即使使用 IPv6,安全边界仍然需要防火墙、ACL、身份认证和最小权限控制,不能因为地址可达就默认允许访问。

11. UDP:简单但不等于低级#

UDP 是无连接传输协议。它提供端口复用和校验和,但不提供连接建立、可靠传输、顺序保证、流量控制和拥塞控制。UDP 报文边界天然保留,一次 send 对应一个数据报,接收方按数据报读取。

UDP 的优点是开销小、延迟低、应用可控。DNS、DHCP、NTP、部分音视频、游戏、QUIC 都会用到 UDP。需要注意,QUIC 虽然基于 UDP,但它自己在用户态实现了连接管理、可靠传输、拥塞控制和加密,不是“裸 UDP”。

UDP 不保证可靠,但应用可以自己设计可靠性。例如实时语音可能宁愿丢掉过期包,也不希望重传导致延迟增加;文件传输则可以在应用层加确认、重传、校验和分片编号。

UDP 常见问题包括报文过大导致 IP 分片、NAT 映射超时、防火墙默认阻断、丢包无法自动恢复、应用层缺少拥塞控制造成网络压力。使用 UDP 时不能只追求快,还要明确可靠性、顺序、重传和限速策略由谁负责。

12. TCP:可靠字节流是如何实现的#

TCP 是面向连接的可靠传输协议。它给应用提供的是字节流,而不是消息边界。应用写入多次数据,接收端可能一次读到,也可能分多次读到。因此 TCP 应用协议必须自己设计消息边界,例如使用 Content-Length、分隔符、固定长度头或帧格式。

TCP 的可靠性主要靠序号、确认、重传、滑动窗口和校验和实现。发送方给每个字节编号,接收方确认已经收到的连续字节位置。如果发送方长时间收不到确认,就会重传。接收方也可以缓存乱序数据,等缺失部分到达后交给应用。

TCP 三次握手用于建立连接:

客户端 -> 服务端:SYN,选择初始序号 x
服务端 -> 客户端:SYN + ACK,确认 x+1,选择初始序号 y
客户端 -> 服务端:ACK,确认 y+1

三次握手的意义不是形式主义,而是让双方确认收发能力,并同步初始序号。两次握手不足以可靠确认双方状态,也容易受历史重复报文影响。

TCP 四次挥手用于关闭连接:

主动关闭方 -> 被动关闭方:FIN
被动关闭方 -> 主动关闭方:ACK
被动关闭方 -> 主动关闭方:FIN
主动关闭方 -> 被动关闭方:ACK

之所以常说四次,是因为 TCP 是全双工连接。一个方向关闭,不代表另一个方向立刻关闭。被动关闭方可能还有数据要发,所以 ACK 和 FIN 可能分开发送。

TIME_WAIT 是主动关闭方在发送最后 ACK 后保持一段时间的状态。它有两个作用:确保最后 ACK 丢失时能重发;让旧连接中的迟到报文在网络中自然消失,避免污染后续使用相同四元组的新连接。大量短连接会造成 TIME_WAIT 增多,因此高并发服务通常会使用连接池、长连接、HTTP keep-alive 或合理调优。

13. TCP 流量控制与拥塞控制#

流量控制解决接收方处理不过来的问题。TCP 接收方通过窗口大小告诉发送方自己还能接收多少数据。发送方不能无限发送,否则会撑爆接收缓冲区。

拥塞控制解决网络中间路径承受不了的问题。即使接收方很强,中间路由器、交换机、运营商链路也可能拥塞。TCP 通过拥塞窗口控制发送速率。

经典 TCP 拥塞控制包含慢启动、拥塞避免、快重传、快恢复。慢启动不是慢,而是从小窗口指数增长,探测网络容量。出现丢包后,TCP 判断可能发生拥塞,降低发送速率。拥塞避免阶段线性增长,减少再次拥塞的概率。

现代网络中还有多种拥塞控制算法,例如 CUBIC、BBR。CUBIC 是很多 Linux 系统默认算法,适合高带宽长距离网络。BBR 试图估计瓶颈带宽和往返时延,不完全依赖丢包判断拥塞。

排查 TCP 性能问题时,要关注 RTT、丢包率、重传、窗口大小、拥塞窗口、MSS、MTU、队列丢包和中间设备限速。很多“服务器带宽够但下载慢”的问题,本质可能是高延迟和丢包导致 TCP 窗口无法充分增长。

14. 端口、套接字和连接#

IP 地址定位主机或接口,端口定位进程。TCP 连接通常由四元组标识:源 IP、源端口、目的 IP、目的端口。UDP 虽然无连接,但操作系统和 NAT 设备也会用类似五元组维护会话状态。

服务端监听端口,例如 Web 服务监听 80 或 443。客户端连接时使用临时端口。一个服务端 443 端口可以同时服务大量客户端,因为每条连接的四元组不同。

套接字是操作系统提供给应用的网络编程抽象。服务端通常经历 socket、bind、listen、accept、read/write、close。客户端通常经历 socket、connect、read/write、close。理解这些步骤有助于排查“端口监听了但连不上”“连接建立了但没有响应”“服务端 accept 堆积”等问题。

端口状态也值得掌握。LISTEN 表示服务正在监听。ESTABLISHED 表示连接已建立。SYN_SENT、SYN_RECV 表示握手过程。TIME_WAIT、CLOSE_WAIT、FIN_WAIT 表示关闭过程。CLOSE_WAIT 大量堆积通常说明应用没有正确关闭连接。

15. DNS:域名如何变成 IP#

DNS 把人类可读的域名解析成 IP 地址。浏览器访问网站前,通常需要先解析域名。DNS 是分层分布式系统,根域、顶级域、权威域名服务器和递归解析器共同工作。

解析流程简化如下:客户端向本地递归解析器查询域名。如果递归解析器没有缓存,就从根服务器开始问,根服务器告诉它顶级域服务器,顶级域服务器告诉它权威服务器,权威服务器返回最终记录。递归解析器缓存结果,再返回给客户端。

常见 DNS 记录包括:

A 域名到 IPv4 地址
AAAA 域名到 IPv6 地址
CNAME 域名别名
MX 邮件服务器
TXT 文本记录,常用于域名验证和 SPF
NS 权威域名服务器
SRV 服务位置

DNS 缓存能提高访问速度,但也会带来更新延迟。TTL 决定记录缓存多久。域名切换 IP 后,如果旧记录仍在缓存中,部分用户会继续访问旧地址。发布系统和 CDN 切换时必须考虑 TTL。

DNS 故障常见表现是域名访问失败但 IP 能通、不同地区解析结果不同、解析到旧地址、CNAME 链异常、权威记录和递归缓存不一致。排查时可以使用 nslookupdigResolve-DnsName,并分别查询本地 DNS、公共 DNS 和权威 DNS。

DNS 也有安全问题。传统 DNS 明文传输,容易被监听或篡改。DNS 污染、DNS 劫持、缓存投毒都会影响访问结果。DoH、DoT、DNSSEC 分别从加密传输和记录签名角度缓解问题,但部署和兼容性要结合实际环境。

16. HTTP:Web 通信的应用层协议#

HTTP 是应用层协议,采用请求响应模型。客户端发送请求,服务端返回响应。HTTP 本身是无状态的,服务端不会天然记住两次请求属于同一个用户。Cookie、Session、Token 等机制用于在无状态协议上构建会话。

一个 HTTP 请求通常包含请求行、请求头、空行和请求体。响应包含状态行、响应头、空行和响应体。

GET /api/user HTTP/1.1
Host: example.com
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
{"name":"kon"}

常见方法包括 GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。GET 通常用于读取资源,POST 常用于提交数据或触发操作,PUT 常用于整体替换,PATCH 常用于部分更新,DELETE 用于删除。实际业务中要结合幂等性和接口规范设计,不要只看方法名。

状态码可以按范围理解:

2xx 成功,例如 200、201、204
3xx 重定向,例如 301、302、304
4xx 客户端错误,例如 400、401、403、404、429
5xx 服务端错误,例如 500、502、503、504

HTTP/1.1 支持持久连接,但同一连接上请求响应仍存在队头阻塞。HTTP/2 引入二进制分帧、多路复用、头部压缩和流优先级,让一个 TCP 连接上可以并发多个请求。HTTP/3 基于 QUIC 和 UDP,减少 TCP 队头阻塞,并优化连接迁移和握手时延。

缓存是 HTTP 的重要能力。Cache-ControlETagLast-ModifiedIf-None-MatchIf-Modified-Since 等头部决定浏览器和代理如何缓存资源。缓存可以显著降低延迟和带宽,但错误缓存也会导致用户看到旧页面或旧接口结果。

17. HTTPS、TLS 与证书#

HTTPS 可以理解为 HTTP over TLS。TLS 提供机密性、完整性和身份认证。机密性防止内容被窃听,完整性防止内容被篡改,身份认证防止客户端连到伪造服务器。

TLS 握手会协商协议版本、加密套件、密钥材料,并验证服务端证书。证书由 CA 签发,包含域名、公钥、有效期、签发者等信息。浏览器会检查证书链是否可信、域名是否匹配、是否过期、是否被吊销或不符合策略。

HTTPS 不是只“加密内容”。它还改变了运维和排障方式。抓包时无法直接看到 HTTP 明文,需要在客户端、服务端或代理处解密。证书过期、证书链不完整、SNI 配置错误、TLS 版本不兼容、反向代理转发头错误,都会导致访问异常。

TLS 也有性能成本,但现代硬件和协议优化已经大幅降低成本。HTTP/2、TLS 1.3、会话恢复、OCSP Stapling、ECDHE 等机制都在兼顾安全与性能。生产环境不应为了性能回退到弱加密或过时协议。

18. DHCP:主机如何自动获得地址#

DHCP 用于自动分配 IP 地址、子网掩码、默认网关、DNS 服务器等网络配置。没有 DHCP 时,管理员需要手动给每台主机配置地址,容易冲突和出错。

DHCP 典型流程是 DORA:

Discover 客户端广播寻找 DHCP 服务器
Offer 服务器提供可用地址
Request 客户端请求使用该地址
Ack 服务器确认租约

DHCP 分配的是租约,不是永久所有权。租约到期前客户端会尝试续租。企业网络里,DHCP 还可能配合地址保留、Option 字段、PXE 启动、不同 VLAN 的地址池和 DHCP Relay。

DHCP 故障常见表现是拿不到 IP、拿到 169.254.x.x 自动私有地址、拿到错误网关、DNS 配置错误、地址冲突。排查时要看客户端租约、交换机 VLAN、DHCP Relay、地址池是否耗尽、是否有非法 DHCP 服务器。

19. 常见网络设备:交换机、路由器、防火墙和代理#

交换机主要负责二层转发。它根据 MAC 地址表转发帧,隔离冲突域,但默认不隔离广播域。支持 VLAN 的交换机可以划分广播域。三层交换机还可以做 VLAN 间路由。

路由器主要负责三层转发。它连接不同网段,根据路由表转发 IP 包。家用路由器通常同时承担路由、NAT、DHCP、DNS 转发、无线接入和基础防火墙等多个角色。

防火墙根据策略允许或拒绝流量。传统包过滤防火墙看源/目的 IP、端口和协议。状态防火墙会跟踪连接状态。下一代防火墙还能识别应用、用户、内容和威胁特征。云环境里,安全组、网络 ACL、WAF、负载均衡访问控制也属于安全边界的一部分。

代理位于客户端和服务端之间。正向代理代表客户端访问外部,常用于访问控制、审计、缓存。反向代理代表服务端接收外部请求,常用于负载均衡、TLS 终止、缓存、限流、灰度发布和统一入口。Nginx、HAProxy、Envoy、Traefik 都是常见反向代理或网关组件。

负载均衡可以工作在四层或七层。四层负载均衡根据 IP 和端口转发 TCP/UDP 流量,性能高但不理解 HTTP 语义。七层负载均衡可以按域名、路径、Header、Cookie、权重和业务规则转发,灵活但开销更高。

20. CDN:为什么网站要离用户更近#

CDN 的核心思想是把内容缓存到离用户更近的节点。用户访问域名时,DNS 或调度系统会把用户引导到合适的边缘节点。边缘节点如果有缓存,就直接返回;没有缓存则回源站获取并缓存。

CDN 可以降低延迟、减少源站压力、提高可用性,并提供基础防护能力。静态资源、图片、视频、下载文件非常适合 CDN。动态接口也可以通过边缘加速、全站加速或边缘计算优化,但需要谨慎处理缓存和一致性。

CDN 常见问题包括缓存未刷新、不同地区命中不同节点、回源失败、HTTPS 证书配置错误、Host 头转发错误、真实客户端 IP 获取错误、缓存了不该缓存的用户私有内容。配置 CDN 时必须明确哪些内容可缓存、缓存多久、如何刷新、如何回源、如何透传 Header。

在 Web 安全中,CDN 也可能隐藏源站 IP,但如果源站暴露、历史 DNS 记录泄露、邮件服务同机、证书透明日志暴露、接口绕过 CDN,攻击者仍可能找到源站。因此源站也要做访问控制,不能只依赖 CDN。

21. 网络安全基础:边界、身份和最小权限#

网络安全不是只装一个防火墙。它首先要明确资产、边界、信任关系和数据流。哪些主机可以访问哪些服务,哪些端口必须暴露,哪些接口只允许内网,哪些操作需要身份认证和审计,都应该有清晰规则。

常见网络攻击包括嗅探、ARP 欺骗、DNS 劫持、端口扫描、暴力破解、DDoS、中间人攻击、会话劫持、弱 TLS 配置、未授权访问、SSRF 内网探测、横向移动等。

端口扫描用于发现开放服务。防御不是简单关闭扫描,而是减少暴露面、隐藏非必要服务、限制来源 IP、启用认证、及时修补漏洞、监控异常连接。真正安全的服务应该经得起被发现,而不是依赖“不被扫到”。

DDoS 通过大量流量或请求耗尽带宽、连接表、CPU、内存或应用资源。防护需要分层:运营商清洗、CDN/WAF、限流、连接保护、缓存、弹性扩容、黑白名单和业务降级。应用层 DDoS 更难处理,因为请求看起来可能像正常用户。

内网安全同样重要。很多攻击不是从公网直接打穿核心系统,而是先拿到一台边缘主机,再通过凭据、共享目录、弱口令、未隔离网段、过宽安全组横向移动。VLAN、ACL、零信任、堡垒机、最小权限、日志审计和补丁管理都属于内网安全建设。

22. Web 请求的完整路径#

把前面的知识串起来,访问一个 HTTPS 网站大致经历这些步骤:

  1. 浏览器检查 URL、HSTS、缓存和 Service Worker。
  2. 浏览器或系统查询 DNS 缓存。
  3. 如果没有缓存,向 DNS 解析器查询域名。
  4. 操作系统选择目标 IP 和源 IP。
  5. 根据路由表判断目标是否同网段。
  6. 如果跨网段,通过 ARP 获取默认网关 MAC。
  7. 客户端发送 TCP SYN 到目标 IP 的 443 端口。
  8. 中间可能经过交换机、路由器、NAT、防火墙、运营商网络和 CDN。
  9. 服务端或 CDN 返回 SYN+ACK,客户端回 ACK,TCP 连接建立。
  10. TLS 握手,验证证书,协商密钥。
  11. 浏览器发送 HTTP 请求。
  12. 反向代理或网关转发到后端服务。
  13. 后端服务处理业务,可能访问数据库、缓存、对象存储和其他微服务。
  14. 响应沿路径返回客户端。
  15. 浏览器解析 HTML,继续请求 CSS、JS、图片、字体和接口。

任何一步出问题,用户看到的都可能只是“网页打不开”或“加载慢”。因此排障必须按路径拆分,而不是盲目重启。

23. 常见网络故障排查思路#

排查网络问题要先分类。是完全不通,还是偶发不通;是单个用户不通,还是所有用户不通;是域名不通,还是 IP 不通;是 TCP 建连失败,还是建连后超时;是 HTTP 4xx,还是 5xx;是公网问题,还是内网问题。

常用排查顺序如下:

  1. 查本机配置:IP、掩码、网关、DNS 是否正确。
  2. 查链路:网线、Wi-Fi、交换机端口、VLAN 是否正常。
  3. 查网关:能否 ping 通默认网关。
  4. 查路由:路由表是否有正确下一跳。
  5. 查 DNS:域名是否解析正确。
  6. 查端口:目标 IP 和端口是否可连接。
  7. 查防火墙:本机、防火墙、云安全组、ACL 是否拦截。
  8. 查应用:服务是否监听、日志是否报错、反向代理是否转发。
  9. 查路径:traceroute、MTR、抓包确认丢在哪里。
  10. 查性能:延迟、丢包、重传、队列、CPU、连接数和限流。

Windows 常用命令:

Terminal window
ipconfig /all
ping 目标地址
tracert 目标地址
nslookup 域名
Test-NetConnection 目标地址 -Port 443
netstat -ano
route print
arp -a

Linux 常用命令:

Terminal window
ip addr
ip route
ping 目标地址
traceroute 目标地址
dig 域名
ss -tunlp
curl -v https://example.com
tcpdump -i eth0 host 目标地址

抓包是最终证据之一。抓包能回答很多问题:请求有没有发出去,响应有没有回来,三次握手在哪一步失败,是否发生重传,TLS 握手是否失败,HTTP 状态码是什么,DNS 返回了什么,是否有 RST 或 ICMP 错误。

但抓包也要选对位置。在客户端抓不到回包,不代表服务端没回,可能是中间设备丢了。在服务端看不到请求,不代表客户端没发,可能是路由、防火墙或 NAT 出问题。复杂问题常需要客户端、中间节点、服务端同时取证。

24. 面试中常问的网络问题#

第一个常见问题是“输入 URL 到页面展示发生了什么”。回答时不要只说 DNS、TCP、HTTP,要按层次说清:URL 解析、DNS、路由、ARP、TCP、TLS、HTTP、服务端处理、浏览器渲染、缓存和连接复用。

第二个问题是 TCP 和 UDP 的区别。不能只说 TCP 可靠、UDP 不可靠。要补充连接语义、字节流与数据报、拥塞控制、应用场景、延迟、报文边界和应用层可靠性设计。

第三个问题是三次握手和四次挥手。重点解释为什么需要三次,为什么关闭常见四次,TIME_WAIT 的意义,以及 SYN Flood、半连接队列、连接复用等工程问题。

第四个问题是 HTTP 和 HTTPS 的区别。重点是 TLS 提供加密、完整性和身份认证;证书链和域名校验;HTTPS 不能解决服务端业务漏洞;TLS 终止位置会影响安全边界。

第五个问题是 GET 和 POST 的区别。不要回答成“GET 安全,POST 不安全”。更准确的说法是:GET 通常用于读取,参数常出现在 URL 中,语义应安全且幂等;POST 通常用于提交或创建,不要求幂等。安全性取决于 HTTPS、认证、授权和服务端校验,不取决于方法名本身。

第六个问题是 DNS 解析过程。要说出缓存、递归解析器、根域、顶级域、权威服务器、A/AAAA/CNAME、TTL。还能补充 CDN 调度、DNS 劫持和 DoH/DoT。

第七个问题是为什么 ping 不通但网页能打开。可能是 ICMP 被禁、目标不响应 Echo、网页走代理、HTTP 服务正常但 ICMP 被防火墙丢弃。反过来,ping 通也不代表业务端口通。

第八个问题是 502、503、504 的区别。502 通常表示网关收到上游无效响应,503 表示服务不可用或过载维护,504 表示网关等待上游超时。实际要看反向代理和上游日志。

第九个问题是什么是粘包。准确说 TCP 是字节流,没有消息边界。所谓粘包是应用层协议没有正确分帧导致多条消息连在一起或一条消息被拆开。解决方法是固定长度、分隔符、长度字段或应用层帧格式。

第十个问题是 NAT 的作用和问题。NAT 节省 IPv4 地址、隐藏内网、实现地址转换,但会破坏端到端连接,影响 P2P、日志审计、端口映射和故障定位。

25. 学习网络的正确方式#

学习网络不能只背定义。建议用三条线并行。

第一条线是协议线。从以太网、ARP、IP、ICMP、TCP、UDP、DNS、HTTP、TLS 按层理解每个协议解决什么问题,不解决什么问题。

第二条线是路径线。拿“访问一个网站”“连接一台服务器”“内网访问数据库”“客户端上传文件”这类场景,把数据从应用到网卡再到远端的路径画出来。

第三条线是排障线。遇到问题时按 DNS、路由、端口、连接、TLS、HTTP、应用日志逐层定位。每个结论都尽量用命令、日志或抓包证明。

如果是网络安全方向,还要多加一条攻击与防御线。理解 ARP 欺骗、DNS 劫持、端口扫描、未授权访问、SSRF、横向移动、DDoS、TLS 配置错误等问题对应网络协议的哪一层,攻击者利用了什么信任假设,防御应该放在哪个边界。

26. 一张总表#

下面这张表可以作为复习索引。

层次典型协议/技术核心问题常见故障
物理层双绞线、光纤、无线比特如何变成信号断线、干扰、速率协商失败
数据链路层Ethernet、Wi-Fi、ARP、VLAN同一链路内如何交付ARP 异常、VLAN 错误、MAC 表异常
网络层IP、ICMP、路由协议跨网络如何寻址转发路由缺失、环路、TTL 超时、不可达
传输层TCP、UDP进程间如何通信端口不通、重传、超时、连接堆积
应用层DNS、HTTP、TLS、DHCP应用语义如何表达解析错误、证书错误、状态码异常
安全边界防火墙、NAT、WAF、ACL谁能访问什么策略拦截、暴露面过大、日志缺失

27. 总结#

计算机网络的核心不是把所有协议名背下来,而是理解每一层为什么存在、解决什么问题、把什么问题留给了其他层。

链路层解决局域网内的帧交付,网络层解决跨网段寻址和路由,传输层解决进程间通信语义,应用层解决具体业务协议。DNS、HTTP、TLS、NAT、防火墙、CDN、负载均衡和代理都是在这套基础上继续扩展出来的工程能力。

真正掌握网络,要能在脑子里跑通一条数据路径:应用生成请求,DNS 找到地址,路由表选择下一跳,ARP 找到网关 MAC,TCP 建立连接,TLS 完成加密,HTTP 发送业务数据,中间设备转发或过滤,服务端处理并返回响应。排障时再把这条路径反过来拆,逐层验证。

网络知识看起来散,但主线很清楚:数据如何被封装,地址如何被定位,路径如何被选择,连接如何被维护,错误如何被发现,风险如何被控制。只要抓住这条主线,计算机网络就不再是零散概念,而是一套可以解释、设计、优化和排查的系统。

计算机网络万字详解:从分层模型到协议、安全与排障
https://konwait12.github.io/my-kon-blog/posts/计算机网络/
作者
k-on!--wait
发布于
2026-07-27
许可协议
CC BY-NC-SA 4.0