计算机网络:从分层模型到 TCP/IP、HTTP 与网络排查

计算机网络的本质,是让不同设备在遵守同一套规则的前提下交换数据。我们平时访问网页、刷视频、发送消息、远程登录服务器、调用接口,本质上都是数据在网络中被拆分、封装、传输、转发、重组和解析的过程。

这篇文章会从整体视角介绍计算机网络的核心知识,包括网络分层、IP、TCP、UDP、DNS、HTTP、HTTPS、常见网络设备以及排查思路。

1. 为什么需要计算机网络

如果两台计算机彼此独立,它们只能处理本地数据。网络的出现,使计算机之间可以共享资源、传递消息和协同工作。

常见场景包括:

  • 浏览器访问网站
  • 手机 App 调用后端接口
  • 服务之间通过 RPC 或 HTTP 通信
  • 数据库远程连接
  • 文件上传下载
  • 即时通信、视频会议、直播
  • 云服务器、容器和微服务之间的通信

计算机网络解决的核心问题可以概括为:

  1. 如何找到目标机器
  2. 如何把数据发送过去
  3. 如何保证数据不乱、不丢、不重复
  4. 如何让不同程序识别彼此的数据格式
  5. 如何在不可信网络中保证安全

2. 网络分层模型

网络通信非常复杂,所以通常会采用"分层"的方式理解和设计。

经典模型有两个:

  • OSI 七层模型
  • TCP/IP 四层模型

2.1 OSI 七层模型

层级 名称 作用 常见协议或设备
第 7 层 应用层 面向应用程序,定义数据格式和交互规则 HTTP、FTP、SMTP、DNS
第 6 层 表示层 数据编码、压缩、加密 TLS、JPEG、UTF-8
第 5 层 会话层 管理会话连接 RPC 会话、登录状态
第 4 层 传输层 端到端传输,处理可靠性和端口 TCP、UDP
第 3 层 网络层 IP 寻址和路由转发 IP、ICMP、路由器
第 2 层 数据链路层 局域网内传输,MAC 地址寻址 Ethernet、交换机
第 1 层 物理层 电信号、光信号、无线信号传输 网线、光纤、网卡

OSI 模型更偏理论,便于学习和定位问题。

2.2 TCP/IP 四层模型

实际工程中更常用 TCP/IP 模型。

层级 名称 对应 OSI 常见协议
第 4 层 应用层 应用层、表示层、会话层 HTTP、DNS、SMTP
第 3 层 传输层 传输层 TCP、UDP
第 2 层 网络层 网络层 IP、ICMP
第 1 层 网络接口层 数据链路层、物理层 Ethernet、Wi-Fi

可以简单理解为:

  • 应用层:数据要表达什么
  • 传输层:数据如何送到对应进程
  • 网络层:数据如何送到对应主机
  • 网络接口层:数据如何在具体链路上传输

3. 数据是如何被发送出去的

假设你在浏览器访问:

text 复制代码
https://example.com/index.html

大致过程如下:

  1. 浏览器解析 URL
  2. 通过 DNS 查询域名对应的 IP 地址
  3. 与目标服务器建立 TCP 连接
  4. 如果是 HTTPS,还要进行 TLS 握手
  5. 浏览器发送 HTTP 请求
  6. 服务器返回 HTTP 响应
  7. 浏览器解析 HTML、CSS、JavaScript 并渲染页面
  8. 连接复用或关闭

数据在发送时会被逐层封装:

text 复制代码
应用层数据
  ↓ 加上 TCP 头
TCP 报文段
  ↓ 加上 IP 头
IP 数据包
  ↓ 加上以太网头和尾
以太网帧
  ↓ 转换成电信号、光信号或无线信号
物理传输

接收方则按相反方向逐层解封装。

4. IP 地址:网络中的主机标识

IP 地址用于标识网络中的一台主机。

常见的 IPv4 地址类似:

text 复制代码
192.168.1.10
8.8.8.8

IPv4 地址由 32 位二进制组成,通常写成四段十进制数字。

