【OSI网络七层模型】整体框架
请求方向:浏览器 → 淘宝服务器
【第 7 层:应用层】
动作:浏览器构造登录请求数据。
浏览器把你输入的{username: "alice", password: "123"}组织成 HTTP 请求报文:
POST /login HTTP/1.1 Host: www.taobao.com Content-Type: application/json Content-Length: 38 {"username":"alice","password":"123"}产出:HTTP 请求报文(字符串格式)
存在哪:浏览器内存中
交给谁:表示层(第 6 层)
【第 6 层:表示层】
动作:对 HTTP 报文进行加密和压缩。
浏览器将 HTTP 明文报文交给 TLS 加密模块,使用 TLS 协议将整个 HTTP 报文加密成密文
可能还涉及压缩(如启用 HTTP/2 的头部压缩)
产出:加密后的 TLS 密文数据
存在哪:浏览器内存中(已加密)
交给谁:会话层(第 5 层)
【第 5 层:会话层】
动作:建立会话标识,管理本次通信会话。
浏览器检查是否有历史会话状态(如果有 Cookie 则带上;第一次访问则新建一个空会话)
浏览器为本次请求分配一个会话标识符(在浏览器端体现为空的 Cookie 容器,后续服务端会返回 Session ID)
浏览器记录本次会话的状态(如“正在登录”)
产出:带有会话状态标记的加密数据(会话层不修改数据本身,只维护上下文)
存在哪:浏览器内存 + Cookie 存储
交给谁:传输层(第 4 层)
【第 4 层:传输层】
动作:将数据分段,加上 TCP 头,建立可靠传输通道。
浏览器将加密后的数据切割成适合网络传输的TCP 段
加上TCP 头(源端口、目标端口 443、序列号、确认号、校验和等)
执行三次握手建立连接(如果尚未建立)
产出:TCP 段(包含 TCP 头 + TLS 密文数据)
存在哪:操作系统内核的 Socket 发送缓冲区
交给谁:网络层(第 3 层)
【第 3 层:网络层】
动作:加上 IP 头,进行路由寻址。
操作系统将 TCP 段封装成IP 数据报
加上IP 头(源 IP = 你的 IP,目标 IP = 淘宝服务器 IP)
查路由表,确定下一跳网关
产出:IP 数据报(包含 IP 头 + TCP 段)
存在哪:内核 IP 层发送队列
交给谁:数据链路层(第 2 层)
【第 2 层:数据链路层】
动作:加上 MAC 头,封装成帧,准备在局域网内传输。
操作系统将 IP 数据报封装成数据帧(Frame)
加上帧头(目标 MAC = 网关 MAC,源 MAC = 本机网卡 MAC)
加上帧尾(FCS 校验值)
产出:数据帧
存在哪:网卡发送队列
交给谁:物理层(第 1 层)
【第 1 层:物理层】
动作:将帧转换成物理信号,发出去。
网卡将数据帧中的 0/1 转换成电信号(网线)或无线电波(WiFi)
产出:物理信号
存在哪:网线 / WiFi 信号中
交给谁:网络中的下一个设备(路由器/交换机)
响应方向:淘宝服务器 → 浏览器
【第 1 层:物理层】
动作:淘宝服务器将响应数据以物理信号发回,你的网卡接收信号。
你的网卡收到电信号/WiFi 信号
产出:还原后的原始比特流(0/1)
存在哪:网卡硬件缓存区
交给谁:数据链路层(第 2 层)
【第 2 层:数据链路层】
动作:解析帧,检查目标 MAC 是否是自己。
网卡驱动程序将接收到的比特流组装成数据帧
检查帧头中的目标 MAC 地址是否等于本机网卡 MAC
是 → 收下
否 → 丢弃
用帧尾 FCS 校验数据完整性
校验通过后,去掉帧头和帧尾,取出 IP 数据报
产出:IP 数据报
存在哪:内核接收缓冲区
交给谁:网络层(第 3 层)
【第 3 层:网络层】
动作:解析 IP 数据报,检查目标 IP 是否是自己。
操作系统解析IP 头,提取目标 IP 地址
检查目标 IP 是否等于本机 IP
是 → 收下
否 → 查路由表转发
去掉 IP 头,取出 TCP 段
产出:TCP 段
存在哪:内核 IP 层接收队列
交给谁:传输层(第 4 层)
【第 4 层:传输层】
动作:解析 TCP 头,检查端口号,确认数据完整性。
操作系统解析TCP 头,提取目标端口号(443)
检查端口号对应的是哪个应用程序(浏览器)
进行校验和检查、序列号检查、重排序、去重
去掉 TCP 头,取出 TLS 加密数据
发送 ACK 确认已收到
产出:TLS 加密数据
存在哪:内核 Socket 接收缓冲区
交给谁:会话层(第 5 层)
【第 5 层:会话层】
动作:识别会话,记录会话状态。
操作系统/浏览器从内核缓冲区读取 TLS 加密数据
检查本次请求对应的会话上下文(如Session ID)
第一次请求:创建新的空上下文
后续请求:根据 HTTP 请求头中的
Cookie提取Session ID,恢复会话状态
注意:登录成功前,会话处于“未认证”状态,此时浏览器会在本地维护一个空的 Cookie 容器
产出:TLS 加密数据 + 会话上下文(浏览器记录该请求属于哪个会话)
存在哪:用户空间内存 + 浏览器 Cookie 存储(空容器等待填充)
交给谁:表示层(第 6 层)
【第 6 层:表示层】
动作:解压缩、解密 TLS 数据。
浏览器进行TLS 解密,将密文还原成明文
解压缩(如有)
产出:明文 HTTP 报文
存在哪:用户空间内存
交给谁:应用层(第 7 层)
【第 7 层:应用层】
动作:解析 HTTP 报文,执行业务逻辑,生成响应。
浏览器解析 HTTP 响应报文:
HTTP/1.1 200 OK Set-Cookie: session_id=xxxxx Content-Type: application/json {"code": 0, "msg": "登录成功", "username": "alice"}浏览器识别到Set-Cookie: session_id=xxxxx,将 Session ID 保存到本地 Cookie 存储中
浏览器解析 JSON 响应体,显示“登录成功”
此时会话层维护的会话状态得到填充:浏览器本地 Cookie 中有了session_id=xxxxx
