各个网络层之间的关系
从 OSI 七层模型 和 TCP/IP 四层模型 两个视角对比,再结合 HTTP / MySQL / TCP 来理解。
1. OSI 七层模型
理论模型,分为 7 层,每层只和相邻层交互:
应用层
- 直接面对用户,定义应用协议。
- 例子:HTTP、FTP、SMTP、MySQL 协议。
表示层
- 数据表示、加密解密、压缩。
- 例子:TLS/SSL(HTTPS 就用它)。
会话层
- 建立、管理、终止会话。
- 例子:RPC、SQL 会话管理。
传输层
- 端到端传输、错误检测、流量控制。
- 例子:TCP(可靠)、UDP(不可靠)。
网络层
- 负责寻址和路由。
- 例子:IP 协议。
数据链路层
- 在同一个局域网(直连节点)传输帧。
- 例子:以太网、Wi-Fi、PPP。
物理层
- 真实比特流传输。
- 例子:光纤、电缆、无线电波。
2. TCP/IP 四层模型(工程实践)
实际使用时,常简化为四层:
应用层(对应 OSI 应用+表示+会话层)
- HTTP、MySQL、DNS、SSH …
传输层
- TCP、UDP
网络层
- IP
网络接口层(对应 OSI 数据链路+物理层)
- 以太网、Wi-Fi、光纤、电缆
3. 各层关系(以 PHP 访问 MySQL 举例)
应用层
- 协议:MySQL 协议(定义握手、认证、SQL 命令格式)
- 参与者:PHP
mysqli/PDO驱动,MySQL Server
传输层
- 协议:TCP
- 功能:提供可靠的数据流,让 MySQL 协议的报文不丢失、不乱序
网络层
- 协议:IP
- 功能:把数据从客户端主机路由到服务器主机
链路/物理层
- 协议:以太网帧、光纤、Wi-Fi
- 功能:真正传输 0 和 1
4. 层与层的协作关系
上层依赖下层
- HTTP/MySQL 不需要关心数据怎么走,只要 TCP 能保证可靠性就行。
- TCP 不需要关心数据怎么到对方,只要 IP 能正确路由就行。
封装(Encapsulation)
每一层的数据都会被下一层“打包”。
例子:
- 应用层报文 → 加 TCP 头 → TCP 段
- TCP 段 → 加 IP 头 → IP 包
- IP 包 → 加以太网头 → 数据帧
解封装(Decapsulation)
- 服务器收到数据后,反向剥开:物理层 → 数据链路层 → 网络层 → 传输层 → 应用层。
5. 总结
- TCP/IP 是分层设计的,各层只需关注本职工作。
- 应用层决定了数据“长什么样”(HTTP、MySQL、游戏协议)。
- 传输层决定了数据“怎么传”(可靠 TCP / 不可靠 UDP)。
- 网络层决定了数据“去哪”(IP 地址、路由)。
- 链路/物理层决定了数据“怎么送到下一跳”(网卡、电缆、无线)。
6. 对应用层 HTTP、FTP、SMTP、MySQL 协议 使用方式分析
应用层协议(HTTP、FTP、SMTP、MySQL 等)与“协议://”写法的关系:
1. 应用层协议和 URI (统一资源标识符)
- 在日常开发中,我们经常写
协议://地址:端口/...,这是 URI/URL 的一种语法格式。 - 但要注意:并不是所有的应用层协议都必须以这种方式书写,是否使用
协议://取决于这个协议有没有 统一的资源定位方式。
2. 常见协议的 协议:// 形式
✅ HTTP/HTTPS
使用统一的 URL 语法:
http://example.com:80/path https://example.com:443/pathHTTP 是万维网的核心协议,天然适合用 URL。
✅ FTP
也支持 URI 形式:
ftp://user:password@ftp.example.com:21/path/file.txt
✅ SMTP(邮件传输协议)
一般不直接用 URL,而是邮件地址形式:
user@example.com但理论上也存在 URI 规范:
mailto:user@example.com
✅ MySQL 协议
MySQL 有自己的 连接字符串格式,不同语言/驱动可能差异:
// 参数方式 mysqli_connect("127.0.0.1", "user", "pass", "db"); // URI 方式(某些驱动支持) mysql://user:pass@127.0.0.1:3306/db这是参考 URL 习惯写的,方便表示,但它本质上不是 HTTP 那样的通用 URL,而是 MySQL 驱动库自己解析的字符串。
3. 总结关系
协议://...是 URI 语法,主要用于资源定位(尤其是 HTTP/FTP)。- 有些协议(HTTP/FTP)标准化了 URI 语法,所以大家都用。
- 有些协议(MySQL、Redis、MongoDB)借鉴了 URI 语法,作为连接字符串。
- 有些协议(SMTP、POP3)主要用在程序交互,不常见 URI,但标准也定义过。