4.1 公网 IP 和私网 IP

公网 IP 可以在互联网中直接路由,私网 IP 通常只在局域网内部使用。

常见私网地址范围:

私网地址段 示例
10.0.0.0/8 10.1.2.3
172.16.0.0/12 172.16.1.10
192.168.0.0/16 192.168.1.100

家用路由器、公司内网、容器网络中经常使用私网 IP。

4.2 子网掩码与网段

IP 地址通常会搭配子网掩码,用于判断两个地址是否在同一网段。

例如:

text 复制代码
IP:   192.168.1.10
掩码: 255.255.255.0
CIDR: 192.168.1.10/24

/24 表示前 24 位是网络号,剩余 8 位是主机号。

同一网段中的机器可以直接通过二层网络通信;不同网段之间通信通常需要经过网关或路由器。

5. MAC 地址:局域网中的设备标识

IP 地址用于跨网络寻址,MAC 地址用于局域网内寻址。

MAC 地址通常长这样:

text 复制代码
00:1A:2B:3C:4D:5E

当一台机器要在局域网内发送数据时,需要知道目标 IP 对应的 MAC 地址。这时会使用 ARP 协议。

5.1 ARP 的作用

ARP 用于根据 IP 地址查询 MAC 地址。

例如,主机 A 想找 192.168.1.20 的 MAC 地址,会在局域网广播:

text 复制代码
谁是 192.168.1.20?请告诉 192.168.1.10

目标机器收到后回复自己的 MAC 地址。

6. TCP:可靠的传输协议

TCP 是面向连接、可靠、有序的传输协议。

它常用于:

  • HTTP/HTTPS
  • MySQL
  • SSH
  • SMTP
  • FTP

TCP 主要解决:

  • 数据是否送达
  • 数据是否有序
  • 数据是否重复
  • 网络拥塞时如何控制发送速度
  • 接收方处理不过来时如何进行流量控制

6.1 TCP 三次握手

TCP 通信前需要建立连接,这个过程叫三次握手。
服务端 客户端 服务端 客户端 #mermaid-svg-k1e1wEGYIJUsPSdw{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-k1e1wEGYIJUsPSdw .error-icon{fill:#552222;}#mermaid-svg-k1e1wEGYIJUsPSdw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-k1e1wEGYIJUsPSdw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-k1e1wEGYIJUsPSdw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-k1e1wEGYIJUsPSdw .marker.cross{stroke:#333333;}#mermaid-svg-k1e1wEGYIJUsPSdw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-k1e1wEGYIJUsPSdw p{margin:0;}#mermaid-svg-k1e1wEGYIJUsPSdw .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k1e1wEGYIJUsPSdw text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-k1e1wEGYIJUsPSdw .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw .sequenceNumber{fill:white;}#mermaid-svg-k1e1wEGYIJUsPSdw #sequencenumber{fill:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-k1e1wEGYIJUsPSdw .messageText{fill:#333;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k1e1wEGYIJUsPSdw .labelText,#mermaid-svg-k1e1wEGYIJUsPSdw .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .loopText,#mermaid-svg-k1e1wEGYIJUsPSdw .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-k1e1wEGYIJUsPSdw .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-k1e1wEGYIJUsPSdw .noteText,#mermaid-svg-k1e1wEGYIJUsPSdw .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-k1e1wEGYIJUsPSdw .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k1e1wEGYIJUsPSdw .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k1e1wEGYIJUsPSdw .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-k1e1wEGYIJUsPSdw .actorPopupMenu{position:absolute;}#mermaid-svg-k1e1wEGYIJUsPSdw .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-k1e1wEGYIJUsPSdw .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-k1e1wEGYIJUsPSdw .actor-man circle,#mermaid-svg-k1e1wEGYIJUsPSdw line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-k1e1wEGYIJUsPSdw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} SYNSYN + ACKACK

简单理解:

  1. 客户端:我想和你建立连接
  2. 服务端:可以,我也准备好了
  3. 客户端:确认,我们开始通信

