当你在浏览器中输入 www.baidu.com
并按下回车时,整个过程涉及多个技术环节的协同工作。以下是详细的步骤分解:
1. 浏览器解析URL
- 输入处理:浏览器检查你输入的URL是否完整(例如自动补全
http://
或https://
)。 - 协议选择:默认使用HTTPS(加密传输),若网站不支持则回退到HTTP。
2. DNS域名解析
- 本地缓存查询:浏览器先检查本地DNS缓存(如之前访问过百度,可能直接获取IP)。
- 系统调用:若缓存未命中,操作系统通过
gethostbyname
或getaddrinfo
发起DNS查询:- 本地Hosts文件:检查
/etc/hosts
(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts
(Windows)。 - 本地DNS服务器(通常由ISP或公共DNS如8.8.8.8提供):
- 递归查询根域名服务器 → .com顶级域名服务器 → baidu.com权威域名服务器。
- 最终获取百度的IP地址(例如
110.242.68.66
)。
- 本地Hosts文件:检查
3. 建立TCP连接
- 三次握手:
- 客户端发送SYN包(序列号随机生成,如
Seq=100
)。 - 服务器回复SYN-ACK包(如
Seq=300, Ack=101
)。 - 客户端发送ACK包(
Ack=301
)完成握手。
- 客户端发送SYN包(序列号随机生成,如
- TLS协商(HTTPS):
- Client Hello:浏览器发送支持的加密算法列表和随机数。
- Server Hello:服务器选择算法并返回证书+随机数。
- 验证证书链(CA机构签名可信性)。
- 生成会话密钥,后续通信加密。
4.HTTP请求与响应
- 请求构造:
GET / HTTP/1.1 Host: www.baidu.com User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml
- 负载均衡:百度的前端服务器可能基于地理位置或负载情况分配请求到最近的集群。
- CDN加速:静态资源(如图片、JS)可能从边缘节点直接返回。
5.Web服务器处理
- 反向代理(如Nginx):
- 根据URL路由到后端应用服务器或静态文件。
- 后端逻辑:
- Baidu的Web服务可能基于分布式架构(如BFE接入层)。
- 生成动态内容(搜索首页的个性化推荐需查询用户画像)。
6.Render页面渲染
1.HTML/CSS/JS下载:
- HTML定义结构,CSS控制样式,JavaScript实现交互。
- JS可能触发更多异步请求(例如广告、用户跟踪)。
2.关键渲染路径:
- DOM树 + CSSOM树 → Render树 → Layout布局 → Paint绘制。
3.优化策略:
- Baidu会延迟加载非首屏资源(Lazy Load),优先渲染搜索框。
7.TCP连接释放
四次挥手:
FIN → ACK → FIN → ACK (确保数据完整传输)。
补充细节:
所有环节可能存在重试(如TCP超时)、缓存(CDN)、压缩(Gzip)、安全校验(WAF防火墙)等机制。
内容由零声教学AI助手提供,问题来源于学员提问