输入url地址按下回车发生了什么?

输入url地址按下回车发生了什么?

1.输入url地址后,首先进行DNS解析,将相应的域名解析为IP地址;

2.客户端根据IP地址去寻找相应的服务器;

3.与服务器进行TCP的三次握手;

  所谓三次握手就是客户端在请求与服务器相连接时,彼此共计发送了三次数据包,就好比以下的对话:

  首先,需要明确的是,三次握手是客户端先发起请求。

   (第一次)客户端:hi,服务器,在吗?我想和你建立连接,你能收到我的消息吗?(此时客户端给服务端发送了一个数据包和发送序号,即SYN=1,Seq=X)

  (第二次)服务器:hi,客户端,我在呢,我收到你的消息了,我们可以建立连接,你能收到我答复的消息吗?(此时服务端发送syn+ack报文,并置发送序号为Y,再确认序号为X+1)

  (第三次)客户端:我收到你的答复了,很开心能和你建立连接。(此时客户端发送ack报文,并置发送序号为Z,再确认序号为Y+1)

  以上就是tcp三次握手的简化版。

 

4.客户端找到相应的资源库;

5.根据资源库返回页面信息;

6.浏览器根据自身的执行机制解析页面;(浏览器的执行机制?重绘?重排?......)

  浏览器解析页面时,会找到每一个文件夹(css、js、html、img......),每一个文件夹下的资源会重新走到第二步,去找到相应的服务器,然后一步步执行。

7.最后服务器将解析信息返回给客户端,进行TCP的四次挥手。

  所谓四次挥手就是客户端与服务端在断开连接时,彼此交互传输了四次数据包,就好比以下对话:

  首先,需要明确的是,四次挥手不知道哪一方是主动方,哪一方是被动方。

  男朋友(可能是客户端,可能是服务器):xxx,我们分手吧?我不想和你联系了。(此时主动方发送fin+ack报文,并置发送序号为X)

  女朋友:好的,我收到你分手的消息了,我同意分手。(此时被动方发送ack报文,并置发送序号为Z,再确认序号问X+1)

  (此时,女朋友正不爽呢,凭什么分手呀,我也不管你能不能收到,我也要提出分手...)

  女朋友:xxx,我们分手吧,我也不想和你联系了。(此时被动方发送fin+ack报文,并置发送序号问Y,再确认序号为X)

  男朋友:好的,我收到你同意并提出分手的消息了,再见!(此时主动方发送ack报文,并置发送序号为X,再确认序号为Y)

 

8.至此,客户端显示自己请求,即服务端返回的东西