三次握手的目的,是确认双方的发送和接收能力都正常。

6.2 TCP 四次挥手

连接关闭通常需要四次挥手。
服务端 客户端 服务端 客户端 #mermaid-svg-QVHFpsCLQFlp00eW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QVHFpsCLQFlp00eW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QVHFpsCLQFlp00eW .error-icon{fill:#552222;}#mermaid-svg-QVHFpsCLQFlp00eW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QVHFpsCLQFlp00eW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QVHFpsCLQFlp00eW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QVHFpsCLQFlp00eW .marker.cross{stroke:#333333;}#mermaid-svg-QVHFpsCLQFlp00eW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QVHFpsCLQFlp00eW p{margin:0;}#mermaid-svg-QVHFpsCLQFlp00eW .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QVHFpsCLQFlp00eW text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QVHFpsCLQFlp00eW .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-QVHFpsCLQFlp00eW .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW .sequenceNumber{fill:white;}#mermaid-svg-QVHFpsCLQFlp00eW #sequencenumber{fill:#333;}#mermaid-svg-QVHFpsCLQFlp00eW #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-QVHFpsCLQFlp00eW .messageText{fill:#333;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QVHFpsCLQFlp00eW .labelText,#mermaid-svg-QVHFpsCLQFlp00eW .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .loopText,#mermaid-svg-QVHFpsCLQFlp00eW .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QVHFpsCLQFlp00eW .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-QVHFpsCLQFlp00eW .noteText,#mermaid-svg-QVHFpsCLQFlp00eW .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-QVHFpsCLQFlp00eW .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QVHFpsCLQFlp00eW .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QVHFpsCLQFlp00eW .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QVHFpsCLQFlp00eW .actorPopupMenu{position:absolute;}#mermaid-svg-QVHFpsCLQFlp00eW .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-QVHFpsCLQFlp00eW .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QVHFpsCLQFlp00eW .actor-man circle,#mermaid-svg-QVHFpsCLQFlp00eW line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-QVHFpsCLQFlp00eW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} FINACKFINACK

因为 TCP 是全双工通信,双方都可以独立发送和关闭自己的数据流,所以关闭连接通常比建立连接多一步。

6.3 TCP 为什么可靠

TCP 的可靠性主要来自这些机制:

  • 序列号:标记数据顺序
  • 确认应答:接收方告诉发送方哪些数据收到了
  • 超时重传:超过时间未确认则重发
  • 滑动窗口:提升传输效率
  • 流量控制:避免接收方被压垮
  • 拥塞控制:避免网络被打满

7. UDP:更轻量的传输协议

UDP 是无连接、不保证可靠、不保证顺序的传输协议。

它的特点是:

  • 开销小
  • 延迟低
  • 不需要建立连接
  • 不负责重传和排序

常见使用场景:

  • DNS 查询
  • 视频直播
  • 语音通话
  • 在线游戏
  • QUIC/HTTP/3 底层传输

UDP 并不是"不好",而是把可靠性控制交给了应用层。对于实时音视频来说,偶尔丢一两个包可能比等待重传更可接受。

8. TCP 和 UDP 对比

对比项 TCP UDP
是否连接 面向连接 无连接
可靠性 可靠传输 不保证可靠
顺序 保证顺序 不保证顺序
速度 相对较慢 相对较快
开销 较大 较小
典型场景 网页、数据库、SSH DNS、直播、游戏、语音

选择 TCP 还是 UDP,本质取决于业务更看重可靠性还是实时性。

9. DNS:把域名转换成 IP

人更容易记住域名,计算机通信需要 IP 地址,所以需要 DNS。

例如:

text 复制代码
www.example.com -> 93.184.216.34

DNS 查询大致过程:

  1. 查浏览器缓存
  2. 查操作系统缓存
  3. 查本地 hosts 文件
  4. 请求本地 DNS 服务器
  5. 递归查询根域名服务器、顶级域名服务器、权威域名服务器
  6. 返回最终 IP 地址

DNS 常见记录类型:

