07d82d046b
- Move standalone AI-related files into 8-artificial-intelligence directory - Move development tools content into 2-development-tools directory - Move server/backend content into 4-server-and-backend directory - Create new index files for each section - Update .gitignore to exclude old backup directories - Update theme imports for new component locations
626 lines
26 KiB
Markdown
626 lines
26 KiB
Markdown
# 网络:两台电脑如何对话
|
|
::: tip 🎯 核心问题
|
|
**当你在浏览器输入 www.baidu.com 并按下回车,到底发生了什么?** 这个简单动作背后,其实隐藏着一个庞大的"快递系统":从填写订单(URL)到查询地址簿(DNS),从建立运输通道(TCP)到快递员送货(HTTP),最终在你屏幕上展示(渲染)。本章带你完整理解这个神奇的过程。
|
|
:::
|
|
|
|
---
|
|
|
|
## 0. 五层模型总览:快递公司的组织架构
|
|
|
|
现代计算机网络就像一个**快递公司**,采用五层分层模型,每层负责不同的工作:
|
|
|
|
<NetworkLayers />
|
|
|
|
::: tip 💡 为什么需要分层?
|
|
想象一个没有分工的快递公司:
|
|
|
|
- **每个人什么都干**:接电话、分拣、打包、开车送货...
|
|
- **效率极低**:没人专精,什么都做不好
|
|
- **难以扩展**:想加个"航空运输",所有员工都要重新培训
|
|
|
|
**分层设计**解决了这些问题:
|
|
|
|
- **模块化**:每层独立设计和实现,改一层不影响其他层
|
|
- **易维护**:网络慢了?查物理层和数据链路层;安全问题?查应用层
|
|
- **标准化**:统一的接口和协议,不同厂商的设备能互相通信
|
|
- **可扩展**:新技术可以替换某一层,比如从铜线换成光纤,只需改物理层
|
|
:::
|
|
|
|
| 层级 | 技术名称 | 快递公司类比 | 核心职责 | 常见协议/设备 |
|
|
| ----- | ---------- | ---------------- | ---------------------------------------- | ------------------ |
|
|
| **5** | 应用层 | **客户服务部门** | 处理具体业务(网页、邮件、文件传输) | HTTP, FTP, SMTP |
|
|
| **4** | 传输层 | **包裹分拣组** | 确保包裹可靠送达(_TCP_)或快速送达(_UDP_) | TCP, UDP |
|
|
| **3** | 网络层 | **路由规划部** | 规划最佳运输路线,选择走哪条路 | IP, 路由器 |
|
|
| **2** | 数据链路层 | **车队管理** | 管理车辆之间的通信,MAC 地址寻址 | 以太网, 交换机 |
|
|
| **1** | 物理层 | **道路和车辆** | 实际的物理传输(电缆、光纤、无线电波) | 网线, 光纤, 无线电 |
|
|
|
|
::: tip 📊 逐行解读这张表
|
|
**第5层(应用层)**:这是你直接接触的层。浏览器打开网页、邮件客户端收发邮件,都是在调用这一层的服务。它负责处理"具体的业务逻辑"。
|
|
|
|
**第4层(传输层)**:应用层把数据给它,它负责决定用什么方式"寄送"。TCP 像挂号信(可靠但慢),UDP 像平信(快但可能丢)。这一层用**端口号**区分不同的应用程序。
|
|
|
|
**第3层(网络层)**:这是"全球定位系统"层。IP 地址就在这一层,路由器根据 IP 地址规划路线:"从北京到上海,应该走哪条高速公路?"
|
|
|
|
**第2层(数据链路层)**:这一层负责"两站之间"的运输。就像快递车从北京分拣中心开到天津分拣中心,这一段路的通信规则由数据链路层规定。MAC 地址(设备身份证)也在这一层。
|
|
|
|
**第1层(物理层)**:这是最底层,实实在在的物理介质。网线里的电信号、光纤里的光信号、Wi-Fi 的无线电波,都是物理层负责的。
|
|
:::
|
|
|
|
---
|
|
|
|
## 1. 物理层:道路和车辆
|
|
|
|
### 1.1 基本概念
|
|
|
|
::: tip 💡 物理层是什么?
|
|
物理层负责在物理介质上传输原始的比特流(0 和 1)。
|
|
|
|
**生活类比**:想象快递公司需要有**道路**和**运输车辆**:
|
|
|
|
- 道路可以是:高速公路(光纤)、普通公路(网线)、航空线路(无线电波)
|
|
- 车辆可以是:卡车(有线传输)、飞机(无线传输)
|
|
- 货物(数据)最终都要变成能在这些道路上运输的形式
|
|
:::
|
|
|
|
**关键任务**:
|
|
|
|
- **定义物理设备标准**:RJ45 网线接口长什么样、光纤接口怎么接
|
|
- **规定传输介质**:
|
|
- 有线:双绞线(网线)、光纤、同轴电缆
|
|
- 无线:Wi-Fi、蓝牙、4G/5G
|
|
- **确定电气特性**:
|
|
- 用多少电压代表 0 和 1?
|
|
- 信号频率是多少?
|
|
- 怎么编码(比如曼彻斯特编码)?
|
|
|
|
### 1.2 传输介质
|
|
|
|
**有线介质**:
|
|
|
|
| 类型 | 速度 | 距离 | 特点 | 用途 |
|
|
| ------------ | ---------------- | -------- | ------------------------ | ------------------------ |
|
|
| **双绞线** | 100Mbps - 10Gbps | 100m | 成本低,易安装,抗干扰一般 | 家庭、办公室网络 |
|
|
| **光纤** | 1Gbps - 100Tbps | 几十公里 | 速度极快,抗干扰强,成本高 | 长距离、高带宽(跨海光缆) |
|
|
| **同轴电缆** | 10Mbps - 1Gbps | 500m | 抗干扰好,但较粗 | 早期以太网、有线电视 |
|
|
|
|
::: tip 💡 为什么光纤这么快?
|
|
光纤用**光**而不是电信号传输:
|
|
|
|
- 光的频率极高,能调制大量数据(就像用不同颜色的光同时传输)
|
|
- 光在光纤中几乎不衰减,能传输几十公里
|
|
- 不受电磁干扰(高压电线、雷电都不怕)
|
|
|
|
这就像用电信号寄快递(铜线)vs 用光速寄快递(光纤),速度差异是本质级别的。
|
|
:::
|
|
|
|
**无线介质**:
|
|
|
|
| 类型 | 频段 | 速度 | 距离 | 用途 |
|
|
| --------- | -------------------- | ------------------- | ------ | -------------------- |
|
|
| **Wi-Fi** | 2.4GHz / 5GHz / 6GHz | 几十 Mbps - 几 Gbps | 几十米 | 家庭、办公室无线网络 |
|
|
| **蓝牙** | 2.4GHz | 1-3 Mbps | 10m | 耳机、键鼠等短距设备 |
|
|
| **4G/5G** | 700MHz - 39GHz | 10Mbps - 10Gbps | 几公里 | 移动网络 |
|
|
|
|
### 1.3 常见设备
|
|
|
|
**中继器(Repeater)**:
|
|
|
|
- **作用**:放大信号,延长传输距离
|
|
- **生活类比**:快递中转站。快递车开了 500 公里需要加油、司机换班,中继器就是让信号"休息充电"的地方
|
|
- **为什么需要**:电信号在铜线传输会衰减,传几百米就弱得识别不出了
|
|
|
|
**集线器(Hub)**:
|
|
|
|
- **作用**:多端口中继器,从一个口收到的信号复制到所有口
|
|
- **缺点**:效率低,已被**交换机**取代
|
|
- **生活类比**:一个大厅,一个人喊话,所有人都能听到,但不是喊给谁的
|
|
|
|
---
|
|
|
|
## 2. 数据链路层:车队管理
|
|
|
|
### 2.1 基本概念
|
|
|
|
::: tip 💡 数据链路层做什么?
|
|
数据链路层负责在**直连的两个节点**间传输数据帧。
|
|
|
|
**生活类比**:快递公司的**车队管理**:
|
|
|
|
- 快递车从北京分拣中心开到天津分拣中心(点对点)
|
|
- 车上有司机(负责驾驶)、装卸工(负责搬运)
|
|
- 两边分拣中心之间有约定:"每天 8 点发车""用标准尺寸的快递箱"
|
|
:::
|
|
|
|
**核心功能**:
|
|
|
|
- **物理地址寻址(MAC 地址)**:每个网卡都有全球唯一的身份证号
|
|
- **帧的封装和解封装**:把网络层的数据包"装进车厢"
|
|
- **错误检测**:通过 CRC 校验,发现数据是否损坏
|
|
- **介质访问控制**:多个设备共享一条线时,谁先谁后?(比如 Wi-Fi 多台设备连一个路由器)
|
|
|
|
### 2.2 MAC 地址:设备的身份证
|
|
|
|
**MAC 地址格式**:`00:1A:2B:3C:4D:5E`
|
|
|
|
::: tip 💡 MAC 地址 vs IP 地址
|
|
这是初学者最容易混淆的两个概念:
|
|
|
|
| 特性 | MAC 地址 | IP 地址 |
|
|
| ------------ | ----------------------- | --------------------------- |
|
|
| **作用范围** | 局域网内(同一个 Wi-Fi) | 全球互联网 |
|
|
| **分配方式** | 网卡出厂时烧录,全球唯一 | 由网络管理员动态分配 |
|
|
| **变化** | 一般不变(除非换网卡) | 经常变化(连不同 Wi-Fi 会变) |
|
|
| **类比** | 身份证号(跟随你一生) | 家庭住址(搬家就变) |
|
|
| **层级** | 数据链路层(第2层) | 网络层(第3层) |
|
|
|
|
**生活类比**:你要寄快递:
|
|
|
|
- **MAC 地址** = 收件人身份证号(唯一标识这个人)
|
|
- **IP 地址** = 收件人家庭住址(用于路由)
|
|
|
|
快递员实际上需要"住址"才能送货,但身份证号能确保"这个人"是唯一的。
|
|
:::
|
|
|
|
**查看你的 MAC 地址**:
|
|
|
|
```bash
|
|
# Windows
|
|
ipconfig /all
|
|
# 找到 "物理地址",类似: 00-1A-2B-3C-4D-5E
|
|
|
|
# macOS/Linux
|
|
ifconfig
|
|
# 找到 "ether",类似: 00:1a:2b:3c:4d:5e
|
|
```
|
|
|
|
### 2.3 以太网帧:快递车厢的结构
|
|
|
|
**以太网帧**就是数据链路层的"快递车厢",有一套标准格式:
|
|
|
|
```
|
|
+------------+----------+---------+-----+----------+
|
|
| 目标 MAC | 源 MAC | 类型 | 数据 | FCS |
|
|
| (6 bytes) | (6 bytes) | (2 bytes)| | (4 bytes) |
|
|
+------------+----------+---------+-----+----------+
|
|
```
|
|
|
|
::: tip 💡 逐行理解帧结构
|
|
**目标 MAC (6字节)**:这帧数据给谁的?就像快递单上的收件人
|
|
|
|
**源 MAC (6字节)**:这帧数据谁发的?就像寄件人信息
|
|
|
|
**类型 (2字节)**:车厢里装的是什么?
|
|
|
|
- `0x0800` = IPv4 数据包
|
|
- `0x0806` = ARP 请求(查询 MAC 地址)
|
|
- `0x86DD` = IPv6 数据包
|
|
|
|
**数据(46-1500字节)**:实际要传输的内容,就是网络层的 IP 数据包
|
|
|
|
**FCS (4字节)**:帧校验序列。接收方用这个检查数据是否损坏,就像快递单上的"完好无损"签章
|
|
:::
|
|
|
|
### 2.4 交换机:聪明的交通指挥
|
|
|
|
**交换机**是数据链路层的核心设备。
|
|
|
|
::: tip 💡 交换机 vs 集线器
|
|
**集线器**:
|
|
|
|
- 收到数据后,简单地"广播"到所有端口
|
|
- 所有设备都能看到,不是给自己的也得收下来再丢弃
|
|
- 效率低,安全性差
|
|
|
|
**交换机**:
|
|
|
|
- **学习 MAC 地址**:记住哪个端口连了哪个 MAC 地址
|
|
- **智能转发**:只把数据发到目标设备所在的端口
|
|
- **效率高**:设备 A 和 B 通信,设备 C 不会收到
|
|
:::
|
|
|
|
**交换机工作流程**:
|
|
|
|
1. **学习**:设备 A (MAC: 11:11...) 发数据给交换机端口1
|
|
- 交换机记下:"11:11... 在端口1"
|
|
|
|
2. **转发**:设备 A 要发数据给设备 B (MAC: 22:22...)
|
|
- 交换机查表:"22:22... 在端口3"
|
|
- 只把数据从端口3 发出去
|
|
|
|
3. **广播**:如果交换机不知道目标 MAC 在哪(比如第一次通信)
|
|
- 向所有端口(除了来源端口)广播
|
|
- "谁是 22:22...?" 目标设备回应后,交换机学习到它的位置
|
|
|
|
---
|
|
|
|
## 3. 网络层:路由规划部
|
|
|
|
### 3.1 IP 地址:互联网的门牌号
|
|
|
|
::: tip 💡 IP 地址是什么?
|
|
**IP 地址**就像互联网上的**家庭住址**,每台联网设备都需要一个。
|
|
|
|
**IPv4 地址格式**:`192.168.1.1`
|
|
|
|
- 32 位,通常用点分十进制表示
|
|
- 分为**网络部分**(前3段)和**主机部分**(最后1段)
|
|
- `192.168.1` 是网络号(这个小区)
|
|
- `.1` 是主机号(这个小区的1号房)
|
|
:::
|
|
|
|
**IP 地址分类(像城市规模)**:
|
|
|
|
| 类别 | 范围示例 | 网络数 | 每个网络主机数 | 用途 | 类比 |
|
|
| -------- | --------------------- | --------- | -------------- | ---------------- | ---------- |
|
|
| **A 类** | 1.0.0.0 - 126.x.x.x | 126 | 16,777,214 | 超大型网络(早期) | 特大城市 |
|
|
| **B 类** | 128.0.0.0 - 191.x.x.x | 16,384 | 65,534 | 中型网络 | 中等城市 |
|
|
| **C 类** | 192.0.0.0 - 223.x.x.x | 2,097,152 | 254 | 小型网络(最常见) | 小区、村庄 |
|
|
|
|
::: tip 💡 私有 IP 地址:内网 vs 外网
|
|
有些 IP 地址段被保留为"私有",不能直接在互联网上使用:
|
|
|
|
| 类别 | 私有 IP 范围 | 为什么用私有 IP? |
|
|
| -------- | ------------------------------- | -------------------- |
|
|
| **A 类** | `10.0.0.0 - 10.255.255.255` | 大型企业内网 |
|
|
| **B 类** | `172.16.0.0 - 172.31.255.255` | 中型企业内网 |
|
|
| **C 类** | `192.168.0.0 - 192.168.255.255` | 家庭、小公司(最常见) |
|
|
|
|
**生活类比**:
|
|
|
|
- **私有 IP** = 你家的门牌号("3单元501室")
|
|
- **公网 IP** = 你家在地图上的地址("XX市XX区XX路XX号")
|
|
|
|
快递员(互联网)只能送到公网地址(你家楼门口),然后需要"路由器/NAT"转换到你家的私有地址。
|
|
:::
|
|
|
|
### 3.2 子网划分:把大楼分成多个单元
|
|
|
|
::: tip 💡 为什么要划分子网?
|
|
想象一个公司:
|
|
|
|
- **不划分子网**:财务部、技术部、市场部都在 `192.168.1.0` 网段
|
|
- 广播风暴:一个人发广播,所有人都能收到
|
|
- 安全问题:技术部的开发服务器,市场部也能访问
|
|
- 管理混乱:网络出问题,不知道是哪个部门的
|
|
|
|
**划分子网**:
|
|
|
|
- 财务部:`192.168.1.0/24`
|
|
- 技术部:`192.168.2.0/24`
|
|
- 市场部:`192.168.3.0/24`
|
|
|
|
各部门隔离,广播不出部门,管理更清晰。
|
|
:::
|
|
|
|
**子网掩码的作用**:
|
|
|
|
子网掩码用来区分 IP 地址的哪部分是"网络号",哪部分是"主机号"。
|
|
|
|
```
|
|
IP: 192.168.1.10
|
|
掩码: 255.255.255.0
|
|
-----------------------
|
|
网络号: 192.168.1.0 (前3段)
|
|
主机号: .10 (最后1段)
|
|
```
|
|
|
|
**CIDR 表示法**:`192.168.1.0/24`
|
|
|
|
- `/24` 表示前 24 位是网络位
|
|
- 剩余 8 位是主机位(2^8 - 2 = 254 个可用 IP)
|
|
|
|
<SubnetCalculator />
|
|
|
|
### 3.3 路由器:GPS 导航
|
|
|
|
**路由器**是网络层的核心设备,负责"规划最佳路线"。
|
|
|
|
::: tip 💡 路由器怎么工作?
|
|
**生活类比**:GPS 导航软件
|
|
|
|
- 你输入:"从北京天安门到上海外滩"
|
|
- GPS 查询地图数据库,规划出最佳路线
|
|
- 路线可能是:"北京 → 天津 → 济南 → 南京 → 上海"
|
|
|
|
**路由器的工作**:
|
|
|
|
1. 收到数据包,查看目标 IP 地址
|
|
2. 查询**路由表**(路由器的"地图数据库")
|
|
3. 选择最佳路径:"下一站该去哪个路由器?"
|
|
4. 转发到下一跳
|
|
:::
|
|
|
|
**路由表示例**:
|
|
|
|
```
|
|
目标网络 子网掩码 网关 接口
|
|
192.168.1.0 255.255.255.0 0.0.0.0 eth0
|
|
192.168.2.0 255.255.255.0 192.168.1.2 eth0
|
|
0.0.0.0 0.0.0.0 192.168.1.1 eth0 (默认网关)
|
|
```
|
|
|
|
::: tip 💡 理解路由表
|
|
**第1行**:"发往 192.168.1.0 网段的包,直接从 eth0 接口发出去"(本地网络,不需要网关)
|
|
|
|
**第2行**:"发往 192.168.2.0 网段的包,发给 192.168.1.2(它是这个网络的'门')"
|
|
|
|
**第3行(默认网关)**:"不知道怎么走的包,全部发给 192.168.1.1(它连接互联网,会继续帮你转发)"
|
|
|
|
这就像你去外地:
|
|
|
|
- 在本地:走路就到(直接路由)
|
|
- 去隔壁城市:坐大巴(走网关)
|
|
- 去国外:先到机场,再转机(默认网关 → 层层转发)
|
|
:::
|
|
|
|
### 3.4 ICMP:网络诊断工具
|
|
|
|
**ICMP (Internet Control Message Protocol)** 用于网络诊断,最常用的就是 `ping` 命令。
|
|
|
|
**Ping 命令**:
|
|
|
|
```bash
|
|
ping google.com
|
|
|
|
# 输出示例
|
|
PING google.com (142.250.185.238): 56 data bytes
|
|
64 bytes from 142.250.185.238: icmp_seq=0 ttl=117 time=12.4 ms
|
|
64 bytes from 142.250.185.238: icmp_seq=1 ttl=117 time=11.8 ms
|
|
```
|
|
|
|
::: tip 💡 理解 ping 的输出
|
|
**`64 bytes`**:数据包大小(64 字节)
|
|
|
|
**`icmp_seq=0`**:这是第 0 个包(序列号)
|
|
|
|
**`ttl=117`**:Time To Live(生存时间)
|
|
|
|
- 每经过一个路由器减 1
|
|
- 防止数据包在网络中无限循环
|
|
- 117 表示这个包经过了 255-117=138 个路由器
|
|
|
|
**`time=12.4 ms`**:往返时间(RTT, Round Trip Time)
|
|
|
|
- 你的电脑发送请求 → google.com 收到 → google.com 回应 → 你的电脑收到
|
|
- 整个过程花了 12.4 毫秒
|
|
- 数值越小,网络延迟越低,网速越快
|
|
:::
|
|
|
|
---
|
|
|
|
## 4. 传输层:可靠送达 vs 快速送达
|
|
|
|
### 4.1 端口:应用的门牌号
|
|
|
|
::: tip 💡 为什么需要端口号?
|
|
想象一台服务器:
|
|
|
|
- **只有 IP 地址**:数据包到了服务器,服务器不知道给哪个程序
|
|
- Web 服务器要?
|
|
- 邮件服务器要?
|
|
- 数据库服务器要?
|
|
|
|
**端口号**就像"公司里的部门号":
|
|
|
|
- IP: 公司地址(XX 市XX 路 XX 号)
|
|
- 端口: 部门(301 财务部、302 技术部、303 市场部)
|
|
|
|
数据包到了公司,前台(操作系统)根据"部门号"(端口)转发给对应部门(应用程序)。
|
|
:::
|
|
|
|
**端口号范围**:
|
|
|
|
| 范围 | 类型 | 示例 | 需要权限? |
|
|
| --------------- | -------- | ----------------------------- | --------------------------------- |
|
|
| **0-1023** | 系统端口 | 80(HTTP)、443(HTTPS)、22(SSH) | ✅ 需要(防止普通用户占用关键服务) |
|
|
| **1024-49151** | 注册端口 | 3306(MySQL)、5432(PostgreSQL) | ❌ 不需要 |
|
|
| **49152-65535** | 动态端口 | 客户端临时使用 | ❌ 不需要 |
|
|
|
|
**常见端口速查**:
|
|
|
|
| 端口 | 服务 | 用途 |
|
|
| --------- | ---------- | --------------- |
|
|
| **21** | FTP | 文件传输 |
|
|
| **22** | SSH | 远程登录(安全) |
|
|
| **80** | HTTP | 网页(不安全) |
|
|
| **443** | HTTPS | 网页(安全,加密) |
|
|
| **3306** | MySQL | 数据库 |
|
|
| **5432** | PostgreSQL | 数据库 |
|
|
| **6379** | Redis | 缓存数据库 |
|
|
| **27017** | MongoDB | 数据库 |
|
|
|
|
### 4.2 TCP vs UDP:挂号信 vs 平信
|
|
|
|
<TcpUdpComparison />
|
|
|
|
**选择建议**:
|
|
|
|
| 场景 | 选择 | 原因 |
|
|
| ------------------ | ------- | ----------------------------------------- |
|
|
| **邮件、文件传输** | **TCP** | 不能丢数据,一个字节错误都可能导致文件损坏 |
|
|
| **视频、直播** | **UDP** | 实时性优先,丢几帧没关系,但不能卡顿 |
|
|
| **网页浏览** | **TCP** | 可靠性重要,网页内容必须完整 |
|
|
| **在线游戏** | **UDP** | 速度优先,位置信息晚到比没到好 |
|
|
|
|
::: tip 💡 深入理解:TCP 为什么可靠?
|
|
TCP 通过以下机制保证可靠:
|
|
|
|
1. **三次握手**:确保双方都能发送和接收
|
|
2. **序列号**:每个字节都有编号,丢包能发现
|
|
3. **确认应答**:收到数据必须回复 ACK,没收到就重传
|
|
4. **流量控制**:接收方告诉发送方"我的缓冲区快满了,慢点发"
|
|
5. **拥塞控制**:网络拥堵时,降低发送速度,避免"堵死"
|
|
|
|
这就像寄挂号信:
|
|
|
|
- 要签收(ACK)
|
|
- 丢了邮政局会重传
|
|
- 太多信件会积压,需要控制发送速度
|
|
:::
|
|
|
|
### 4.3 TCP 三次握手:建立可靠连接
|
|
|
|
```
|
|
客户端 服务器
|
|
| |
|
|
| -------- SYN(seq=x) ---------> | 第1次:你好,我想和你通信(SYN)
|
|
| | (x 是随机数,防止伪造)
|
|
| |
|
|
| <--- SYN-ACK(seq=y, ack=x+1) ---| 第2次:收到!我也想和你通信(SYN)
|
|
| | 我收到了你的 x,所以 ack=x+1
|
|
| |
|
|
| -------- ACK(ack=y+1) --------> | 第3次:我收到了你的 y,所以 ack=y+1
|
|
| | 连接建立成功!
|
|
```
|
|
|
|
::: tip 💡 为什么需要三次,不是两次?
|
|
想象打电话:
|
|
|
|
- **A**:你好!(SYN)
|
|
- **B**:你好!(SYN-ACK) —- 此时 B 确认了 A 能收到,但 A 还不确定 B 能不能收到
|
|
- **A**:我听到了!(ACK) —- 现在双方都知道对方能收能发
|
|
|
|
如果只有两次:
|
|
|
|
- A 发 SYN
|
|
- B 回 SYN-ACK
|
|
- 连接建立...但 B 不知道 A 有没有收到 SYN-ACK!如果 A 没收到,会重复发 SYN,但 B 以为已经建立连接,会出现问题
|
|
:::
|
|
|
|
---
|
|
|
|
## 5. 应用层:具体的业务
|
|
|
|
### 5.1 HTTP/HTTPS:网页的对话协议
|
|
|
|
**HTTP (HyperText Transfer Protocol)** 是浏览器和服务器之间的"对话规则"。
|
|
|
|
| 特性 | HTTP | HTTPS |
|
|
| ---------- | ------------------------ | ----------------------------- |
|
|
| **加密** | ❌ 否(明文,任何人都能看) | ✅ 是(TLS/SSL 加密) |
|
|
| **端口** | 80 | 443 |
|
|
| **安全性** | 低(密码、账号会被窃取) | 高(即使被拦截,看到的也是乱码) |
|
|
| **性能** | 略快(无加密开销) | 略慢(加密解密需要时间) |
|
|
| **SEO** | 不友好(搜索引擎会降权) | 友好(搜索引擎优先收录 HTTPS) |
|
|
|
|
**HTTP 请求方法**:
|
|
|
|
| 方法 | 描述 | 生活类比 | 示例 |
|
|
| ---------- | ---------------------- | ---------------------------- | ---------------------- |
|
|
| **GET** | 获取资源 | "我要看这个商品的详情" | 查看网页、加载图片 |
|
|
| **POST** | 提交数据 | "我要下单,这是我的收货信息" | 登录、注册、提交表单 |
|
|
| **PUT** | 更新资源(整体替换) | "我要完整更新这个商品的信息" | 修改用户资料(全部字段) |
|
|
| **PATCH** | 部分更新 | "我只想改商品的名称" | 修改用户资料(只改名字) |
|
|
| **DELETE** | 删除资源 | "我要删除这个订单" | 删除文章、删除评论 |
|
|
| **HEAD** | 只获取响应头(不要内容) | "这个文件还在吗?有多大?" | 检查资源是否存在 |
|
|
|
|
**HTTP 状态码**(服务器给你的"回复"):
|
|
|
|
```
|
|
2xx 成功
|
|
- 200 OK:请求成功,这是你要的内容
|
|
- 201 Created:创建成功(比如注册新用户)
|
|
|
|
3xx 重定向
|
|
- 301 Moved Permanently:永久搬家了,请用新地址
|
|
- 302 Found:暂时搬迁,请访问新地址
|
|
|
|
4xx 客户端错误(你发的问题)
|
|
- 400 Bad Request:请求格式错误,服务器看不懂
|
|
- 401 Unauthorized:未授权,请先登录
|
|
- 403 Forbidden:禁止访问,即使登录也不行
|
|
- 404 Not Found:资源不存在(网址错了?)
|
|
|
|
5xx 服务器错误(服务器的问题)
|
|
- 500 Internal Server Error:服务器内部出错了
|
|
- 502 Bad Gateway:网关错误,服务器连不上后端
|
|
- 503 Service Unavailable:服务暂时不可用(过载或维护)
|
|
```
|
|
|
|
### 5.2 DNS:互联网的地址簿
|
|
|
|
**DNS (Domain Name System)** 域名系统,把人类可读的域名转换成机器可读的 IP 地址。
|
|
|
|
::: tip 💡 为什么需要 DNS?
|
|
**没有 DNS 的世界**:
|
|
|
|
- 你需要记住所有网站的 IP 地址
|
|
- 访问百度:`https://110.242.68.66`(你能记住吗?)
|
|
- IP 地址会变(服务器迁移),你需要重新记住
|
|
|
|
**有 DNS 的世界**:
|
|
|
|
- 记住域名:`baidu.com`
|
|
- DNS 帮你转换:`baidu.com` → `110.242.68.66`
|
|
- IP 变了?更新 DNS 记录就行,域名不用变
|
|
:::
|
|
|
|
**DNS 查询过程**:
|
|
|
|
```
|
|
你(浏览器)
|
|
↓ 问:baidu.com 的 IP 是多少?
|
|
本地 DNS 服务器(你的网络运营商,如电信/联通)
|
|
↓ 不知道? 问:
|
|
根域名服务器(全球13组,管理所有顶级域)
|
|
↓ 告诉:去问 .cn 的管理者
|
|
顶级域名服务器(Verisign 管理 .cn)
|
|
↓ 告诉:去问 baidu.com 的管理者
|
|
权威 DNS 服务器(Baidu 自己的 DNS)
|
|
↓ 告诉:baidu.com 的 IP 是 110.242.68.66
|
|
返回 IP 地址给浏览器
|
|
```
|
|
|
|
**DNS 记录类型**:
|
|
|
|
| 类型 | 用途 | 示例 |
|
|
| --------- | ---------------- | ------------------------------------------------------ |
|
|
| **A** | 域名 → IPv4 地址 | `www.example.com → 93.184.216.34` |
|
|
| **AAAA** | 域名 → IPv6 地址 | `www.example.com → 2606:2800:220:1:248:1893:25c8:1946` |
|
|
| **CNAME** | 别名 | `www.baidu.com → a.baidu.com`(多个域名指向同一个 IP) |
|
|
| **MX** | 邮件服务器 | `@example.com → mail.example.com`(邮件发到哪里) |
|
|
|
|
---
|
|
|
|
## 6. 总结:网络五层模型核心要点
|
|
|
|
| 层级 | 核心概念 | 关键技术 | 生活类比 |
|
|
| -------------- | ------------------- | -------------------- | ---------------------------------- |
|
|
| **应用层** | 应用程序之间的通信 | HTTP, FTP, SMTP, DNS | 具体业务(寄快递、发邮件、浏览网页) |
|
|
| **传输层** | 端到端的可靠传输 | TCP(可靠), UDP(快速) | 快递方式(挂号信 vs 平信) |
|
|
| **网络层** | 路由选择,寻址 | IP, 路由器, ICMP | GPS 导航,规划路线 |
|
|
| **数据链路层** | 点对点传输,MAC 寻址 | 以太网, 交换机, MAC | 车队管理,车辆之间通信 |
|
|
| **物理层** | 实际的物理传输 | 光纤, 网线, 无线电波 | 道路和运输工具 |
|
|
|
|
**学习建议**:
|
|
|
|
- ✅ **从应用层往下学**:你每天都在用 HTTP,DNS,从熟悉的开始
|
|
- ✅ **多用工具**:ping, traceroute, Wireshark,观察实际网络
|
|
- ✅ **理解协议细节**:阅读 RFC 文档(比如 RFC 791 定义 IP)
|
|
- ✅ **抓包分析**:用 Wireshark 观察 TCP 三次握手、HTTP 请求
|
|
- ✅ **关注安全**:了解 DDoS、中间人攻击等常见威胁
|
|
|
|
掌握计算机网络,你就能理解互联网的运作原理,写出更高效的网络应用!
|
|
|
|
---
|
|
|
|
## 附录:名词速查表
|
|
|
|
| 名词 | 英文 | 用人话解释 |
|
|
| --------------- | ----------------------------- | ------------------------------------------- |
|
|
| **OSI 模型** | Open Systems Interconnection | 七层网络模型(理论标准) |
|
|
| **TCP/IP 模型** | - | 实际使用的四层/五层模型 |
|
|
| **MAC 地址** | Media Access Control | 网卡的物理地址,全球唯一,像身份证 |
|
|
| **IP 地址** | Internet Protocol | 设备在互联网上的逻辑地址,像住址 |
|
|
| **子网掩码** | Subnet Mask | 区分 IP 地址的网络部分和主机部分 |
|
|
| **端口** | Port | 应用程序的"门牌号",区分同一台设备的不同服务 |
|
|
| **TCP** | Transmission Control Protocol | 可靠传输协议,三次握手,不丢包 |
|
|
| **UDP** | User Datagram Protocol | 快速传输协议,不保证可靠,可能丢包 |
|
|
| **DNS** | Domain Name System | 域名系统,把域名转成 IP 地址 |
|
|
| **HTTP** | HyperText Transfer Protocol | 超文本传输协议,网页通信规则 |
|
|
| **HTTPS** | HTTP Secure | 加密的 HTTP,更安全 |
|
|
| **路由器** | Router | 网络层设备,规划路线,连接不同网络 |
|
|
| **交换机** | Switch | 数据链路层设备,智能转发数据帧 |
|
|
| **TTL** | Time To Live | 生存时间,防止数据包无限循环 |
|
|
| **RTT** | Round Trip Time | 往返时间,数据从发送到接收确认的时间 |
|