访问网站时会发生什么
引言
在当今的数字时代,我们常常理所当然地认为只需点击几下鼠标或轻触几下就能轻松访问网站。然而,在这看似简单的操作背后,却隐藏着各种网络基础设施组件之间复杂的流程和交互。
你是否曾好奇过,当你https://www.google.com在浏览器地址栏输入网址并按下回车键后会发生什么Enter?在本文中,我们将揭开其中复杂步骤的神秘面纱,探索幕后的奥秘。
DNS 请求
整个过程始于浏览器向域名系统 (DNS) 服务器发送请求,将人类可读的域名 (.example.com www.google.com) 转换为机器可以理解的 IP 地址。这个过程类似于拨打电话前在电话簿中查找电话号码。
了解 DNS:
DNS 是一个分层且去中心化的系统,它就像互联网的电话簿,将域名映射到相应的 IP 地址。当您在浏览器中输入域名时,浏览器会向 DNS 服务器发送请求,以获取与该域名关联的 IP 地址。
DNS 分为不同的层级,根服务器位于最顶层,其次是顶级域名 (TLD) 服务器,然后是负责特定域名的权威名称服务器。这种层级结构能够高效地分发和缓存域名到 IP 地址的映射关系,从而确保快速解析。
DNS 查询过程
- 浏览器缓存:在向 DNS 服务器发送请求之前,浏览器会检查本地缓存,查看是否有最近解析过的与您输入的域名对应的 IP 地址。如果找到,浏览器可以跳过 DNS 查询过程,直接执行下一步。
- 操作系统缓存:如果浏览器缓存中没有所需的 IP 地址,浏览器会检查操作系统的 DNS 缓存,其中存储了最近解析的域名到 IP 地址的映射。
- 递归 DNS 解析器:如果本地缓存中找不到 IP 地址,浏览器会请求递归 DNS 解析器,该解析器通常由您的互联网服务提供商 (ISP) 提供或在您的网络上配置。
- 根服务器和顶级域名服务器:递归解析器通过查询其中一个根服务器来启动 DNS 解析过程,以获取负责该域的顶级域名服务器的 IP 地址(例如
.com,,,.org).net。 - 权威名称服务器:一旦顶级域名服务器提供负责该域名的权威名称服务器的 IP 地址,递归解析器就会联系该服务器以获取与您输入的域名关联的最终 IP 地址。
- 响应缓存:递归解析器、操作系统和浏览器会将解析出的 IP 地址缓存一段时间(生存时间或 TTL),以加快对同一域的后续请求。
获取到 IP 地址后,您的浏览器现在可以与托管该网站的服务器建立连接。
TCP/IP 和网络通信
传输控制协议/互联网协议 (TCP/IP) 套件控制数据在互联网上的传输方式,确保浏览器和网络服务器之间数据包的可靠有序传输。
TCP 的三次握手
在数据交换之前,您的浏览器和 Web 服务器会通过称为“三次握手”的过程建立 TCP 连接:
- SYN:您的浏览器向服务器发送同步(SYN)数据包,请求建立连接。
- SYN-ACK:服务器通过向您的浏览器发送同步确认 (SYN-ACK) 数据包来确认请求。
- ACK:您的浏览器会回复一个确认 (ACK) 数据包,完成三次握手并建立可靠的 TCP 连接。
IP路由和数据包传递:
建立TCP连接后,即可使用互联网协议(IP)在浏览器和Web服务器之间传输数据。IP地址唯一标识互联网上的设备,使路由器能够沿着最有效的路径将数据包转发到目的地。
路由器会检查每个数据包中的目标IP地址,并使用路由表来确定下一跳。此过程持续进行,直到数据包到达Web服务器的网络,在那里,数据包会根据TCP序列号按正确的顺序重新组装。
防火墙安全检查
在请求到达Web服务器之前,它必须先经过防火墙——一种监控传入和传出网络流量的安全系统。防火墙就像一个守门人,它会根据预定义的规则检查每个数据包,以决定是否允许或阻止它。
防火墙规则和策略
防火墙规则基于源和目标 IP 地址、端口、协议以及其他标准等因素。这些规则保护服务器免受潜在威胁,例如恶意攻击、未经授权的访问尝试和其他恶意活动。
如果传入的请求符合防火墙规则,则可以发送到 Web 服务器。但是,如果请求违反规则,则会被阻止,并向客户端发送相应的响应(例如,错误消息)。
HTTPS 和 SSL/TLS 加密
您进入本网站后https://www.google.com,浏览器会使用超文本传输安全协议 (HTTPS) 和安全套接字层/传输层安全协议 (SSL/TLS) 建立安全连接。这种加密方式可确保您的浏览器与服务器之间交换的数据保持私密和安全,防止数据被窃听和篡改。
SSL/TLS握手
在数据安全传输之前,您的浏览器和Web服务器会执行SSL/TLS握手以建立加密通信通道:
- Hello 消息:您的浏览器向服务器发送“客户端 Hello”消息,指示其支持的 SSL/TLS 版本和密码套件(加密算法)。
- 服务器响应:服务器以“Server Hello”消息进行响应,确认所选的 SSL/TLS 版本和密码套件,并发送其 SSL 证书。
- 证书验证:您的浏览器通过检查服务器 SSL 证书的真实性、到期日期和颁发机构(证书颁发机构或 CA)来验证服务器的 SSL 证书。
- 密钥交换:如果证书有效,您的浏览器和服务器将使用非对称加密(例如 RSA)交换加密密钥,以建立用于对称加密的共享密钥。
- 加密通信:通过共享密钥,浏览器和服务器之间交换的所有后续数据都将使用对称加密算法进行加密,从而提供安全的通信通道。
HTTPS 和 SSL/TLS 的优势
HTTPS 和 SSL/TLS 加密具有以下几个优势:
- 保密性:您的浏览器与服务器之间交换的数据经过加密,防止窃听,并保护登录凭证、信用卡详细信息和个人数据等敏感信息。
- 完整性:SSL/TLS 确保数据在传输过程中不会被篡改而不被发现,从而防止中间人攻击和数据篡改。
- 身份验证:SSL 证书验证过程有助于验证您所连接网站的身份,防止身份冒用和网络钓鱼攻击。## 负载均衡和可扩展性
像谷歌这样的大型网站会收到来自全球用户的大量流量。为了高效处理这种负载并确保高可用性,它们会使用负载均衡器——一种将传入流量分配到多个网络服务器上的系统。
负载均衡器的工作原理:
负载均衡器是客户端(您的浏览器)和托管网站的 Web 服务器之间的中介。当请求到达时,负载均衡器会根据各种负载均衡算法和服务器健康检查来确定应该由哪个 Web 服务器来处理该请求。
常见的负载均衡算法包括:
- 轮询:请求按顺序分发到可用的服务器上。
- 最少连接数:活动连接数最少的服务器将接收下一个请求。
- IP 哈希:为了保持会话持久性,来自同一客户端 IP 地址的请求始终发送到同一服务器。
负载均衡器持续监控 Web 服务器的健康状况和可用性,自动将流量从故障或过载的服务器重新路由,以维持服务的可用性和性能。
负载均衡的优势
负载均衡具有以下几个优势:
- 可扩展性:可以轻松地向池中添加或删除额外的 Web 服务器,以应对流量波动。
- 高可用性:如果一台 Web 服务器发生故障,负载均衡器会将流量重定向到其余健康的服务器,从而确保服务连续性。
- 会话持久性:像 IP 哈希这样的算法确保来自同一客户端的后续请求被路由到同一服务器,从而维护会话状态并改善用户体验。
- 安全性:负载均衡器可以作为抵御分布式拒绝服务 (DDoS) 攻击的第一道防线,在恶意流量到达 Web 服务器之前对其进行过滤。## Web 服务器处理
当您的请求经过负载均衡器后,它会到达负责处理和提供所请求内容的可用 Web 服务器之一。Web 服务器充当网站的骨干,处理传入的请求并提供相应的响应。
Web服务器软件
Web 服务器由处理 HTTP/HTTPS 请求和响应的软件驱动。一些常用的 Web 服务器软件包括:
- Apache HTTP 服务器:最广泛使用的开源 Web 服务器之一,以其稳定性、灵活性和广泛的模块生态系统而闻名。
- Nginx:一款高性能、轻量级的 Web 服务器和反向代理服务器,常用于负载均衡和提供静态内容。
- Microsoft Internet Information Services (IIS):微软开发的一款网络服务器软件,主要用于 Windows Server 操作系统。
这些网络服务器软件应用程序负责解释传入的请求、处理请求并生成相应的响应。
静态内容分发
如果请求的资源是静态文件(例如 HTML、CSS、JavaScript、图像),Web 服务器可以直接从其文件系统或缓存中提供该文件。这个过程很简单:Web 服务器读取请求的文件并将其返回给您的浏览器。
动态内容生成:
如今,许多网站依赖于根据用户输入、个性化设置或从数据库检索数据而动态生成的内容。在这种情况下,Web 服务器可能会将请求处理委托给应用服务器。
应用服务器交互
应用服务器执行服务器端逻辑、处理用户输入,并与数据库或其他数据源交互以生成动态内容。常见的应用服务器技术包括:
- Java应用服务器:Apache Tomcat、JBoss、WebLogic、WebSphere
- .NET 应用程序服务器:Internet 信息服务 (IIS)、WebSphere 应用程序服务器
- Node.js:一种可用于服务器端脚本编写的 JavaScript 运行时环境。
- PHP 服务器:带有 PHP 模块的 Apache/Nginx,支持 PHP 的 Microsoft IIS
当Web服务器收到动态内容请求时,它会将请求转发给相应的应用服务器进行处理。应用服务器执行必要的代码(例如,Java、.NET、Node.js、PHP),并从数据库或其他来源检索所需数据。
例如,当您在谷歌上搜索时,网络服务器会收到您的请求。它将请求传递给应用服务器,应用服务器会与谷歌的搜索索引和算法交互,从而动态生成相关的搜索结果。
数据库交互
许多网站依赖数据库来高效地存储和检索数据。在动态内容生成的情况下,应用服务器可能需要与一个或多个数据库交互以获取或更新数据。
Web应用程序中常用的数据库管理系统(DBMS)包括:
- 关系型数据库:MySQL、PostgreSQL、Oracle、Microsoft SQL Server
- NoSQL 数据库:MongoDB、Cassandra、Redis、Couchbase
应用服务器与数据库建立连接,执行查询(例如,关系数据库的 SQL,NoSQL 数据库的基于文档的查询),并检索或操作必要的数据。
例如,当您登录网站时,应用程序服务器可能会查询用户数据库以验证您的凭据并获取您的用户个人资料数据。
响应生成和渲染
应用服务器处理完请求并收集到必要数据后,会生成相应的响应(例如 HTML、JSON、XML)并将其发送回 Web 服务器。Web 服务器随后会通过已建立的 HTTPS 连接将响应转发给您的浏览器。
然后,您的浏览器会收到响应,解析 HTML、CSS 和 JavaScript,并在您的屏幕上呈现网站内容,从而提供您最初请求的最终结果。
在这个复杂的过程中,各个组件协同工作,确保您的请求得到安全处理、高效处理,并及时可靠地送达您的浏览器。
文章来源:https://dev.to/scofieldidehen/what-happens-when-you-visit-a-website-dj8