类型 作用
A 域名指向 IPv4 地址
AAAA 域名指向 IPv6 地址
CNAME 域名别名
MX 邮件服务器
TXT 文本记录,常用于验证
NS 指定域名服务器

10. HTTP:应用层通信协议

HTTP 是浏览器和服务器之间最常见的应用层协议。

一个 HTTP 请求通常包含:

http 复制代码
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html

一个 HTTP 响应通常包含:

http 复制代码
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1024

<html>
  <body>Hello</body>
</html>

10.1 常见 HTTP 方法

方法 含义
GET 获取资源
POST 创建资源或提交数据
PUT 整体更新资源
PATCH 局部更新资源
DELETE 删除资源
HEAD 只获取响应头
OPTIONS 查询支持的方法或跨域预检

10.2 常见 HTTP 状态码

状态码 含义
200 请求成功
201 创建成功
301 永久重定向
302 临时重定向
400 请求参数错误
401 未认证
403 无权限
404 资源不存在
500 服务端内部错误
502 网关错误
503 服务不可用
504 网关超时

11. HTTPS:加密的 HTTP

HTTPS 可以理解为:

text 复制代码
HTTPS = HTTP + TLS

HTTP 明文传输,容易被窃听、篡改或伪装。HTTPS 通过 TLS 提供:

  • 加密:防止内容被窃听
  • 完整性校验:防止内容被篡改
  • 身份认证:确认访问的服务端是真的

HTTPS 握手中会涉及证书、非对称加密、对称加密和密钥协商。

简单理解:

  1. 浏览器连接服务器
  2. 服务器返回证书
  3. 浏览器验证证书是否合法
  4. 双方协商会话密钥
  5. 后续数据使用对称加密传输

12. 常见网络设备

12.1 交换机

交换机主要工作在数据链路层,用于连接同一局域网内的设备。

它根据 MAC 地址转发数据帧。

12.2 路由器

路由器主要工作在网络层,用于连接不同网络。

它根据 IP 地址和路由表决定数据包下一跳发往哪里。

12.3 网关

网关通常是当前网络访问其他网络的出口。

例如家用网络中,电脑的默认网关一般是路由器地址:

text 复制代码
192.168.1.1

12.4 防火墙

防火墙用于控制流量是否允许通过。

它可以根据以下条件过滤流量:

  • 源 IP
  • 目标 IP
  • 端口
  • 协议
  • 连接状态
  • 应用层规则

12.5 负载均衡器

负载均衡器用于把请求分发到多台后端服务器。

常见作用:

  • 提高系统吞吐
  • 避免单点故障
  • 做健康检查
  • 支持灰度发布
  • 终止 TLS

13. NAT:私网访问公网的关键

很多设备使用私网 IP,但私网 IP 不能直接在互联网中路由。NAT 用于把私网地址转换成公网地址。

家里多台设备访问互联网时,外部看到的通常是同一个公网 IP。路由器通过端口映射区分不同内部连接。

例如:

text 复制代码
192.168.1.10:50001 -> 公网IP:30001
192.168.1.11:50002 -> 公网IP:30002

NAT 节省了 IPv4 地址,但也让外部主动访问内网设备变得更复杂。

14. 端口:定位具体进程

IP 地址定位主机,端口定位主机上的具体进程。

常见端口:

端口 协议
22 SSH
53 DNS
80 HTTP
443 HTTPS
3306 MySQL
5432 PostgreSQL
6379 Redis
8080 常见 Web 服务端口

例如:

text 复制代码
192.168.1.10:8080

表示访问 192.168.1.10 这台机器上的 8080 端口。

15. 一次网页访问的完整链路

