跳到主要内容
预计阅读 27 分钟

初识计算机网络 — 从一根网线到全球互联

你每天打开手机刷视频、发消息、抢红包,背后都有一张无形的”网”在支撑。理解这张网的运作原理,就像拿到了互联网世界的建筑蓝图。

📋 开篇自测:你已经知道多少?

  1. 你能说出 OSI 七层模型中每一层的名称和核心职责吗?
  2. 一个 HTTP 请求从浏览器发出到服务器接收,中间经过了哪些”包装”步骤?
  3. 交换机和路由器分别工作在网络的哪一层?它们的核心区别是什么?

一、为什么要学习计算机网络

1.1 网络无处不在

想象一个场景:你在北京的咖啡馆,用手机给远在深圳的朋友发送了一条微信消息。这条消息从你的手机出发,经过咖啡馆的 Wi-Fi 路由器,穿过运营商的核心网络,跨越数千公里的光纤线路,最终抵达朋友的手机屏幕。整个过程不到一秒。

这背后涉及的技术环节之多,远超普通用户的想象。无线信号编码、IP 寻址、TCP 可靠传输、TLS 加密、HTTP 协议交互——每一个环节都依赖计算机网络的基础知识。

1.2 学习网络的三重境界

学习计算机网络,大致会经历三个阶段:

第一阶段:知道名词。能说出 TCP、IP、HTTP 这些缩写代表什么,但问细节就含糊其辞。

第二阶段:理解原理。能完整描述一个网络请求从发出到响应的全过程,知道每一层协议做了什么。

第三阶段:融会贯通。遇到网络故障能快速定位问题层次,设计系统架构时能合理选择协议和方案。

本课程的目标,就是带你从第一阶段稳步走到第三阶段。

🤔 想一想 你在工作中遇到过哪些网络相关的问题?当时是如何解决的?如果让你重新面对,你觉得缺少哪些知识?


二、网络分层模型:为什么要”分层”

2.1 从现实世界的类比说起

假设你要给远方的朋友寄一个包裹。你会经历这样的流程:

  1. 写信:把想说的话写在纸上(应用层面的内容)
  2. 装信封:写上收件人和寄件人地址(寻址信息)
  3. 交给快递员:快递员拿走包裹(传输环节)
  4. 物流中转:经过多个分拣中心(路由转发)
  5. 最后一公里:快递员把包裹送到朋友手上(物理传递)

计算机网络的分层思想与此类似——每一层负责一个明确的职责,层与层之间通过约定好的接口传递数据。

2.2 分层的核心好处

第一,降低复杂度。如果把所有功能揉在一起,任何一个小改动都可能牵一发动全身。分层后,每一层只关注自己的事情。

第二,便于标准化。不同厂商可以在同一层使用不同的实现,只要接口一致就能互联互通。

第三,易于替换和升级。你可以把有线网络换成 Wi-Fi,只需要改动底层,上层的 HTTP 应用毫无感知。

2.3 OSI 七层模型

国际标准化组织(ISO)在 1984 年正式发布了 OSI(Open Systems Interconnection)参考模型(ISO 7498),将网络通信划分为七层:

+-------------------+
|    7. 应用层       |  <-- 用户直接交互的层:HTTP, FTP, SMTP, DNS
+-------------------+
|    6. 表示层       |  <-- 数据格式转换、加密解密、压缩
+-------------------+
|    5. 会话层       |  <-- 建立/管理/终止会话
+-------------------+
|    4. 传输层       |  <-- 端到端通信:TCP, UDP
+-------------------+
|    3. 网络层       |  <-- 路由和寻址:IP
+-------------------+
|    2. 数据链路层   |  <-- 相邻节点间的帧传输:以太网, Wi-Fi
+-------------------+
|    1. 物理层       |  <-- 比特流在物理介质上的传输
+-------------------+

记忆口诀:「物数网传会表应」——从下到上,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

2.4 TCP/IP 四层(五层)模型

OSI 模型虽然理论上很完美,但在实际工程中,人们发现会话层和表示层的功能往往被合并到应用层中。因此,实际使用最广泛的是 TCP/IP 模型:

