Skip to content

新增网络分层 #91

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 2, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions docs/network/overview/21-why-layered.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
---
title: 计算机网络分层模型:为什么需要分层?分层有什么好处?
shortTitle: 为什么需要分层?
description: 深入探讨计算机网络分层模型的设计哲学、工程价值和应用场景,揭示分层模型在网络通信中的重要作用。
head:
- - meta
- name: keywords
content: 计算机网络分层模型
---


本文思维导图:

```markmap
# 网络分层

## 分层哲学: 管理复杂性

## 模块化设计

## 标准化接口:Socket

## 加速技术迭代

## 简化故障定位

## 没有银弹: 分层的局限性
```

[[toc]]


## 分层的终极哲学:管理复杂性

大家好,我是小北。

如果将计算机网络比作一座摩天大楼,分层模型就是它的设计蓝图。

每一层专注解决特定问题,层与层之间通过标准接口衔接,这种设计思想也是现代软件工程的灵魂。

网络工程师专注路由算法,而我们应用开发的程序员只需调用Socket API,甚至通过 SpringBoot 等封装,我们连 Socket API 都不需要调用了,直接操作 RPC 接口。


剑桥大学计算机科学教授 David Wheeler 说的一句编程领域非常经典的话:

> “All problems in computer science can be solved by another level of indirection”

即:

**计算机科学领域的任何问题都可以通过增加一个间接的中间层得以解决。**