下面用一次 HTTPS 网页访问串起来:
#mermaid-svg-4XMUGtEsKrXaZFVG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4XMUGtEsKrXaZFVG .error-icon{fill:#552222;}#mermaid-svg-4XMUGtEsKrXaZFVG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4XMUGtEsKrXaZFVG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4XMUGtEsKrXaZFVG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG .marker.cross{stroke:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4XMUGtEsKrXaZFVG p{margin:0;}#mermaid-svg-4XMUGtEsKrXaZFVG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster-label text{fill:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster-label span{color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster-label span p{background-color:transparent;}#mermaid-svg-4XMUGtEsKrXaZFVG .label text,#mermaid-svg-4XMUGtEsKrXaZFVG span{fill:#333;color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .node rect,#mermaid-svg-4XMUGtEsKrXaZFVG .node circle,#mermaid-svg-4XMUGtEsKrXaZFVG .node ellipse,#mermaid-svg-4XMUGtEsKrXaZFVG .node polygon,#mermaid-svg-4XMUGtEsKrXaZFVG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .rough-node .label text,#mermaid-svg-4XMUGtEsKrXaZFVG .node .label text,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape .label,#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape .label{text-anchor:middle;}#mermaid-svg-4XMUGtEsKrXaZFVG .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .rough-node .label,#mermaid-svg-4XMUGtEsKrXaZFVG .node .label,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape .label,#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape .label{text-align:center;}#mermaid-svg-4XMUGtEsKrXaZFVG .node.clickable{cursor:pointer;}#mermaid-svg-4XMUGtEsKrXaZFVG .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG .arrowheadPath{fill:#333333;}#mermaid-svg-4XMUGtEsKrXaZFVG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4XMUGtEsKrXaZFVG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4XMUGtEsKrXaZFVG .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4XMUGtEsKrXaZFVG .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4XMUGtEsKrXaZFVG .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4XMUGtEsKrXaZFVG .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster text{fill:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG .cluster span{color:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4XMUGtEsKrXaZFVG .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4XMUGtEsKrXaZFVG rect.text{fill:none;stroke-width:0;}#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape p,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4XMUGtEsKrXaZFVG .icon-shape .label rect,#mermaid-svg-4XMUGtEsKrXaZFVG .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4XMUGtEsKrXaZFVG .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4XMUGtEsKrXaZFVG .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4XMUGtEsKrXaZFVG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入网址
DNS 解析域名
获得服务器 IP
建立 TCP 连接
TLS 握手
发送 HTTP 请求
服务器处理请求
返回 HTTP 响应
浏览器渲染页面

对应到底层网络,大致会经历:

  1. 浏览器生成 HTTP 请求
  2. TLS 对请求进行加密
  3. TCP 拆分数据并加上端口信息
  4. IP 层加上源 IP 和目标 IP
  5. 数据链路层加上 MAC 地址
  6. 数据通过网卡发出
  7. 中间经过交换机、路由器、防火墙、负载均衡器
  8. 服务端接收并逐层解析
  9. 服务端返回响应
  10. 客户端接收响应并展示页面

16. 常见网络问题与排查思路

网络问题通常可以从"分层"角度排查。

16.1 无法访问网站

可以按以下顺序检查:

  1. 本机网络是否正常
  2. DNS 是否解析成功
  3. 目标 IP 是否可达
  4. 目标端口是否开放
  5. 服务端程序是否正常
  6. 防火墙或安全组是否拦截
  7. HTTPS 证书是否异常
  8. 代理、VPN、网关是否影响链路

16.2 常见命令

查看本机 IP

Windows:

powershell 复制代码
ipconfig

Linux/macOS:

bash 复制代码
ifconfig
ip addr
测试连通性
bash 复制代码
ping example.com

ping 使用 ICMP 协议,可以判断目标主机是否可达,但有些服务器会禁用 ICMP,所以 ping 不通不一定代表服务不可用。

查看路由路径

Windows:

powershell 复制代码
tracert example.com

Linux/macOS:

bash 复制代码
traceroute example.com
查询 DNS
bash 复制代码
nslookup example.com

或:

bash 复制代码
dig example.com
测试端口

Windows PowerShell:

powershell 复制代码
Test-NetConnection example.com -Port 443

Linux/macOS:

bash 复制代码
nc -vz example.com 443
查看 HTTP 响应
bash 复制代码
curl -I https://example.com