OSI 七层                TCP/IP 四层              TCP/IP 五层(教学常用)
+-----------+          +-----------+            +-----------+
| 应用层     |          |           |            | 应用层     |
+-----------+          | 应用层     |            +-----------+
| 表示层     |          |           |            (合并到应用层)
+-----------+          |           |
| 会话层     |          |           |
+-----------+          +-----------+            +-----------+
| 传输层     |          | 传输层     |            | 传输层     |
+-----------+          +-----------+            +-----------+
| 网络层     |          | 网际层     |            | 网络层     |
+-----------+          +-----------+            +-----------+
| 数据链路层 |          |           |            | 数据链路层 |
+-----------+          | 网络接口层 |            +-----------+
| 物理层     |          |           |            | 物理层     |
+-----------+          +-----------+            +-----------+

在日常工作中,我们最常提到的是五层模型:应用层、传输层、网络层、数据链路层、物理层。本课程后续章节也将以此为主线展开。

🤔 想一想 有人说”OSI 模型只是理论,TCP/IP 模型才是实践”,你怎么看待这个说法?在你的实际工作中,更多地用到哪个模型?


三、数据封装:网络包的”套娃”之旅

3.1 封装与解封装

网络通信的核心过程可以用一个词概括:封装(Encapsulation)。

当一个应用层的 HTTP 请求需要发送出去时,它会像”套娃”一样被层层包装:

发送端(自顶向下封装):

应用层数据:     [HTTP 请求内容]
                    |
传输层:         [TCP头部 | HTTP 请求内容]
                    |
网络层:         [IP头部 | TCP头部 | HTTP 请求内容]
                    |
数据链路层:     [以太网头部 | IP头部 | TCP头部 | HTTP 请求内容 | FCS]
                    |
物理层:         转换为比特流 --> 0101001110...

到达接收端后,过程完全反过来——从底层开始,逐层”拆包”,最终将 HTTP 请求内容交给 Web 服务器处理。

3.2 每一层的数据单元名称

每一层对数据的称呼都不同,这一点在排查网络问题时非常重要:

层次数据单元名称英文术语
应用层消息/报文Message
传输层段(TCP)/ 数据报(UDP)Segment / Datagram
网络层分组/数据包Packet
数据链路层Frame
物理层比特Bit

3.3 一个完整的封装示例

让我们追踪一次 curl http://example.com 请求的封装过程:

步骤1 - 应用层构造 HTTP 请求:
+---------------------------------------------+
| GET / HTTP/1.1                              |
| Host: example.com                           |
| User-Agent: curl/7.68.0                     |
+---------------------------------------------+

步骤2 - 传输层添加 TCP 头部:
+----------+---------------------------------------------+
| TCP 头部  | GET / HTTP/1.1 ...                         |
| 源端口    |                                             |
| 目的端口  |                                             |
| 序列号    |                                             |
| ...       |                                             |
+----------+---------------------------------------------+

步骤3 - 网络层添加 IP 头部:
+---------+----------+---------------------------------------------+
| IP 头部  | TCP 头部  | GET / HTTP/1.1 ...                         |
| 源IP     |          |                                             |
| 目的IP   |          |                                             |
+---------+----------+---------------------------------------------+

步骤4 - 数据链路层添加以太网帧头和帧尾:
+--------+---------+----------+---------------------------+-----+
| 帧头    | IP 头部 | TCP 头部  | GET / HTTP/1.1 ...       | FCS |
| 源MAC   |         |          |                           |     |
| 目的MAC |         |          |                           |     |
+--------+---------+----------+---------------------------+-----+

这里有一个至关重要的原则:在网络上传输的包都是完整的。可以有下层没上层,但绝不可能有上层没下层。

也就是说,即使 TCP 在进行三次握手时还没有应用层数据,IP 头和以太网帧头也一定会包裹在外面。


四、网络设备与它们的”视野”

4.1 常见网络设备一览

不同的网络设备工作在不同的层次,这决定了它们能”看到”网络包中多少内容:

