引言
学习计算机网络时,最容易出现的问题不是记不住名词,而是记不住每一层到底在解决什么问题。把这件事想清楚,后面的 ARP、IP、TCP、HTTP 才能真正串起来。
通常我们会用五层模型来理解网络通信:
- 物理层
- 数据链路层
- 网络层
- 传输层
- 应用层
这五层不是互相割裂的,而是一层层向上提供能力。上层不需要关心下层的实现细节,只需要使用下层提供的服务。
OSI 五层网络模型
物理层
物理层负责在真实的物理介质上传输原始比特流,比如网线、光纤、无线电波。
它主要关心这些问题:
- 用什么介质传输
- 信号怎么表示 0 和 1
- 传输速率是多少
- 编码和调制方式是什么
简单理解,物理层只负责"把比特送出去",至于这些比特代表什么,它并不关心。
数据链路层
数据链路层负责在相邻节点之间传输数据,并把上层交下来的数据组织成"帧"。
它主要解决这些问题:
- 设备之间如何标识彼此
- 数据一帧一帧怎么切分
- 传输错误怎么发现
- 相邻设备之间怎么可靠地传
这一层里最常见的概念就是 MAC 地址。MAC 地址可以理解为网卡的硬件地址,在局域网内定位设备非常重要。
网络层
网络层负责跨网络传输数据,让数据从源主机到达目标主机。
它关心的核心问题包括:
- 逻辑地址,也就是 IP 地址
- 路由选择
- 跨网段转发
如果说数据链路层解决的是"同一段链路里发给谁",那网络层解决的就是"跨多个网络,最终发到哪台机器"。
传输层
传输层负责为应用程序提供端到端的数据传输服务。
最常见的协议有:
- TCP
- UDP
TCP 关注可靠传输、顺序、重传、流量控制和拥塞控制;UDP 更轻量,没有连接建立和复杂确认流程,更适合对实时性要求高的场景。
应用层
应用层直接服务于应用程序,负责不同程序之间的通信规则。
常见协议包括:
- HTTP
- HTTPS
- DNS
- FTP
- SMTP
浏览器访问网页、客户端调用接口、域名解析,这些都发生在应用层。
各层协议数据名称
不同层处理的数据,名字也不同:
- 物理层:比特流(Bit)
- 数据链路层:帧(Frame)
- 网络层:包(Packet)
- 传输层:段(Segment,UDP 常也称 Datagram)
- 应用层:消息或数据(Data)
这也是面试里非常高频的基础题。
一次请求是如何一层层封装下去的
假设浏览器要发一个 HTTP 请求,大致过程如下:
- 应用层先构造 HTTP 请求报文。
- 传输层给它加上 TCP 头部,形成 TCP 报文段。
- 网络层再加上 IP 头部,形成 IP 包。
- 数据链路层继续加上帧头帧尾,形成数据帧。
- 物理层把这些数据转换成电信号、光信号或无线信号发出去。
接收方收到后,再按相反顺序逐层拆封装。
所以网络通信本质上就是:
"发送端逐层封装,接收端逐层解封装"。
CRC 校验是什么
CRC 的全称是循环冗余校验,是一种常见的检错方式。
它的基本思路是:
- 发送方根据数据内容通过特定算法计算出一个校验值。
- 把这个校验值附加到数据后面一起发送。
- 接收方收到后,用同样算法重新计算一次。
- 如果结果一致,说明数据大概率没有出错;如果不一致,说明传输过程中可能发生了错误。
CRC 的重点是"发现错误",而不是"纠正错误"。它广泛出现在数据链路层和存储系统中。
如何理解这五层的分工
可以用一句话把五层模型串起来:
- 物理层负责传比特
- 数据链路层负责相邻设备之间传帧
- 网络层负责跨网络传包
- 传输层负责进程之间传数据
- 应用层负责具体业务协议
真正学网络时,不要只背定义。更重要的是能回答下面三个问题:
- 这一层在解决什么问题
- 这一层最核心的标识是什么
- 这一层典型协议有哪些
只要这三个问题能答清,网络分层就不是死记硬背,而是清晰的工程分工。
总结
五层模型是整个计算机网络的地图。后面学习 ARP、IP、TCP、HTTP 时,看起来像是分散的知识点,其实都在这张地图上有明确位置。
建议后续继续按这个顺序学习:
- IP、子网、MAC、ARP
- Ping 与路由转发
- TCP 三次握手和四次挥手
- HTTP 与 HTTPS
只要顺着这个脉络走,网络知识会越学越顺。
如果这篇文章对你有帮助,欢迎继续阅读本系列后续内容。若文中有不准确或需要补充的地方,也欢迎指出。