计算机网络知识串联:使用浏览器访问一个网址的过程解析

在浏览器中输入 https://www.baidu.com后会发生什么 ?

步骤如下:

  1. 系统自动在本地寻找hosts文件,该文件在Sysem32/etc下,如果该文件中已经记录该域名对应的IP地址则直接访问IP,没有的话执行域名解析。域名解析,请求配置的DNS服务器,经过DNS服务器解析后获得一个目标IP地址。
  2. 准备访问目标IP,通过80号端口和按照Http协议生产一个报文。
  3. 访问IP,从上层的应用层已经生成的报文到传输层,网络层,物理层,层层装包生成最终报文,最后将数据发送出去。
  4. 寻找路由,从默认网关到路由器,再到下一跳路由器.......在网络中多次转发,最后到达百度的服务器。
  5. 找到百度的服务器后等待百度主机的防火墙等等验证。
  6. 百度服务器接受请求,并从物理网到应用层,层层拆包并检验数据,最后获得最终信息。
  7. 应用层解析后开始生成对应的HTML文件,装包并将文件数据返回给客户机。
  8. 主机经过网络的层层转发后收到了百度主机发来的HTML文件,拆包后交给浏览器,浏览器根据HTML文件进行渲染,最后生成页面。

只考虑到网络层的话:

  1. 根据域名,进行DNS域名解析。
  2. 拿到解析的IP地址,建立TCP连接
  3. 发送HTTP请求
  4. 服务器处理请求
  5. 返回HTTP报文
  6. 关闭TCP连接
  7. 浏览器解析HTML
  8. 浏览器渲染页面

 

知识点1:DNS

首先,我们输入的网址是域名。

由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。

<think>嗯,用户想了解浏览器访问目标域名的完整处理流程,这是一个典型的计算机网络问题。从用户提问的精确性来看,ta应该具备一定技术背景,可能是开发者或运维人员,需要系统性知识而非表面解释。 用户提供的两份引用材料很有价值,但需要整合补充。引用[1]强调了DNS解析和协议协同,引用[2]侧重服务器响应处理,我需要将两者串联成完整链条。考虑到用户要求"尽可能多参考历史记录",但当前是新对话,所以重点构建逻辑严密的流程说明。 技术要点需要分层解析:首先网络基础层(DNS/TCP),然后应用层(HTTP/HTTPS),最后浏览器渲染层。特别要注意HTTPS的加密握手过程容易被忽略,但现代网站基本都使用HTTPS,必须包含。渲染阶段的回流重绘对前端性能很重要,用户可能也会关心。 在生成相关问题环节,要覆盖安全(如HTTPS)、性能(如DNS缓存)、故障排查等维度。用户身份推测是技术人员,问题可以适当深入,比如问到TCP快速打开这种进阶特性。但基础问题如"为什么需要DNS"也要保留,兼顾不同层次学习者。 最后检查LaTeX格式:文中所有协议名如HTTP不需要数学格式,但涉及加密算法的RSA/ECDHE等变量应使用$x$包裹。独立公式如密钥交换过程需要$$...$$,但本次回复暂无复杂公式可省略。</think>以下是浏览器访问目标域名的完整处理流程,结合关键网络协议和系统组件逐步解析: --- ### **一、DNS 解析:域名 → IP 地址** 1. **浏览器缓存查询** 浏览器首先检查自身缓存(如 `chrome://net-internals/#dns`),若存在域名对应IP则直接使用。 2. **系统缓存查询** 若浏览器无缓存,查询操作系统缓存(如 Windows 的 `hosts` 文件)。 3. **路由器缓存查询** 请求发送至本地路由器,检查路由器DNS缓存。 4. **递归DNS服务器查询** 若以上均未命中,向ISP提供的递归DNS服务器(如 `8.8.8.8`)发起请求: - 递归服务器依次查询根域名服务器 → 顶级域服务器(如 `.com`) → 权威域名服务器 - 最终获得IP地址并逐级缓存[^1] > **示例**:`www.example.com` → 根服务器指引到 `.com` 服务器 → 指引到 `example.com` 的权威服务器 → 返回IP `93.184.216.34` --- ### **二、建立TCP连接:三次握手** 1. **SYN** 客户端发送SYN包(Seq=0)到服务器IP的80/443端口。 2. **SYN-ACK** 服务器回复SYN-ACK包(Seq=0, Ack=1)。 3. **ACK** 客户端发送ACK包(Seq=1, Ack=1)确认连接。 $$ \text{连接建立成功:} \text{Client} \xrightarrow{\text{SYN}} \text{Server} \xrightarrow{\text{SYN-ACK}} \text{Client} \xrightarrow{\text{ACK}} \text{Server} $$ --- ### **三、TLS握手(HTTPS场景)** 若为HTTPS协议(端口443),额外进行加密握手: 1. **Client Hello** 客户端发送支持的TLS版本、加密套件列表、随机数。 2. **Server Hello** 服务器选择加密套件,下发数字证书和随机数。 3. **密钥交换** 客户端验证证书合法性,生成预主密钥并用证书公钥加密传输。 4. **会话密钥生成** 双方通过随机数和预主密钥生成对称加密密钥[^2]。 --- ### **四、HTTP请求与响应** ```mermaid sequenceDiagram Client->>Server: GET /index.html HTTP/1.1 Server->>Client: HTTP/1.1 200 OK Server->>Client: [HTML/CSS/JS资源] ``` 1. **请求发送** 浏览器发送HTTP请求头(含 `User-Agent`, `Cookie` 等)。 2. **服务器处理** 服务器解析请求,应用逻辑处理(如数据库查询),生成响应。 3. **响应返回** 返回状态码(如200)、响应头(`Content-Type`, `Cache-Control`)及资源内容[^2]。 --- ### **五、浏览器渲染** 1. **解析HTML** 构建DOM树,遇到 `<link>` 和 `<script>` 触发CSS/JS加载。 2. **样式计算** 解析CSS生成CSSOM树,与DOM合并为渲染树。 3. **布局与绘制** 计算元素几何位置(Layout),像素级绘制(Paint)。 4. **资源加载** 对图片等子资源发起新请求(可能触发并发TCP连接)。 --- ### **六、连接终止** 1. **四次挥手** - 客户端发送FIN包 - 服务器回复ACK - 服务器发送FIN包 - 客户端回复ACK后释放连接 $$ \text{Client} \xrightarrow{\text{FIN}} \text{Server} \xrightarrow{\text{ACK}} \text{Client} \xrightarrow{\text{FIN}} \text{Server} \xrightarrow{\text{ACK}} \text{终止} $$ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值