posted @ 2019-01-19 23:04 北杨 阅读( ...) 评论( ...) 编辑 收藏
<think>我们被要求描述在浏览器地址输入URL下回发生的全过程及其涉及的技术原理。根据提供的引用,我们可以整合出一个详细的步骤描述。 步骤分解: 1. 用户输入URL下回。 2. 浏览器解析URL,检查输入的内容是否是合法的URL,还是需要搜索的关键词。 3. 如果是合法的URL,浏览器会检查本地缓存(如浏览器缓存、系统缓存、路由器缓存)是否有该URL的DNS记录(IP地址)。 4. 如果缓存中没有,则进行DNS解析(域名解析)过程: - 浏览器向本地DNS服务器(通常由网络运营商提供)发送查询请求。 - 如果本地DNS服务器没有缓存,则从根域名服务器开始,依次查询顶级域名服务器、权威域名服务器,直到获得目标域名对应的IP地址。 5. 建立TCP连接(三次握手): - 第一次握手:客户端(浏览器)向服务器发送SYN包,请求建立连接。 - 第二次握手:服务器收到SYN包后,发送SYN+ACK包作为响应。 - 第三次握手:客户端收到SYN+ACK包后,发送ACK包,连接建立。 6. 如果是HTTPS请求,还需要进行TLS握手(建立安全连接)。 7. 浏览器发送HTTP请求:建立连接后,浏览器向服务器发送HTTP GET请求,请求目标资源。 8. 服务器处理请求返回响应:服务器根据请求的资源,返回相应的数据(HTML文件、图片等)和HTTP状态码。 9. 浏览器处理响应: - 如果返回的状态码是301或302(重定向),浏览器会从响应头中的Location字段获取新的URL重新开始整个过程(从步骤1开始,但使用新的URL)。 - 如果返回的状态码是200(成功),浏览器开始解析返回的内容(如HTML)。 10. 浏览器解析HTML渲染页面: - 解析HTML构建DOM树。 - 解析CSS构建CSSOM树。 - 将DOM和CSSOM合成渲染树(Render Tree)。 - 根据渲染树进行布局(Layout)和绘制(Painting),显示页面。 11. 浏览器加载其他资源(如图片、CSS、JavaScript等),对于每个资源可能重复步骤3-8(但通常使用同一个TCP连接,或者建立新的连接)。 12. 页面加载完成。 此外,我们还需要注意以下几点: - 在DNS解析过程中,可能会涉及DNS负载均衡(CDN)等技术。 - 在建立TCP连接时,如果是HTTPS,则在TCP连接建立后还需要进行TLS握手(包括密钥交换、验证证书等步骤)。 - 浏览器在解析HTML时,如果遇到JavaScript代码,可能会阻塞DOM的构建(除非标记为异步或延迟执行)。 根据引用内容,我们特别注意到重定向的处理(301/302状态码)和DNS解析的详细步骤。 下面我们按照要求,用中文详细描述这一过程,适当添加引用标识。</think>### 地址输入URL下回后的全过程及技术原理 #### 1. **URL解析与输入处理** 浏览器首先判断输入内容是否为合法URL。若不符合URL格式(如包含空格或中文),则调用默认搜索引擎进行搜索;若为合法URL,则自动补全协议(如`http://`或`https://`)[^2][^3]。 --- #### 2. **DNS域名解析** 将域名转换为IP地址的过程: 1. **浏览器缓存**:检查本地缓存是否有DNS记录(如`chrome://net-internals/#dns`)。 2. **系统缓存**:查询操作系统Hosts文件(如Windows的`C:\Windows\System32\drivers\etc\hosts`)。 3. **路由器缓存**:检查本地路由器的DNS缓存。 4. **ISP DNS服务器**:向网络运营商(如电信)的DNS服务器发起递归查询: - 根域名服务器 → 顶级域服务器(如`.com`) → 权威DNS服务器(如`baidu.com`) 5. 最终获得目标IP地址(如`180.101.49.12`),结果缓存至本地[^2][^4][^5]。 --- #### 3. **建立TCP连接(三次握手)** 使用传输层协议建立可靠连接: 1. **SYN**:客户端发送`SYN=1, Seq=x`报文。 2. **SYN+ACK**:服务端回复`SYN=1, ACK=x+1, Seq=y`。 3. **ACK**:客户端确认`ACK=y+1`。 此时连接建立,可传输数据[^3][^5]。 > **技术原理**:TCP通过序列号、确认应答、超时重传等机制保证可靠性。 --- #### 4. **TLS握手(HTTPS场景)** 若为HTTPS协议,额外进行加密协商: 1. 客户端发送`ClientHello`(支持加密套件列表)。 2. 服务端回复`ServerHello`(选定加密套件)、数字证书。 3. 客户端验证证书有效性(如CA机构签名)。 4. 生成会话密钥,通过公钥加密传输,建立安全通道[^4]。 --- #### 5. **发送HTTP请求** 浏览器构建HTTP报文发送: ```http GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Chrome/105.0 Accept: text/html ``` - 若为长连接(HTTP/1.1默认),复用同一TCP连接传输资源[^2][^4]。 --- #### 6. **服务器处理与响应** 服务器返回响应: - **状态码**: - `200 OK`:直接返回资源。 - `301/302`:重定向(响应头含`Location: https://new-url.com`),浏览器重新发起请求[^1][^2]。 - 响应体含HTML/CSS/JS等资源。 --- #### 7. **浏览器渲染** 1. **解析HTML**:构建DOM树(若遇`<script>`阻塞解析)。 2. **解析CSS**:生成CSSOM树。 3. **合渲染树**:DOM + CSSOM = Render Tree。 4. **布局(Layout)**:计算元素位置/大小。 5. **绘制(Paint)**:将像素输出到屏幕。 6. **执行JavaScript**:触发`DOMContentLoaded`和`load`事件[^3]。 --- #### 8. **连接关闭(四次挥手)** 数据传输完成后断开TCP连接: 1. 客户端发送`FIN`报文。 2. 服务端回复`ACK`。 3. 服务端发送`FIN`。 4. 客户端回复`ACK`,等待超时后关闭[^3][^5]。 --- ### 关键技术点总结 | 步骤 | 核心协议 | 关键技术 | |------|----------|----------| | DNS解析 | DNS/UDP | 递归查询、缓存机制 | | 传输层 | TCP | 三次握手、滑动窗口、拥塞控制 | | 安全层 | TLS/SSL | 非对称加密、证书验证 | | 应用层 | HTTP/HTTPS | 请求/响应模型、状态管理 | | 渲染 | WebKit/Blink | 关键渲染路径(CRP) | > **性能优化方向**:DNS预解析(`<link rel="dns-prefetch">`)、TCP快速打开(TFO)、HTTP/2多路复用、资源预加载[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值