工作层次与设备对应关系:

第七层(应用层)     --> 应用网关、WAF、负载均衡器(L7)
第四层(传输层)     --> 四层负载均衡器(L4 LB)
第三层(网络层)     --> 路由器、三层交换机
第二层(数据链路层) --> 交换机(二层)、网桥
第一层(物理层)     --> 集线器、中继器、网线、光纤

4.2 集线器(Hub)—— 物理层的”大喇叭”

集线器是最简单的网络连接设备。它的工作原理极其粗暴:从一个端口收到的信号,会被无差别地复制并转发到所有其他端口。

        +----------+
        |   Hub    |
        +--+-+-+---+
           | | |
     +-----+ | +-----+
     |       |       |
   PC-A    PC-B    PC-C

PC-A 发送数据 --> Hub 复制到所有端口 --> PC-B 和 PC-C 都会收到

集线器不做任何智能判断。它不认识 MAC 地址,也不认识 IP 地址,纯粹是一个信号放大器。在现代网络中已经基本被淘汰。

4.3 交换机(Switch)—— 数据链路层的”精准投递员”

交换机比集线器聪明得多。它能读取数据帧中的目标 MAC 地址,然后只把数据转发到对应的端口:

        +------------+
        |  Switch    |
        | MAC 地址表  |
        +--+-+-+-----+
           | | |
     +-----+ | +-----+
     |       |       |
   PC-A    PC-B    PC-C
  (MAC-A) (MAC-B) (MAC-C)

PC-A 发送帧(目标=MAC-B) --> Switch 查表 --> 只转发到 PC-B 的端口

交换机维护一张 MAC 地址表(也叫 CAM 表),记录每个端口连接的设备 MAC 地址。数据帧到达后,交换机根据目标 MAC 地址查表,精确转发。

4.4 路由器(Router)—— 网络层的”导航仪”

路由器工作在第三层(网络层),它能读取 IP 头部中的目标 IP 地址,然后根据路由表决定下一跳的方向:

                  +----------+
  192.168.1.0/24  | Router   |  10.0.0.0/24
  <------------>  | 路由表    |  <------------>
  LAN-A           +----------+  LAN-B

  路由表示例:
  目的网络           下一跳          接口
  192.168.1.0/24     直连            eth0
  10.0.0.0/24        直连            eth1
  0.0.0.0/0          10.0.0.1        eth1   (默认路由)

路由器的核心能力是跨网段转发。同一网段内的通信靠交换机和 MAC 地址就够了,但要跨网段通信,就必须依赖路由器。

4.5 设备对比总结

设备工作层次识别的地址核心功能
集线器物理层信号广播/放大
交换机数据链路层MAC 地址局域网内精确转发
路由器网络层IP 地址跨网段路由转发

🤔 想一想 当你在家里用 Wi-Fi 上网时,你的无线路由器同时充当了哪几种角色?它是纯粹的路由器吗?


五、一个网络请求的完整旅程

5.1 场景设定

你在浏览器地址栏输入 http://www.example.com,按下回车。让我们完整追踪这个请求的生命周期。

5.2 第一站:DNS 解析

浏览器首先需要把域名 www.example.com 翻译成 IP 地址。这个翻译过程由 DNS(域名系统)完成:

浏览器 --> 本地DNS缓存 --> 操作系统DNS缓存 --> 路由器缓存
    |                                             |
    | (如果缓存都没命中)                            |
    +---> 递归DNS服务器 --> 根DNS --> .com DNS --> example.com DNS
                                                    |
                                      返回: 93.184.216.34

5.3 第二站:TCP 三次握手

拿到 IP 地址后,浏览器需要与服务器建立 TCP 连接。这就是著名的”三次握手”:

浏览器                                    服务器
  |                                         |
  |  1. SYN (seq=100)                       |
  |  "你好,我想建立连接"                     |
  | ------->----->----->----->--------->     |
  |                                         |
  |  2. SYN+ACK (seq=200, ack=101)          |
  |  "好的,我也准备好了"                     |
  |     <--------<------<------<-------     |
  |                                         |
  |  3. ACK (seq=101, ack=201)              |
  |  "收到,开始传数据吧"                     |
  | ------->----->----->----->--------->     |
  |                                         |
  |  === 连接建立完成 ===                     |