![网络分层](https://cdn.how2cs.cn/gzh/2025-03-02-network-layers-diagram.svg)


当你在浏览器输入 `https://google.com` 时:

1️⃣ **应用层**:DNS解析域名 → HTTP协议封装请求
2️⃣ **传输层**:TCP三次握手 → TLS协商加密
3️⃣ **网络层**:IP寻址 → 路由选择
4️⃣ **链路层**:ARP获取MAC地址 → 以太网帧传输

每一层都在对其他层说:​​

*"我无需知道你的细节,只需完成我的契约。"*

这正是软件工程中「关注点分离」(Separation of Concerns)的最佳实践。


那么计算机网络分层有哪些具体的好处呢?

下面简单聊聊👇

## 网络分层:模块化设计

网络通过分层实现了模块化的设计,降低了系统的复杂度:


想象一下,如果没有 TCP/IP 协议栈,想要大家能够访问我现在的[博客网站 csguide.cn](https://csguide.cn) ,我需要同时处理比特流传输、路由寻址、数据加密、HTTP 应用协议解析等所有问题,这无异于让一个人既造芯片又写代码。。。

然而,有了 TCP/IP 协议栈,我只需要专注于 HTTP 应用层协议的开发,其他问题交给协议栈去解决:

- **物理层** 只需关注如何用光信号/电信号传递0和1
- **网络层** 专注设计IP地址和路由算法
- **传输层** 负责可靠传输和拥塞控制
- **应用层** 咱们程序员可以基于 Socket、HTTP等快速开发网站、构建微信、支付宝这样的国民级应用

并且各层独立开发,修改传输层协议不影响应用层代码,反之亦然。

## 网络分层:加速技术迭代

分层架构为技术创新提供了安全区,正是因为网络是分层的,层与层之间通过标准接口通信。

这样,各个领域大佬能够并行工作,TCP 协议设计者不用关心数据是通过光纤还是无线电传输,电信运营商推行 5G 网络也只需更新物理层,上层协议无需改动。

- **当以太网升级到万兆速率时,上层 TCP/IP 协议栈无需任何修改**
- **IPv4 向 IPv6 迁移过程中,传输层的 TCP/UDP 协议也保持稳定**
- **物理层从双绞线到光纤再到 Wi-Fi 6,应用程序毫无感知**

这种逐层隔离,就像操作系统的驱动程序隔离了硬件变化对上层应用的影响,真的是太棒了!

## 网络分层:标准接口

分层模型通过**标准化接口协议**构建了互联互通的基石:

- 链路层的MAC地址格式(如00:1A:3F:FE:2C:1B)
- 网络层的IP报文结构(20字节头部+负载数据)
- 传输层的端口号机制(0-65535端口分配)

这些接口规范让不同厂商的设备、不同程序员开发的软件能无缝协作,使得 Windows 电脑能够通过 TCP/IP 协议访问 Linux 服务器。

标准化的接口简直太重要!!!

我们工作中有对接其它部门,就发现部门内不同的业务对我们提供的接口(鉴权方式、路由方式、JSON/PB 协议)也不同,导致我们每次对接都要重新适配,真的是太痛苦了!!!😭

## 网络分层:降低故障定位复杂度

当出现网络问题的时候,大家是不是最先 `ping baidu.com` 一下,看是否通了?

也就是用用 `ping` 的网络数据包来检查下是不是网络根本就不同,如果是的话,也就不用继续排查 TCP、应用层面的问题了。。。

这就是网络分层的好处,当网络出现问题时,分层模型提供了清晰的排查路径:

应用层故障:检查HTTP状态码(如500错误)
传输层问题:分析TCP握手失败(比如 SYN未响应)
网络层异常:ping 追踪ICMP超时报文(TTL耗尽)
物理层故障:检测网线连通性(RJ45接口灯不亮)




## 分层的代价:没有银弹

在《人月神话》这本书中提到**软件工程没有银弹**,任何工程设计都是权衡的结果,TCP/IP 分层模型也不例外:

除了给我们带来了上面那些好处,也有下面这些问题:

**性能损耗**:多层封装/解封装增加时延(HTTP over TLS over TCP over IP...)
**设计陷阱**:过度分层导致系统臃肿(如OSI七层模型实际被TCP/IP四层取代)
**调试难度**:跨层排查网络问题需要全栈知识(比如MTU引发的TCP分片问题)



✍️ **思考题**:如果让你在 TCP 和 HTTP 之间插入一个新协议层,你会用它解决什么问题?(提示:可以想想 QUIC 协议的设计思路)

欢迎大家在评论区留言讨论你在学习各种编程语言、网络协议、操作系统等遇到的“分层”设计。
80 changes: 80 additions & 0 deletions docs/network/overview/23-network-layers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
---
title: 各层网络典型协议和设备对应表(系统对比版)
shortTitle: ⭐⭐⭐ 各层网络典型协议和设备对应表(系统对比版)
description: 深入探讨计算机网络分层模型的设计哲学、工程价值和应用场景,揭示分层模型在网络通信中的重要作用。
head:
- - meta
- name: keywords
content: 计算机网络分层模型
---

## ⭐⭐⭐ 面试高频:各层网络典型协议和设备对应表(系统对比版)

**分层模型核心逻辑**:这张表能帮你快速建立网络分层的结构化认知,同时解决80%分层相关的面试问题。建议重点记忆协议与设备的工作层级逻辑,而非死记硬背。

---

### 一、协议与层级的对应关系(OSI vs TCP/IP)

| **OSI七层模型** | **TCP/IP四层模型** | **典型协议** | **核心功能关键词** |
|------------------|--------------------|----------------------------------|--------------------------------------------|
| 应用层 | 应用层 | HTTP/HTTPS、DNS、FTP、SMTP、SSH | 面向用户交互,应用程序间通信 |
| 表示层 | 应用层 | SSL/TLS、JPEG、ASCII、加密算法 | 数据格式转换、加密解密、压缩解压 |
| 会话层 | 应用层 | RPC、NetBIOS、Socket API | 建立/管理/终止会话连接 |
| 传输层 | 传输层 | TCP、UDP、SCTP | 端到端连接管理、流量控制、可靠性传输 |
| 网络层 | 网络层 | IP、ICMP、ARP、OSPF、BGP | 逻辑寻址、路由选择、跨网络数据传输 |
| 数据链路层 | 网络接口层 | Ethernet、PPP、MAC、VLAN、STP | 物理寻址、帧传输、错误检测、局域网数据交换 |
| 物理层 | 网络接口层 | RS-232、RJ45、光纤、无线电磁波 | 比特流传输、物理介质规范、电气信号转换 |

---

### 二、设备与层级的对应关系(面试必考)

| **工作层级** | **典型设备** | **核心功能** | **工作特点** |
|--------------------|--------------------|----------------------------------|------------------------------------------|
| 应用层/表示层/会话层 | 网关(应用层网关) | 协议转换、内容过滤、防火墙 | 处理高层协议(如HTTP代理) |
| 传输层 | 四层交换机 | 基于端口号进行流量转发 | 识别TCP/UDP端口(如负载均衡场景) |
| 网络层 | 路由器、三层交换机 | IP寻址、路由选择、跨网络通信 | 基于IP地址进行转发,支持NAT |
| 数据链路层 | 交换机(二层)、网桥 | MAC地址学习、局域网数据帧转发 | 通过MAC地址表实现快速转发 |
| 物理层 | 集线器、中继器、网卡 | 信号放大、比特流传输 | 无寻址能力,广播式传输 |

---

### 三、高频面试问题解析(附回答逻辑)

1. **路由器工作在OSI哪一层?交换机呢?**
- 标准答案:路由器工作在网络层(第三层),交换机传统工作在数据链路层(第二层)。但注意:三层交换机具备部分路由功能。
- 加分回答:现代网络设备多为多层混合工作,但核心功能仍按主要层级划分。

2. **ARP协议属于哪一层?为什么?**
- 标准答案:ARP属于网络层(第三层)。虽然它基于MAC地址,但本质是解决IP地址到MAC地址的映射问题,属于网络层逻辑。
- 常见误区:不要因涉及MAC地址误判为数据链路层协议。

3. **网关一般工作在哪些层?**
- 标准答案:传统网关工作在网络层及以上,应用层网关(如API网关)工作在第七层。需结合具体场景回答。

4. **为什么交换机不能替代路由器?**
- 核心逻辑:二层交换机基于MAC地址通信,无法处理跨网络的IP路由;路由器通过路由表实现不同网络间的数据转发。

---

### 四、记忆技巧(分层关联法)

- **口诀**:物数网传会表应(OSI七层谐音)
- **设备关联**:层级越高,处理的信息越抽象(物理层处理比特流 → 应用层处理用户数据)
- **协议归属**:协议名称暗示层级(如IP→网络层,TCP→传输层,HTTP→应用层)

---

### 五、实际应用场景(分层思维)

当遇到网络问题时,按分层模型自底向上排查:
1. 物理层:网线是否松动?网卡是否禁用?
2. 数据链路层:交换机端口是否正常?MAC地址是否冲突?
3. 网络层:IP配置是否正确?路由器是否可达?
4. 传输层:防火墙是否拦截端口?TCP连接是否建立?
5. 应用层:服务进程是否运行?DNS解析是否正常?

---

**这篇内容帮你解决的分层面试题**:网络层和传输层的区别、HTTP属于哪一层、路由器与交换机的差异、ARP协议层级、网关工作层级等高频问题。