---

description: 用OSI模型来解析网上冲浪全过程，同时分析每一层可能出现的故障

---
网上冲浪的原理挺复杂的，如果一个个列出来鬼才看得懂啊  
还好前人和我的想法一样，于是他们搞鼓出了一个叫作开放式系统互联模型（简称为OSI模型）的东西。他出现的目的是为了给全球的计算机提供网络互联的基本框架。这玩意一共有7层，1~4 层与网络通信技术相关，而第 5 到第 7 层则与用户应用程序有关。  
接下来就以访问网维官网为例，使用OSI模型来解析上网的全过程，同时分析每一层可能出现的故障

:::info
假设本机 IP 为 `192.168.1.10`、网关 `192.168.1.1`，域名 `zsxyww.com` 解析到 `47.52.33.166`（示例地址），网卡 MAC `00:11:22:33:44:55`，网关 MAC `66:77:88:99:aa:bb`。
:::


从表到深，整个流程在7层里一共经历了以下步骤：
1. 应用层（7）：浏览器发起 HTTPS 请求
2. 表示层（6）使用 TLS进行加密协商与会话建立
3. 会话层（5）：在 TCP/TLS 之上维护会话
4. 传输层（4）：TCP 三次握手，端口号（客户端随机端口 → 服务器 443）
5. 网络层（3）：IP 分组路由到
6. 数据链路层（2）：将 IP 分组封装成以太网帧，发送到网关的 MAC
7. 物理层（1）：电信号或光信号在介质（网线/Wi‑Fi）上传输

下面逐层展开


## 物理层（Layer 1）

顾名思义，这层是电信号和和光信号传输的一层，属于是看得见摸得着  
当用户发出请求时，计算机会通过网卡将数据帧编码成以太网电信号，通过路由器、交换机、ISP光纤传输到目标网络。

在这一层出现的故障和硬件有关，例如网线缺芯导致上网速率低，光纤断开，WiFi信号干扰等，可以尝试维修或者替换故障元件

## 数据链路层（Layer 2）

这一层确保了节点之间的可靠传输，主要依靠MAC和ARP来实现  
在例子中，我们的主机知道了`zsxyww.com`的ip是`47.52.33.166`，但是这个ip不在本地网络。这时，主机就会将这个请求发送至网关，由网关进行转发。  
转发是一个关键环节，为了确保传输的可靠性，主机和网关需要一个能识别对方身份的东西。这个东西叫做MAC地址，MAC在一个网络当中应当具有唯一性。当主机知道网关的ip地址后，其会广播一个ARP请求，网关会回应其自身的MAC地址，双方才能确定身份。   
其实和你去教室上课差不多，你知道了你要去上哪个老师的哪节课，但是不知道科室在哪，就对应了主机知道网关ip但是不知道MAC。这个时候你去班群吼一声:`xxx课在哪上啊`，相当于主机发送ARP请求广播。然后，好心的同学告诉了你教室位置，这就相当于网关回应ARP请求广播，给予主机其MAC地址。    
这个时候就会有人问了，诶那我如果心眼坏的流脓，告诉他一个虚假的教室号会怎么样？显而易见的，这个人会把错误的教室号当成正确的去上课。这对应着**ARP攻击**，攻击者可以伪造ARP响应，劫持主机的请求，相当危险  
:::info
对于IPv6, 其使用NDP而不是ARP
:::

在这一层出现的错误一般是登录不上，需要解绑端口，或者是局域网MAC打架。可以参考wiki解决


## 网络层（Layer 3）

网络层负责逻辑寻址和路由，主要的协议有IP(v4/v6)  
在主机向`zsxyww.com`发出的请求中包含了一个IP(v4/v6)报文，其包含源IP和目标IP以及寻址方法。路由器会根据路由表将数据包向上游路由，最终到达目标网段  
这相当于坐地铁出门(~~中山：查无此物~~)，源IP和目标IP对应着出发车站和到达车站，路由表对应着地铁线路图。根据路由表，你可以使用最短的路径到达目的地，也可以随机地换乘，花费更多的时间。数据包传递也是同理。    

在这一层出现的问题一般是内网ip打架，检查路由器的DHCP和用户设置  



## 传输层（Layer 4）

传输层，顾名思义负责传输，主要协议有TCP/UDP/QUIC...  
传输层承载着数据，同时也决定了传输的可靠性  
![喝水，爽](/img/wiki/trans-proto-meme.jpg)  
参考上图，可以发现不同的传输协议的传输可靠性是不同的。VPN在两台机器之间建立出一个点对点的隧道来确保数据传输可靠性，TCP通过三次握手来确认数据包确实被接收。而UDP则只确认目标地址，而不会确认数据包是否确实传达到目标机器，Broadcast(广播)则干脆不指定目标机器，~~谁爱收谁收去~~   
传输可靠性和握手时间是成正比的。在一些特殊场合，会牺牲部分可靠性换取更快的速度。  

这一层一般不会出现可以由网维成员修复的错误

## 会话层（Layer 5）
会话层负责管理会话（连接的创建、维护、终止）和复用，常由 TLS/应用或传输层来承担

这一层一般不会出现可以由网维成员修复的错误

## 表示层（Layer 6）
表示层负责数据表示、加/解密、编码、压缩。
TLS 在这一层执行协商，客户端和服务端验证证书后双方生成对称会话密钥，来进行会话的加密  
加密的过程非常有趣，如果你对数学感兴趣的话可以去自行了解。~~求你了我不想再碰密码学了~~

表示层一般会出现由于计算机时差导致的证书过期错误，校准时间即可


## 应用层（Layer 7）
应用层实现了最终的应用协议（HTTP/HTTPS、DNS 等）。绝大部分用户可见的操作都在应用层。  
当用户通过浏览器发出请求时，浏览器会首先检查本地缓存并优先加载，随后检查HSTS，若`zsxyww.com`存在于HSTS列表内，则会强制使用HTTPS。同时，浏览器会进行DNS查询，获得目标IP地址。  
获取目标IP地址后，浏览器会向目标IP发起握手(TLS,TCP/QUIC),并发送HTTP请求。服务器得到请求后，向主机发送响应包，主要包含响应状态，响应头和正文。服务器会根据响应发起进一步请求，同时进行画面的渲染和加载，网页就在浏览器窗口上呈现出来了。

应用层会出现的问题可太多了，需要灵活变通，用不同的思路解决问题。