5.4 第三站:HTTP 请求与响应

TCP 连接建立后,浏览器发送 HTTP 请求,服务器返回响应:

浏览器 --> 发送 HTTP GET 请求 --> 服务器
浏览器 <-- 返回 HTTP 200 响应 <-- 服务器(包含 HTML 页面)

5.5 第四站:四次挥手断开连接

数据传输完毕后,双方通过四次挥手断开 TCP 连接:

浏览器                                    服务器
  |  1. FIN  "我说完了"                     |
  | ------->----->----->--------->          |
  |  2. ACK  "好的,我知道了"                |
  |     <--------<------<--------          |
  |  3. FIN  "我也说完了"                    |
  |     <--------<------<--------          |
  |  4. ACK  "好的,再见"                    |
  | ------->----->----->--------->          |
  |                                         |
  |  === 连接关闭 ===                        |

5.6 全景图

把整个过程串起来:

[DNS解析] --> [TCP三次握手] --> [HTTP请求/响应] --> [TCP四次挥手]
   |              |                  |                  |
  应用层        传输层             应用层              传输层
   |              |                  |                  |
   +--- 每一步都经过: 网络层(IP) + 数据链路层(MAC) + 物理层 ---+

六、协议栈的协同工作

6.1 层与层之间不是”各管各”

一个常见的误解是:TCP 在做三次握手时,其他层在”休息”。实际上恰恰相反——TCP 每发送一个 SYN 包,IP 层要负责寻址路由,数据链路层要负责找到下一跳的 MAC 地址,物理层要把比特流送上网线。

所有层次是同步协作的,只是各司其职。

6.2 二层设备也能”看到”七层数据

另一个常见误解是:经过交换机时,HTTP 数据”不经过”二层设备。

事实上,一个完整的网络包在经过交换机时,包里面的 HTTP 内容、TCP 头部、IP 头部全部都在。只不过交换机只关心最外层的以太网帧头中的 MAC 地址,其余内容它”不看”——不是没有,而是不在意。

交换机收到的完整帧:
+--------+---------+----------+------------------+-----+
| MAC头  | IP头    | TCP头    | HTTP数据          | FCS |
+--------+---------+----------+------------------+-----+
  ^
  |
  交换机只看这一部分,决定转发到哪个端口

七、章节小结

本章建立了计算机网络的整体框架,这是后续所有章节的地基。核心知识点回顾:

  1. 分层是网络设计的核心思想:OSI 七层提供理论框架,TCP/IP 五层是工程实践的主流模型。
  2. 数据封装是层与层协作的机制:发送时自顶向下逐层添加头部,接收时自底向上逐层剥离。
  3. 网络设备按层次分工:集线器(L1)、交换机(L2)、路由器(L3),层次越高能识别的信息越多。
  4. 网络上传输的包都是完整的:可以有下层没上层,绝不可能有上层没下层。

📝 结尾自测:检验你的收获

  1. OSI 七层模型与 TCP/IP 五层模型的对应关系是什么?哪些层被合并了?
  2. 一个 HTTP 请求在发送端会经历怎样的封装过程?每一层添加了什么?
  3. 交换机和路由器的核心区别是什么?它们分别依据什么地址来转发数据?
  4. 为什么说”网络上跑的包都是完整的”?二层交换机收到的帧里有没有 HTTP 数据?
  5. 一次完整的网页访问(从输入 URL 到页面显示),需要经过哪些主要步骤?

下一章预告:你已经知道网络是分层工作的了。下一章我们将从最底层出发,深入物理层和数据链路层——了解数据如何变成电信号在铜线和光纤中传递,以太网帧的格式是什么样的,交换机如何通过 MAC 地址学习来精准转发数据帧。

购买课程解锁全部内容

网络通信第一课:10 章掌握计算机网络

¥29.90