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 行为。

相关推荐
mengge.cloud1 小时前
0823Keepalived + LVS(DR) + MariaDB主主 小白完整实战教程
linux·运维·网络·oracle·负载均衡·mariadb·lvs
爱吃苹果的梨叔6 小时前
训练集群网络中断怎么办?智算机房的 Console 串口排障方案
网络·python·智能路由器·php
xiaohaiAIgeo11 小时前
【2026年】医药研发实验室GLP的通风设计要求:稳定性可验证性与合规性
网络·人工智能·科普知识
翼龙云_cloud11 小时前
亚马逊云渠道代理商:VPC 教程 利用 EC2 自建 NAT 实例降低私有子网出网成本
网络·云计算·aws
xiaoye-duck11 小时前
《Linux网络编程》UDP Socket 编程实战:从 Echo 回显、通用字典服务到套接字封装全流程
linux·网络·udp
酒神dnspup11 小时前
CDN 回源检测怎么做?用 DNSPup 验证节点命中、源站暴露与多地可用性
运维·服务器·网络·网络协议·tcp/ip
江南风月12 小时前
3分钟快速上手日志审计系统 WGLOG v2.2 更新了什么
运维·服务器·网络
Dawn-bit13 小时前
Linux网络进阶:TCP三次握手和四次挥手与TCP连接状态
linux·服务器·网络·tcp/ip·云计算·智能路由器