本地域名服务器(面试官)

1. 写在前面对于互联网我们都不陌生,它完完全全改变了我们的生活,生活在这样的时代还是很幸福的。我们平时查百度、逛淘宝、京东、用腾讯、爱奇艺看视频等,我们在浏览器输入一个域名,就可以进入到我们想要的系统或页面,这其中发生了什么?是怎样的流程,我想大多数人是不太清楚的,猿人就来给大家聊聊。总体来说分为以下几个过程:DNS 解析:将域名解析成 IP 地址TCP 连接:TCP 三次握手发送 HTTP 请求服务器处理请求并返回 HTTP 报文浏览器解析渲染页面断开连接:TCP 四次挥手2. URL是什么?URL是英语Uniform Resource Locator的缩写,中文名叫:统一资源定位符(或称统一资源定位器/定位地址、URL地址),有时也被俗称为网页地址(网址)。URL就如同在网络上的门牌,是因特网上标准的资源的地址(Address)。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址。现在它已经被万维网联盟编制为因特网标准。标准的格式如下:scheme://host.domain:port/path/filename各部分解释如下:scheme – 定义因特网服务的类型。常见的协议有 http、https、ftp、file,其中最常见的类型是 http,而 https 则是进行加密的网络传输。host – 定义域主机(http 的默认主机是 www)domain – 定义因特网域名,比如 http://w3school.com.cnport – 定义主机上的端口号(http 的默认端口号是 80)path – 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)filename – 定义文档/资源的名称3. 域名解析(DNS)域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。3.1 IP地址IP 地址是指互联网协议地址,是 IP Address 的缩写。IP 地址是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP 地址是一个 32 位的二进制数,比如 127.0.0.1 为本机 IP。3.2 什么是域名解析域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。DNS 是一个网络服务器,我们的域名解析简单来说就是在 DNS 上记录一条信息记录。例如 baidu.com 220.114.23.56(服务器外网IP地址)80(服务器端口号)3.3 浏览器如何通过域名去查询 URL 对应的 IP 呢当应用过程需要将一个主机域名映射为IP地址时,就调用域名解析函数,解析函数将待转换的域名放在DNS请求中,以UDP报文方式发给本地域名服务器。本地的域名服务器查到域名后,将对应的IP地址放在应答报文中返回。同时域名服务器还必须具有连向其他服务器的信息以支持不能解析时的转发。若域名服务器不能回答该请求,则此域名服务器就暂成为DNS中的另一个客户,向根域名服务器发出请求解析,根域名服务器一定能找到下面的所有二级域名的域名服务器,这样以此类推,一直向下解析,直到查询到所请求的域名。4. 新建连接(TCP三次握手)TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。原理1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。3)最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束。通俗的说法1)Client:嘿,李四,是我,听到了吗?2)Server:我听到了,你能听到我的吗?3)Client:好的,我们互相都能听到对方的话,我们的通信可以开始了。5. 发送HTTP请求TCP 三次握手结束后,开始发送 HTTP 请求报文。请求报文由请求行(request line)、请求头(header)、请求体三个部分组成,如下图所示:6. 服务端处理服务器是网络环境中的高性能计算机,它侦听网络上的其他计算机(客户机)提交的服务请求,并提供相应的服务,比如网页服务、文件下载服务、邮件服务、视频服务。而客户端主要的功能是浏览网页、看视频、听音乐等等,两者截然不同。 每台服务器上都会安装处理请求的应用——web server。常见的 web server 产品有 apache、nginx、IIS 或 Lighttpd 等。 web server 担任管控的角色,对于不同用户发送的请求,会结合配置文件,把不同请求委托给服务器上处理相应请求的程序进行处理(例如 CGI 脚本,JSP 脚本,servlets,ASP 脚本,服务器端 JavaScript,Java或者一些其它的服务器端技术等),然后返回后台程序处理产生的结果作为响应。MVC 后台处理SpirngMVC的执行流程,猿人也给大家画出来了,很详细哦!http响应报文格式Http状态码对于每一个请求,http服务器都会返回一个结果,不管是成功还是失败,不同的状态码代表某一类结果。比如1开头的代表服务器收到请求,需要请求者继续执行操作,2开头的代表返回成功,3开头的代表重定向,4开头的代表客户端错误,5开头的代表服务端错误。这样我们就可以根据这些数字来判断是否执行完成,也可以用来定位排查问题。1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
7. 浏览器解析渲染浏览器按顺序解析HTML文件,构建DOM树。准确地说,浏览器需要加载解析的不仅仅是HTML,还包括CSS、JS以及图片、视频等其他媒体资源。浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。要注意的是,浏览器的解析过程并非是串连进行的,比如在解析CSS的同时,可以继续加载解析HTML,但在解析执行JS脚本时,会停止解析后续HTML。为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。8. 断开连接(TCP四次挥手)上述所有步骤完成后,就需要断开连接了。就比如我们两个人打电话,打完后就需要挥一挥手,告别了,不然要扣话费了。同样的道理,如果上述步骤执行完成后,不断开连接,则会消耗网络资源。TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。意义:当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。原理1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。通俗的说法1)Client:我所有东西都说完了2)Server:我已经全部听到了,但是等等我,我还没说完3)Server:好了,我已经说完了4)Client:好的,那我们的通信结束9. 总结写到这里,我们基本上从技术的角度讲解了从URL输入到获取资源,整个流程发生了什么。我们再来捋一捋,首先是DNS 解析:将域名解析成 IP 地址,解析完成后就需要建立TCP 连接:TCP 三次握手,然后发送 HTTP 请求,再到服务器处理请求并返回 HTTP 报文,服务器处理完成后浏览器解析渲染页面,最后断开连接:TCP 四次挥手,这样整个流程就算是完成了,这个时候我们就可以在渲染的页面愉快的看视频、听音乐、打游戏了,哈哈!你多学一样本事,就少说一句求人的话,现在的努力,是为了以后的不求别人,实力是最强的底气。记住,活着不是靠泪水博得同情,而是靠汗水赢得掌声。 ——《写给程序员朋友》私信“666”可获取以下资料哦!01【开源网站】获取免费开源项目,找工作必备!02【电子书】获取1000+本Java开发精华电子书!03【简历】获取月薪三万简历模板!04【BAT面试】获取全网最全一线大厂Java笔试面试题!


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/36768/