chore: save local history restorations from accidental git restore
This commit is contained in:
@@ -1,625 +1,84 @@
|
||||
# 网络:两台电脑如何对话
|
||||
# 计算机网络:从输入网址到返回结果的过程
|
||||
|
||||
::: tip 🎯 核心问题
|
||||
**当你在浏览器输入 www.baidu.com 并按下回车,到底发生了什么?** 这个简单动作背后,其实隐藏着一个庞大的"快递系统":从填写订单(URL)到查询地址簿(DNS),从建立运输通道(TCP)到快递员送货(HTTP),最终在你屏幕上展示(渲染)。本章带你完整理解这个神奇的过程。
|
||||
**当你在浏览器输入 www.google.com 并按下回车,到底发生了什么?**
|
||||
|
||||
这个看似简单的动作,背后隐藏着一个庞大精密的跨国“快递系统”。从填写订单(URL解析)到查询地址簿(DNS解析),从建立运输通道(TCP握手)到快递员送货(HTTP请求与响应),最终在你屏幕上拆开包裹组装(浏览器渲染)。本章带你零基础、完整理解这个神奇的过程。
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## 0. 五层模型总览:快递公司的组织架构
|
||||
## 全景演示:网络世界的快递系统
|
||||
|
||||
现代计算机网络就像一个**快递公司**,采用五层分层模型,每层负责不同的工作:
|
||||
你可以通过下方的交互组件,直观地体验从输入网址到看到网页的 5 个关键步骤。先自己点一点,然后再看底下的详细解释!
|
||||
|
||||
<CFNetworkLayers />
|
||||
|
||||
::: 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 的无线电波,都是物理层负责的。
|
||||
:::
|
||||
<UrlToBrowserDemo />
|
||||
|
||||
---
|
||||
|
||||
## 1. 物理层:道路和车辆
|
||||
## 1. 填写购物单 (URL 解析)
|
||||
|
||||
### 1.1 基本概念
|
||||
当你在浏览器的地址栏中输入 `https://www.google.com` 这样一段地址并按下回车,这就像是你准备去商店买东西,首先要在**购物单**上写清楚:
|
||||
|
||||
::: tip 💡 物理层是什么?
|
||||
物理层负责在物理介质上传输原始的比特流(0 和 1)。
|
||||
- **交通方式 (Protocol)**:例如 `https://`,代表你想坐安全级别的最高的“运钞车”(加密通信)去。如果是单纯的 `http://`,就相当于坐普通的“大巴”(明文传输),路上可能会被人偷看行李。
|
||||
- **店铺地址 (Host)**:例如 `www.google.com`,也就是你要去哪家店(域名)。
|
||||
- **商品位置 (Path)**:例如 `/search`,意思是进了商店之后,你要去哪个货架找什么东西(即请求的具体资源路径)。
|
||||
|
||||
**生活类比**:想象快递公司需要有**道路**和**运输车辆**:
|
||||
|
||||
- 道路可以是:高速公路(光纤)、普通公路(网线)、航空线路(无线电波)
|
||||
- 车辆可以是:卡车(有线传输)、飞机(无线传输)
|
||||
- 货物(数据)最终都要变成能在这些道路上运输的形式
|
||||
:::
|
||||
|
||||
**关键任务**:
|
||||
|
||||
- **定义物理设备标准**: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. 查找店铺地址 (DNS 解析)
|
||||
|
||||
### 2.1 基本概念
|
||||
网络世界的“快递员”(路由器设备)是不懂英文的,它们只认数字(也就是 **IP 地址**)。
|
||||
|
||||
::: tip 💡 数据链路层做什么?
|
||||
数据链路层负责在**直连的两个节点**间传输数据帧。
|
||||
它们需要知道对方的精确数字坐标!这就像快递员不知道“王府井百货”在哪,他必须先查地图,找到“北京市东城区王府井大街255号”这个确切的门牌号(比如 `142.250.66.4`)。
|
||||
|
||||
**生活类比**:快递公司的**车队管理**:
|
||||
|
||||
- 快递车从北京分拣中心开到天津分拣中心(点对点)
|
||||
- 车上有司机(负责驾驶)、装卸工(负责搬运)
|
||||
- 两边分拣中心之间有约定:"每天 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...?" 目标设备回应后,交换机学习到它的位置
|
||||
- **本地缓存**:浏览器会先翻翻自己的备忘录(看之前有没有访问过该网站)。
|
||||
- **DNS 系统**:如果在本地找不到,它就会向互联网的“查号台”(DNS 服务器)打电话询问:“请问 google.com 的数字地址是什么?”。一旦获得了对应的 IP 地址,浏览器的快递车就知道该往哪里开了。
|
||||
|
||||
---
|
||||
|
||||
## 3. 网络层:路由规划部
|
||||
## 3. 建立通话 (TCP 握手)
|
||||
|
||||
### 3.1 IP 地址:互联网的门牌号
|
||||
拿到了地址,浏览器不能直接冲过去,万一店今天没开门呢?所以,要先进行一次**“电话确认”**(这叫建立 TCP 连接)。为了确保通话稳定可靠,会有三次非常严谨的“确认打招呼”机制,行业里叫**三次握手 (Three-way Handshake)**:
|
||||
|
||||
::: tip 💡 IP 地址是什么?
|
||||
**IP 地址**就像互联网上的**家庭住址**,每台联网设备都需要一个。
|
||||
- **第一次握手 (浏览器)**:“喂,你好,我要来买东西,你在吗?” (SYN)
|
||||
- **第二次握手 (服务器)**:“我在的,欢迎光临!你也听得到我说话吗?” (SYN-ACK)
|
||||
- **第三次握手 (浏览器)**:“我也听到了!那我就要过来了!” (ACK)
|
||||
|
||||
**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)
|
||||
|
||||
<CFSubnetCalculator />
|
||||
|
||||
### 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. 购买商品 (HTTP 请求与响应)
|
||||
|
||||
### 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 平信
|
||||
|
||||
<CFTcpUdpComparison />
|
||||
|
||||
**选择建议**:
|
||||
|
||||
| 场景 | 选择 | 原因 |
|
||||
| ------------------ | ------- | ----------------------------------------- |
|
||||
| **邮件、文件传输** | **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 以为已经建立连接,会出现问题
|
||||
:::
|
||||
- **浏览器(买家)提交订单**:浏览器会打包一份极其规范的订单表格(**HTTP 请求报文**),里面写着:“老板,请给我拿一份你的主页 HTML 文件,我是用 Chrome 浏览器来访问的哦。”
|
||||
- **服务器(卖家)根据订单发货**:位于地球另一端的 Google 服务器收到请求后,立刻开始在仓库里配货,生成网页的 HTML 代码,然后打包成包裹(**HTTP 响应报文**),发回给你的浏览器。包裹外面还会贴个标签“200 OK”,意思是“交易成功,你要的货全齐了”。
|
||||
|
||||
---
|
||||
|
||||
## 5. 应用层:具体的业务
|
||||
## 5. 拆盒组装 (浏览器渲染)
|
||||
|
||||
### 5.1 HTTP/HTTPS:网页的对话协议
|
||||
最后一步,货物送到了你的电脑。但发过来的只是一堆代码(HTML、CSS、JavaScript),这就好比你网购买了一箱乐高积木,还需要自己组装:
|
||||
|
||||
**HTTP (HyperText Transfer Protocol)** 是浏览器和服务器之间的"对话规则"。
|
||||
1. **看说明书 (解析 HTML)**:浏览器先把 HTML 代码解读出来,拼装成网页的骨架(DOM 树)。
|
||||
2. **涂抹颜色 (解析 CSS)**:然后检查 CSS 代码,看看字体要多大、按钮是什么颜色,给网页穿上漂亮的外衣(CSSOM 树)。
|
||||
3. **计算布局并拼装 (Layout & Paint)**:浏览器计算好每个元素在屏幕上的确切位置,用画笔把它们画在你的显示器上。
|
||||
4. **注入灵魂 (执行 JavaScript)**:最后,各种能点击、能滑动的交互效果都通过 JavaScript 激活。
|
||||
|
||||
| 特性 | 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 | 车队管理,车辆之间通信 |
|
||||
| **物理层** | 实际的物理传输 | 光纤, 网线, 无线电波 | 道路和运输工具 |
|
||||
如果我们把目光再拉远一点,整个网络通讯的本质,就是在做**接力跑和翻译**:
|
||||
|
||||
**学习建议**:
|
||||
- 我们上面看到的这五步,大多是发生在你眼前的**应用程序**层面的事情。
|
||||
- 在肉眼看不见的底层,刚才那个充满代码的 HTML 包裹,会被切分成无数块极小的碎片(数据包)。这些碎片顺着你家墙上的网线、海底的万兆光缆,像接力棒一样在各种路由器之间传递。
|
||||
- 最终,这一切碎片完好无损地抵达,并在哪怕是几十个毫秒的时间里,化成你屏幕上的绚丽像素。
|
||||
|
||||
- ✅ **从应用层往下学**:你每天都在用 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 | 往返时间,数据从发送到接收确认的时间 |
|
||||
这就是计算机网络的神奇魅力!
|
||||
|
||||
Reference in New Issue
Block a user