从浏览器输入 URL 到页面返回:一次互联网通信全过程

张开发
2026/4/10 15:28:12 15 分钟阅读

分享文章

从浏览器输入 URL 到页面返回:一次互联网通信全过程
引言从浏览器输入 URL 到页面展示中间发生了什么”几乎是计算机网络里最经典的问题之一。这道题之所以重要是因为它把 DNS、TCP、HTTP、路由转发这些知识点全部串起来了。看懂这个过程网络知识才算真正连成一条线。域名解析假设在浏览器中输入http://www.myorange.com浏览器首先并不知道这个域名对应哪台服务器所以第一步一定是解析域名。一个常见的查找顺序如下浏览器缓存操作系统缓存本地hosts文件本地 DNS 服务器上级 DNS 服务器或递归解析过程最终浏览器会拿到一个目标 IP比如www.myorange.com - 2.2.2.2到这里应用程序才真正知道“请求应该发往哪台主机”。浏览器构造 HTTP 请求有了目标 IP 后浏览器会构造 HTTP 请求报文。例如最简单的请求大致长这样GET / HTTP/1.1 Host: www.myorange.com Connection: keep-alive User-Agent: Mozilla/5.0此时浏览器会把以下信息交给操作系统网络协议栈目标 IP目标端口请求数据内容如果是 HTTP默认端口通常是80如果是 HTTPS默认端口通常是443。TCP 三次握手建立连接如果使用的是 TCP那么在发送真正业务数据之前客户端和服务端需要先建立连接。第一次握手客户端发送 SYN 报文表示“我想建立连接”。第二次握手服务端收到后回复 SYN ACK表示“我收到了也同意建立连接”。第三次握手客户端再回复 ACK表示“我也收到你的确认了”。至此TCP 连接建立完成。这个过程的意义是双方确认发送和接收能力正常双方协商初始序列号为后续可靠传输建立基础三次握手过程示意图如下客户端发送 HTTP 请求数连接建立后浏览器就可以发送真正的 HTTP 请求内容。这个过程并不是“HTTP 自己飞过去”而是HTTP 请求报文先交给传输层传输层把它封装进 TCP 报文段网络层继续封装成 IP 包数据链路层再封装成帧最终通过网卡发出去如果客户端和服务器不在同一个网段数据不会直接到达对方而是会先发给网关再由路由器逐跳转发。服务器处理请求并返回响应服务器收到请求后会按相反顺序解封装最终把 HTTP 请求交给 Web 服务程序处理。如果请求的是网页服务器可能会返回HTTP/1.1 200 OK Content-Type: text/html; charsetUTF-8 Content-Length: 138然后再带上响应体也就是 HTML、JSON、图片或其他资源内容。浏览器收到响应后开始解析如果是 HTML就继续解析 DOM遇到 CSS、JS、图片还会继续发起新的请求最终完成页面渲染所以用户看到一个页面往往不是一次请求而是一组请求共同完成的。TCP 如何保证数据可靠送达TCP 的可靠性依赖于序列号和确认应答。例如客户端要发送 1000 字节数据起始序列号是 1那么发送方把这段数据标记为从1开始接收方成功收到后会回复确认号1001这个确认号的含义是“从 1 到 1000 的数据我已经收到下一次请从 1001 开始发送。”这就是 TCP 能实现可靠传输的重要原因之一。通信结束后释放连接当数据传输完成后TCP 连接不会永远存在通常需要通过四次挥手关闭。第一次挥手客户端发送 FIN表示“我这边没有数据要发了”。第二次挥手服务端回复 ACK表示“我知道了”。第三次挥手服务端处理完剩余数据后也发送 FIN表示“我这边也发完了”。第四次挥手客户端回复 ACK连接关闭流程结束。四次挥手的本质是两个方向的关闭要分开确认因为 TCP 是全双工通信客户端和服务端的发送通道可以分别关闭。四次挥手过程示意图如下整个过程涉及哪些核心组件从输入 URL 到页面展示常见组件包括浏览器本地 DNS 解析器操作系统协议栈网卡网关和路由器目标服务器Web 应用程序所以这个过程并不是单一协议完成的而是多个层次协同工作。总结把整个过程压缩成一句话就是“先解析域名再建立 TCP 连接然后发送 HTTP 请求服务器返回响应浏览器解析资源并渲染页面最后按需复用或关闭连接。”如果你能把下面这些点顺着讲清楚这道题基本就答稳了DNS 解析TCP 三次握手HTTP 请求与响应路由转发与网关TCP 四次挥手这也是理解整个互联网通信过程最好的入口。如果这篇文章对你有帮助欢迎继续阅读本系列后续内容。若文中有不准确或需要补充的地方也欢迎指出。

更多文章