1. 网络基础概念:协议、OSI七层模型、TCP/IP四层模型、数据封装与解封装
说实话,很多人学网络第一关就被这些概念搞晕了。什么七层、四层,封装解封装,听着就头大。我当年也一样,背了好几遍七层模型,面试时还是说错顺序。
后来我才明白——这些不是用来背的,是用来理解网络怎么工作的。你想想看,两台电脑隔着半个地球,怎么就能把数据准确送到对方手里?这背后就是协议和分层在起作用。
1.1 什么是协议?
协议,说白了就是通信双方约定好的规则。就像两个人打电话,你得先说“喂”,对方回应“嗯”,然后才开始聊正事。这个“喂-嗯”就是最简单的协议。
网络协议也一样。它规定了:
- 数据用什么格式发送
- 谁先发、谁后发
- 发错了怎么办
- 怎么确认对方收到了
核心要点:协议就是通信的“交通规则”。没有协议,网络设备之间就是鸡同鸭讲。
举个例子。HTTP协议里,客户端发一个 GET /index.html,服务器就得返回 HTTP/1.1 200 OK 加上网页内容。你要是发个 给我网页,服务器可不认识——这就是协议的作用。
我的经验:我在排查网络问题时,经常用Wireshark抓包。看着那些十六进制数据,你就能直观感受到“协议”到底长什么样。比如TCP的三次握手,SYN、SYN-ACK、ACK,清清楚楚。
1.2 OSI七层模型
OSI模型是国际标准化组织(ISO)在1984年提出的。说实话,这个模型在实际网络中并没有被完全采用,但它作为教学工具,价值巨大。
为什么?因为它把复杂的网络通信拆成了七个层次,每层只管自己的事。这种分层思想,你现在学的几乎所有技术都在用。
| 层级 | 名称 | 核心功能 | 常见协议/设备 |
|---|---|---|---|
| 7 | 应用层 | 为用户提供网络服务 | HTTP、FTP、SMTP |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS、JPEG、ASCII |
| 5 | 会话层 | 建立、管理、终止会话 | NetBIOS、RPC |
| 4 | 传输层 | 端到端可靠传输 | TCP、UDP |
| 3 | 网络层 | 路由选择、逻辑寻址 | IP、路由器 |
| 2 | 数据链路层 | 帧封装、MAC寻址、差错检测 | 以太网、交换机 |
| 1 | 物理层 | 比特流传输、电气信号 | 网线、集线器、光纤 |
注意:OSI模型的会话层和表示层,在实际的TCP/IP协议栈中被合并到了应用层。所以别死磕这两层,理解它们的功能就行。
我记这七层有个口诀:“物链网传会表应”(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)。从下往上背,面试时管用。
1.3 TCP/IP四层模型
OSI是理论模型,而TCP/IP是实际在用的模型。互联网就是跑在TCP/IP上的。它只有四层:
- 应用层(对应OSI的5/6/7层)
- 传输层(对应OSI的第4层)
- 网络层(对应OSI的第3层)
- 网络接口层(对应OSI的1/2层)
你想想看,你每天用的浏览器、、邮件,底层全是TCP/IP。我经常跟新人说:TCP/IP才是你真正要掌握的模型,OSI只是帮你理解它。
对比总结:OSI七层是“理想”,TCP/IP四层是“现实”。学网络,先理解TCP/IP,再用OSI去对照,事半功倍。
1.4 数据封装与解封装过程
这是本章最核心的概念。什么叫封装?就是数据从上层往下层传递时,每一层都给它加一个“头”(Header)。就像寄快递——你写个包裹,外面套个箱子,箱子外面再贴快递单。
具体过程是这样的(以发送HTTP请求为例):
- 应用层:生成HTTP请求数据(比如
GET /index.html) - 传输层:加上TCP头部(源端口、目的端口、序列号等),形成TCP段
- 网络层:加上IP头部(源IP、目的IP),形成IP包
- 网络接口层:加上MAC头部(源MAC、目的MAC),形成以太网帧
- 物理层:把帧转成比特流,通过网线发出去
接收方做相反的操作——解封装。每层剥掉对应的头部,把数据交给上层。就像拆快递,一层层打开,最后拿到里面的东西。
避坑指南:我曾经在配置防火墙时,忘了检查传输层的端口号。结果应用层数据能到,但TCP握手一直失败。排查了半天,才发现是端口被阻断了。所以记住——每一层的头部信息都可能成为故障点。
下面这张图,把封装和解封装的过程画清楚了:
嗯,这里要注意一点:对等层通信的概念。发送方的传输层加TCP头,接收方的传输层解析TCP头——它们俩是“对等”的。中间的网络层、链路层只管转发,不关心TCP头里写了什么。这就是分层的好处:每层各司其职。
常见误解:有人以为数据是一整块从应用层直接扔到物理层的。不对!是逐层封装,每层只处理自己的头部。你抓包看到的以太网帧,里面嵌套着IP包,IP包里嵌套着TCP段,TCP段里才是应用数据。一层套一层,像俄罗斯套娃。
最后说个我自己的体会。刚入行时,我总觉得这些概念太抽象,不如直接写代码来得实在。但后来排查一个跨网段通信的故障,发现是MTU(最大传输单元)不匹配导致IP分片出了问题。那一刻我才真正理解——不懂封装,你就不知道问题出在哪一层。所以,别嫌基础,基础打牢了,后面才能走得远。