17. 网络性能指标

常见网络性能指标包括:

指标 含义
带宽 单位时间内理论可传输的数据量
吞吐量 实际传输速度
延迟 数据从发送到接收所需时间
抖动 延迟的波动
丢包率 丢失数据包的比例
并发连接数 同时维持的连接数量

例如视频会议更关注低延迟和低抖动,文件下载更关注吞吐量,在线游戏更关注延迟和丢包。

18. HTTP/1.1、HTTP/2 与 HTTP/3

18.1 HTTP/1.1

HTTP/1.1 支持长连接,但多个请求之间仍然容易出现队头阻塞问题。

18.2 HTTP/2

HTTP/2 引入了多路复用、二进制帧、头部压缩等能力。

优势包括:

  • 一个连接上并发多个请求
  • 减少连接数量
  • 降低头部开销
  • 提升页面加载性能

18.3 HTTP/3

HTTP/3 基于 QUIC,而 QUIC 基于 UDP。

它的优势包括:

  • 更快的连接建立
  • 改善 TCP 层队头阻塞
  • 更适合弱网和移动网络
  • 连接迁移能力更好

19. 网络安全基础

网络安全不是单一技术,而是一套体系。

常见风险包括:

  • 明文传输被窃听
  • DNS 劫持
  • 中间人攻击
  • DDoS 攻击
  • 端口暴露
  • 弱口令
  • 未授权访问
  • API 参数篡改

常见防护手段:

  • 使用 HTTPS
  • 配置防火墙和安全组
  • 最小化暴露端口
  • 使用强密码和密钥认证
  • 对接口做身份认证和权限控制
  • 对请求参数做签名或校验
  • 开启日志和监控
  • 定期更新系统和依赖

20. 总结

计算机网络可以从四个核心层次理解:

  1. 应用层决定"传什么内容"
  2. 传输层决定"送到哪个进程,以及是否可靠"
  3. 网络层决定"送到哪台主机"
  4. 网络接口层决定"在具体链路上如何传输"

在实际工作中,理解网络分层非常重要。它不仅能帮助我们看懂 HTTP、TCP、DNS、NAT、HTTPS 等协议,也能帮助我们更快定位问题。

当遇到网络故障时,不要只看表面现象,可以按层排查:

text 复制代码
应用是否正常
  ↓
端口是否可连
  ↓
DNS 是否正确
  ↓
IP 是否可达
  ↓
路由是否正常
  ↓
链路和设备是否正常

掌握计算机网络,不是为了背协议细节,而是为了理解数据从一个程序到另一个程序之间到底经历了什么。理解这条路径,很多看似复杂的问题都会变得清晰。

相关推荐
数据知道1 小时前
XXE 漏洞深度实战:XML 外部实体攻击与 OOB 带外
xml·网络·安全·网络安全
深圳海导科技1 小时前
海导科技navynav|GNSS测绘电台:在“复杂遮挡环境”的稳定方案
网络·科技
huainingning2 小时前
US226交换机首台web配置后第二台web无法登录问题解决方法
网络
Alkaid20772 小时前
为什么查 IP 有两个结果?这个问题问倒过多少人
网络协议·tcp/ip
九硕智慧建筑一体化厂家2 小时前
打破系统孤岛!IBMS 一体化平台,构建智慧楼宇全域管控体系
运维·网络·人工智能·笔记·智慧城市
Sombra_Olivia2 小时前
复现Windows Server服务RPC请求缓冲区溢出漏洞(MS08067)
网络·windows·安全·web安全·网络安全·渗透测试·vulhub
whyutianict_vv2 小时前
HCIE-Storage存储3.0排错题实战:归因框架与排查命令
linux·服务器·网络
大模型码小白3 小时前
AI安全前沿:AI大模型安全防护的前沿技术
java·网络·人工智能·python·深度学习·学习·安全
海拥✘3 小时前
Python 实战:用 IPPEAK 代理 IP 构建稳定的公开数据采集链路
网络·python·tcp/ip