初识计算机网络 — 从一根网线到全球互联
你每天打开手机刷视频、发消息、抢红包,背后都有一张无形的”网”在支撑。理解这张网的运作原理,就像拿到了互联网世界的建筑蓝图。
📋 开篇自测:你已经知道多少?
- 你能说出 OSI 七层模型中每一层的名称和核心职责吗?
- 一个 HTTP 请求从浏览器发出到服务器接收,中间经过了哪些”包装”步骤?
- 交换机和路由器分别工作在网络的哪一层?它们的核心区别是什么?
一、为什么要学习计算机网络
1.1 网络无处不在
想象一个场景:你在北京的咖啡馆,用手机给远在深圳的朋友发送了一条微信消息。这条消息从你的手机出发,经过咖啡馆的 Wi-Fi 路由器,穿过运营商的核心网络,跨越数千公里的光纤线路,最终抵达朋友的手机屏幕。整个过程不到一秒。
这背后涉及的技术环节之多,远超普通用户的想象。无线信号编码、IP 寻址、TCP 可靠传输、TLS 加密、HTTP 协议交互——每一个环节都依赖计算机网络的基础知识。
1.2 学习网络的三重境界
学习计算机网络,大致会经历三个阶段:
第一阶段:知道名词。能说出 TCP、IP、HTTP 这些缩写代表什么,但问细节就含糊其辞。
第二阶段:理解原理。能完整描述一个网络请求从发出到响应的全过程,知道每一层协议做了什么。
第三阶段:融会贯通。遇到网络故障能快速定位问题层次,设计系统架构时能合理选择协议和方案。
本课程的目标,就是带你从第一阶段稳步走到第三阶段。
🤔 想一想 你在工作中遇到过哪些网络相关的问题?当时是如何解决的?如果让你重新面对,你觉得缺少哪些知识?
二、网络分层模型:为什么要”分层”
2.1 从现实世界的类比说起
假设你要给远方的朋友寄一个包裹。你会经历这样的流程:
- 写信:把想说的话写在纸上(应用层面的内容)
- 装信封:写上收件人和寄件人地址(寻址信息)
- 交给快递员:快递员拿走包裹(传输环节)
- 物流中转:经过多个分拣中心(路由转发)
- 最后一公里:快递员把包裹送到朋友手上(物理传递)
计算机网络的分层思想与此类似——每一层负责一个明确的职责,层与层之间通过约定好的接口传递数据。
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 |
+--------+---------+----------+------------------+-----+
^
|
交换机只看这一部分,决定转发到哪个端口
七、章节小结
本章建立了计算机网络的整体框架,这是后续所有章节的地基。核心知识点回顾:
- 分层是网络设计的核心思想:OSI 七层提供理论框架,TCP/IP 五层是工程实践的主流模型。
- 数据封装是层与层协作的机制:发送时自顶向下逐层添加头部,接收时自底向上逐层剥离。
- 网络设备按层次分工:集线器(L1)、交换机(L2)、路由器(L3),层次越高能识别的信息越多。
- 网络上传输的包都是完整的:可以有下层没上层,绝不可能有上层没下层。
📝 结尾自测:检验你的收获
- OSI 七层模型与 TCP/IP 五层模型的对应关系是什么?哪些层被合并了?
- 一个 HTTP 请求在发送端会经历怎样的封装过程?每一层添加了什么?
- 交换机和路由器的核心区别是什么?它们分别依据什么地址来转发数据?
- 为什么说”网络上跑的包都是完整的”?二层交换机收到的帧里有没有 HTTP 数据?
- 一次完整的网页访问(从输入 URL 到页面显示),需要经过哪些主要步骤?
下一章预告:你已经知道网络是分层工作的了。下一章我们将从最底层出发,深入物理层和数据链路层——了解数据如何变成电信号在铜线和光纤中传递,以太网帧的格式是什么样的,交换机如何通过 MAC 地址学习来精准转发数据帧。
购买课程解锁全部内容
网络通信第一课:10 章掌握计算机网络
¥29.90