当输浏览器输入URL到最后的页面响应这一过程之前发生了什么?这个可以说是这几年很多公司面试的一个经典题目了,一下是我个人的一个理解,当然还有很多地方没有往细了去理解,所以打算不断的更新,maybe~
从浏览器输入url回车到页面的响应这一系列动作可以主要归纳为4部:域名解析 > 建立连接 > 数据通信 > 断开连接;
一、域名解析(DNS解析)
当你在浏览器中输入一个地址时,例如www.jianshu.com,其实不是简书真正的地址。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的简书的网址。所以互联网设计者需要在用户的方便性与可用性方面做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析。它实际上充当了一个翻译的角色,实现了网址到IP地址的转换。网址到IP地址转换的过程是如何进行的?
要查找域名对应的IP,首先去看浏览器是否有ip地址的缓存,如果没有的话就去本地的hosts文件里面去看看有没有缓存,如果hosts文件没有的话,那么DNS就会查看本地的DNS缓存,如果有的话就直接返回对应的ip即可。如果还是没有的话就会去递归的去查找了:
系统将域名发送至 LDNS(本地域名服务器),查找成功返回其对应 IP 地址,失败则 LDNS 向 Root Name Server(根域名服务器)发起请求获得域的顶级域名服务器地址,然后依次请求获得各级域名服务器地址,最后获得域名对应 IP 地址;
LDNS 将 IP 地址返回给操作系统并缓存起来;
系统将 IP 地址返回给浏览器并缓存起来;
二、建立连接(三次握手)
客户端和服务端建立起连接,需要通过一个经典的三次握手环节了:
客户端问候服务端 “hello, 你好”
服务端回答客户端“你好,我收到你的消息了”
客户端说“你回答我信息让我确认你能接收的到我的消息,我们开始通信吧!”
三、数据通信
客户端与服务器建立连接后,便会开始进行通信:
如果浏览器向服务器发起一个请求网页资源的请求,服务器返回对应网页资源,浏览器渲染、构建网页,在构建网页的过程中,可能会继续请求 CSS、JavaScript 等资源。如果浏览器发送的是一个ajax请求,则服务器放回一段JSON数据。
四、断开连接(四次挥手)
在数据交互完成之后双方要断开连接了,这个时候就会进行一个四次挥手的过程:
浏览器向服务器发送想断开连接的请求「我要走啦」;
服务器向浏览器发送收到请求的响应「我知道啦」;
服务器向浏览器发送断开连接的请求「可以了」;
浏览器断开连接并向服务器发送一个反馈请求,服务器收到后断开连接「好的,拜拜」。
为什么客户端与服务器断开连接是四次挥手是因为当客户端告诉服务器想断开连接的时候,服务器的数据不一定已处理完毕,所以服务器是先告诉客户端说已经收到了它想断开连接的请求,然后当服务器中数据处理完毕时,便通知客户端并请求断开连接,客户端收到后便断开连接并通知服务器,服务器收到后才断开连接。
网友评论