Socket
本质:“接口”
Socket 在程序中的表现:
-
是一种操作系统底层的“网络通信能力”
-
FastAPI、Flask、Django、Nginx 都是在底层使用 socket 才能“监听端口”、“响应请求”
理解描述:
操作系统给应用层的进程提供了 Socket 接口,你就能用它来连接其他服务器的端口,发送和接收信息
流程解析:
---------------------------------------------------------------------------------------------------------------------------------
你的程序(如 curl、浏览器)
↓
[ 应用层 - HTTP/HTTPS ]
→ 构造请求数据包(如 GET /)
↓
[ 传输层 - TCP/UDP → Socket 创建 & 连接 ]
→ 创建 socket / 建立连接 / 拆分为 TCP 段
↓
[ 网络层 - IP 协议 ]
→ 加上目标 IP 地址(google.com => 142.250.xxx.xxx)
↓
[ 数据链路层 - MAC + ARP ]
→ 加上 MAC 地址 / 通过网关找到下一跳
↓
[ 物理层 - 电信号 / 无线信号 ]
→ 通过网卡传到交换机 / 路由器
↓
== 经过若干网关和运营商路由节点(BGP 路由) ==
↓
== 客户端发出的网络包抵达目标服务器 ==
↓
[ 物理层 - 电信号 ]
→ 信号从网线进入服务器网卡,转换为数字信号
↓
[ 数据链路层 - MAC帧 ]
→ 校验帧完整性,识别是否是本机 MAC 地址(是则继续)
↓
[ 网络层 - IP 协议 ]
→ 解析目标 IP 地址,确认是发给本机的包,丢弃 IP 头
↓
[ 传输层 - TCP ]
→ 根据端口号交给 socket / TCP 重组数据段(拼接/去重)
↓
[ 会话层 / 表示层(可选)]
→ 若使用 HTTPS,进行加密解密 / 会话管理
↓
[ 应用层 - HTTP/HTTPS ]
→ 解析 HTTP 请求,如:
GET /index.html HTTP/1.1
Host: www.xxx.com
Cookie: ...
↓
[ Web 服务框架(如 Nginx / Flask / Node.js)]
→ 根据 URL 路由、Header、参数等逻辑处理请求
↓
[ 生成响应数据(HTML/JSON/状态码)]
→ 准备发回客户端
↓
== 进入封装流程,逐层返回 ==
---------------------------------------------------------------------------------------------------------------------------------