从浏览器地址输入url到显示主页的过程?
主要分为:DNS解析,TCP连接,发送HTTP请求,服务器处理请求,浏览器接收HTTP响应,断开连接
DNS解析:
浏览器发起一个DNS请求到DNS服务器,将域名解析为服务器的Ip地址
TCP连接:
浏览器通过解析得到Ip地址与服务器建立TCP连接(通常通过443端口进行加密HTTPS连接)。这一步涉及到TCP的三次握手过程,确保双方都准备好数据传输。
发送HTTP请求:
浏览器构建HTTP请求,包含请求行(get、http)、请求头(包含用户代理、接收的内容类型等信息)和请求体(如果有);将请求发送到服务器。
服务器处理请求:
接收到HTTP请求后,根据请求的资源路径,经过后端处理(可能包括数据库查询等),生成HTTP响应信息;响应信息包括状态行(http/1.1 200 OK),响应头(内容类型、缓存控制等消息),响应体(请求的资源内容)
浏览器接收HTTP响应:
浏览器接收到服务器HTTP响应,开始解析响应体中的HTML内容;然后构建DOM树、解析CSS和JavaScript文件等,最终渲染页面。
断开连接:
TCP四次挥手,连接结束。
DNS解析过程
DNS,domain name system 域名解析系统。作用:域名和IP相互映射。
开始,检查浏览器缓存,是否对应IP,
没有,看本地DNS服务器是否缓存对应的域名和ip
没有,请求根服务器,返回顶级域名服务器
请求顶级域名服务器,返回权威域名服务器
请求权限域名服务器,返回对应的ip地址
附录
-
DNS 解析阶段
- 主要涉及网络层和应用层 :
- 网络层 :当用户在浏览器输入网址(如
https://www.example.com/index.html
)后,浏览器首先会检查本地缓存中是否有对应的域名 - IP 地址映射。如果没有,就会向本地 DNS 服务器发送 DNS 请求。这个请求在网络层被封装为 IP 数据包,包含源 IP 地址(用户计算机的 IP 地址)和目的 IP 地址(本地 DNS 服务器的 IP 地址),在数据链路层封装为帧,通过物理层传输到本地 DNS 服务器。 - 应用层:DNS 请求本身是基于 DNS 协议构建的应用层数据,包含要查询的域名等信息。本地 DNS 服务器收到请求后,在应用层按照 DNS 协议解析请求,通过查询自身缓存或者向其他 DNS 服务器递归查询,最终找到目标域名对应的 IP 地址,并将结果返回给浏览器。这个过程中,数据在各层的封装和解封装与请求过程类似,只是方向相反。
- 网络层 :当用户在浏览器输入网址(如
- 主要涉及网络层和应用层 :
-
TCP 连接阶段
- 主要涉及传输层、网络层、数据链路层和物理层 :
- 传输层:在得到目标服务器的 IP 地址后,浏览器(客户端)会发起 TCP 连接请求。这个请求在传输层被封装为 TCP 数据段,其中包含源端口(浏览器随机分配的端口)、目的端口(对于 HTTP 通常是 80 或 443,这里假设是 443 用于 HTTPS)、SYN(同步)标志位等信息,用于与服务器建立连接。
- 网络层:TCP 数据段随后被封装为 IP 数据包,包含源 IP 地址和目标服务器的 IP 地址,用于在网络中路由。
- 数据链路层:IP 数据包被封装为数据帧,添加源 MAC 地址和目标 MAC 地址(通过 ARP 获取下一跳设备的 MAC 地址),用于在本地网络或通过交换机进行转发。
- 物理层:数据帧被转换为物理信号(如电信号或光信号)进行传输,经过网络设备(如路由器、交换机)传输到目标服务器。服务器收到连接请求后,会返回带有 SYN - ACK(同步 - 确认)标志位的 TCP 数据段,经过同样的各层处理后返回给客户端。客户端再发送 ACK(确认)数据段,完成 TCP 连接的三次握手过程。
- 主要涉及传输层、网络层、数据链路层和物理层 :
-
发送 HTTP 请求阶段
- 涉及应用层、表示层、传输层、网络层、数据链路层和物理层 :
- 应用层 :浏览器按照 HTTP 协议构建请求,如
GET /index.html HTTP/1.1
等信息,这是应用层数据。如果是 HTTPS 请求,在表示层会对 HTTP 请求进行加密(如使用 SSL/TLS 协议),转换为加密后的二进制数据格式。 - 传输层:加密后的请求数据被封装为 TCP 数据段,添加源端口、目的端口、序列号等信息,确保可靠传输。
- 网络层:TCP 数据段被封装为 IP 数据包,包含源 IP 地址和目标服务器的 IP 地址,用于在网络中路由。
- 数据链路层:IP 数据包被封装为数据帧,添加源 MAC 地址和目标 MAC 地址,通过交换机等设备转发。
- 物理层:数据帧被转换为物理信号传输到服务器。
- 应用层 :浏览器按照 HTTP 协议构建请求,如
- 涉及应用层、表示层、传输层、网络层、数据链路层和物理层 :
-
服务器处理请求阶段
- 主要涉及应用层和表示层(如果有加密) :
- 应用层 :服务器在应用层接收到浏览器发送的 HTTP 请求(如果是加密请求,先在表示层进行解密),按照服务器端的应用程序(如 Web 服务器软件)的逻辑进行处理。例如,根据请求的资源路径(如
/index.html
)查找对应的文件或者动态生成页面内容。 - 表示层(如果有加密):如果请求是加密的,服务器在表示层进行解密操作,将数据恢复为应用层能够理解的 HTTP 请求格式。
- 应用层 :服务器在应用层接收到浏览器发送的 HTTP 请求(如果是加密请求,先在表示层进行解密),按照服务器端的应用程序(如 Web 服务器软件)的逻辑进行处理。例如,根据请求的资源路径(如
- 主要涉及应用层和表示层(如果有加密) :
-
浏览器接收 HTTP 响应阶段
- 涉及物理层、数据链路层、网络层、传输层和应用层 :
- 物理层:服务器生成的 HTTP 响应数据首先在物理层被转换为物理信号,通过网络介质传输。
- 数据链路层:物理信号被转换为数据帧,通过交换机等设备转发,数据帧中包含源 MAC 地址(服务器网卡 MAC 地址)和目的 MAC 地址(客户端网卡 MAC 地址)。
- 网络层:数据帧被解封装为 IP 数据包,包含源 IP 地址(服务器 IP 地址)和目的 IP 地址(客户端 IP 地址),在网络中经过路由器等设备路由到客户端。
- 传输层:IP 数据包被解封装为 TCP 数据段,根据 TCP 协议的序列号等信息进行重组和校验,确保数据的完整性和顺序正确。
- 应用层:TCP 数据段被解封装为 HTTP 响应,浏览器在应用层按照 HTTP 协议解析响应,如解析响应头来获取内容类型、编码方式等信息,解析响应体来获取网页内容等。
- 涉及物理层、数据链路层、网络层、传输层和应用层 :
-
断开连接阶段
- 主要涉及传输层、网络层、数据链路层和物理层 :
- 传输层:浏览器或服务器(通常是浏览器先发起)会发送带有 FIN(结束)标志位的 TCP 数据段,表示要关闭连接。对方收到后会返回 ACK 数据段确认收到,然后可能也会发送 FIN 数据段,双方通过一系列的四次握手过程来关闭 TCP 连接。这些 TCP 数据段在传输层生成后,经过网络层封装为 IP 数据包,包含源 IP 地址和目的 IP 地址。
- 网络层:IP 数据包在数据链路层被封装为数据帧,添加源 MAC 地址和目标 MAC 地址,通过交换机等设备转发。
- 物理层:数据帧被转换为物理信号传输,完成连接的断开过程。
- 主要涉及传输层、网络层、数据链路层和物理层 :