CN——HTTP 工作流程

前提:HTTP 是应用层协议,下层依靠 TCP 传输层,IP 网络层。

  • HTTP/1.0:非持续连接,每个对象新建一次 TCP 连接

  • HTTP/1.1:持续连接(默认开启) ,分两种:非流水线、流水线

  • TCP 本身:三次握手建立,慢开始、拥塞避免、快重传、快恢复拥塞控制。

完整步骤

  1. 用户操作:浏览器点击 www.baidu.com 但浏览器只知道域名,并不知道服务器 IP,第一步做DNS 域名解析

(1)DNS 域名解析(应用层,UDP)

浏览器缓存 → 操作系统 hosts 文件 → 本地 DNS 服务器(递归查询)→ 根 DNS → 顶级域 DNS (.com) → 权威 DNS 服务器,最终拿到百度服务器 IP 地址,例如:180.101.49.11。(以迭代查询为例)

DNS 默认 UDP,超过 512 字节改用 TCP。解析完成,得到目标 IP。

(2)建立 TCP 连接(传输层,三次握手)

浏览器客户端(随机端口,比如 5200) ↔ 服务器 80 端口

TCP 连接建立阶段就已经启动拥塞控制:初始拥塞窗口 cwnd=1 MSS,慢开始开始。

(3)http协议

|------------------|--------------|-----------------------|
| 版本 | 连接类型 | 特点 |
| HTTP/1.0 | 非持续连接 | 每对象新建 TCP,传完就断 |
| HTTP/1.1 持续‑非流水线 | 持久 TCP,请求排队 | 收到完整响应才发下一个请求 |
| HTTP/1.1 持续‑流水线 | 持久 TCP,连续发请求 | 不用等响应,批量发请求;HTTP 队头阻塞 |

HTTP/1.0 【非持续连接】

特点:每获取一个网页对象,就要新建一套 TCP 连接,传输完立刻断开 TCP 网页举例:网页包含 1 个 HTML 主页 + 2 张图片(一共 3 个对象)

流程:

  1. TCP 三次握手建立连接

  2. 客户端发送 HTTP 请求报文 GET /index.html HTTP/1.0

  3. 服务器返回 HTTP 响应,把 HTML 页面传回

  4. TCP 四次挥手断开本次连接

现在要拿第一张图片:重新再来一遍三次握手 → 请求图片 → 响应 → 断开 第二张图片:再次三次握手 → 请求图片 → 响应 → 断开

缺点:每个对象都要付出三次握手 RTT 开销;大量对象时延爆炸。

HTTP/1.1 【持续连接,默认开启 Connection: keep‑alive】

同一个 TCP 连接,传输多个对象,传输完一段时间空闲才断开,不用传一个断一个。 持续连接分两种模式:非流水线、流水线

模式 A:持续连接 ------ 非流水线(HTTP/1.1 默认早期模式)

规则:客户端必须收到上一个对象完整响应之后,才发送下一个请求 同一个 TCP 连接,HTML + 两张图片:

  1. TCP 三次握手建立连接

  2. 客户端:GET html → 等待完整 html 响应回来

  3. 收到 html 全部数据后,才发 GET pic1 → 等待 pic1 完整响应

  4. 收到 pic1 全部数据后,才发 GET pic2 → 等待 pic2 完整响应

  5. 全部对象传输完毕,空闲超时后 TCP 断开。

请求必须排队,不能并发发请求。

模式 B:持续连接 ------ 流水线(pipelining)HTTP/1.1

规则:客户端可以连续发送多个请求,不用等前一个确认响应回来,请求一股脑丢出去;服务器按请求顺序依次返回响应。

  1. TCP 三次握手建立连接

  2. 客户端连续发送:GET html;GET pic1;GET pic2 (连续发出去,不等回复)

  3. 服务器按顺序返回 html → pic1 → pic2

  4. 全部接收完毕,空闲超时断开 TCP。

(4)HTTP 事务结束后断开 TCP 连接

HTTP/1.1 持续连接不会传输完立刻断开;一段时间没有新请求,服务器主动关闭 TCP(四次挥手)。 如果报文头部写 Connection: close,则传输完立刻断开,退化成类似 1.0 行为。

相关推荐
captain3768 小时前
▲网络原理(1)-UDP
网络·网络协议·tcp/ip
zbtlink9 小时前
家用全屋WiFi技术选型思考:吸顶AP、面板AP与路由器的参数对比
网络·智能路由器
开开心心就好10 小时前
清理此电脑网盘图标工具,开源免费好用
网络·网络协议·tcp/ip·智能手机·电脑·scala·erlang
码少女10 小时前
Linux——多路复用之poll模型
linux·服务器·网络
normanhere11 小时前
防火墙来回路径不一致导致的网速异常
运维·服务器·网络
m0_7345717611 小时前
深入理解5g <七> 下行调度的流程
网络·5g
Wang's Blog11 小时前
Java框架快速入门: Spring Security+OAuth2之UserDetails与JDBC认证实践
java·网络·spring
网硕互联的小客服11 小时前
反向路径过滤(rp_filter)是什么?多网卡服务器配置详解
运维·服务器·网络
企业数字化笔记11 小时前
AI写的网站一直自动跳转怎么办?301、302和HTTPS重定向排查
网络协议·http·https