指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

各个网络层之间的关系

从 OSI 七层模型 和 TCP/IP 四层模型 两个视角对比,再结合 HTTP / MySQL / TCP 来理解。

1. OSI 七层模型

理论模型,分为 7 层,每层只和相邻层交互:

  1. 应用层

    • 直接面对用户,定义应用协议。
    • 例子:HTTP、FTP、SMTP、MySQL 协议。
  2. 表示层

    • 数据表示、加密解密、压缩。
    • 例子:TLS/SSL(HTTPS 就用它)。
  3. 会话层

    • 建立、管理、终止会话。
    • 例子:RPC、SQL 会话管理。
  4. 传输层

    • 端到端传输、错误检测、流量控制。
    • 例子:TCP(可靠)、UDP(不可靠)。
  5. 网络层

    • 负责寻址和路由。
    • 例子:IP 协议。
  6. 数据链路层

    • 在同一个局域网(直连节点)传输帧。
    • 例子:以太网、Wi-Fi、PPP。
  7. 物理层

    • 真实比特流传输。
    • 例子:光纤、电缆、无线电波。

2. TCP/IP 四层模型(工程实践)

实际使用时,常简化为四层:

  1. 应用层(对应 OSI 应用+表示+会话层)

    • HTTP、MySQL、DNS、SSH …
  2. 传输层

    • TCP、UDP
  3. 网络层

    • IP
  4. 网络接口层(对应 OSI 数据链路+物理层)

    • 以太网、Wi-Fi、光纤、电缆

3. 各层关系(以 PHP 访问 MySQL 举例)

  • 应用层

    • 协议:MySQL 协议(定义握手、认证、SQL 命令格式)
    • 参与者:PHP mysqli / PDO 驱动,MySQL Server
  • 传输层

    • 协议:TCP
    • 功能:提供可靠的数据流,让 MySQL 协议的报文不丢失、不乱序
  • 网络层

    • 协议:IP
    • 功能:把数据从客户端主机路由到服务器主机
  • 链路/物理层

    • 协议:以太网帧、光纤、Wi-Fi
    • 功能:真正传输 0 和 1

4. 层与层的协作关系

  1. 上层依赖下层

    • HTTP/MySQL 不需要关心数据怎么走,只要 TCP 能保证可靠性就行。
    • TCP 不需要关心数据怎么到对方,只要 IP 能正确路由就行。
  2. 封装(Encapsulation)

    • 每一层的数据都会被下一层“打包”。

    • 例子:

      • 应用层报文 → 加 TCP 头 → TCP 段
      • TCP 段 → 加 IP 头 → IP 包
      • IP 包 → 加以太网头 → 数据帧
  3. 解封装(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/path
    
  • HTTP 是万维网的核心协议,天然适合用 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,但标准也定义过。