浏览器地址栏输入url回车后发生了什么

        面试第一天,面试官问我,浏览器输入url后怎么进行请求的,我一想,诶,回车不就向后台发送请求就行了吗,卒.

        当按下回车后发生了以下步骤:

                1.ip地址解析寻址

                2.建立tcp连接(三次握手)

                3.发送一个http请求

                4.服务器处理并返回响应请求

                5.关闭tcp连接(四次挥手)

                6.浏览器解析HTML文件并进行渲染布局

1.ip地址的解析寻址

        我们一般在浏览器输入的是域名,首先会对浏览器缓存进行查找有没有这个域名对应的ip地址,如果有就会直接执行步骤2(如果你直接输入ip地址也是一样).

        然后将进行hosts文件里面查找有没有这个ip地址(hosts文件作用为屏蔽设定网址)

        当posts文件没有设定当前访问ip,前往路由缓存查找.

        路由缓存找不到,将前往DNS服务器查找,如果找不到将前往更高一级DNS服务器查找.(DNS服务器全称DNS域名解析器,一般我们在浏览器地址栏输入的是域名不是直接的ip地址,如查找百度,我们会输入域名www.baidu.com,而不是ip地址110.242.68.4,而域名是不能直接访问的,这时候就需要用到DNS域名解析器对其进行解析得到ip地址,再对ip地址进行访问)

2.建立TCP连接(三次握手)

浏览器地址栏输入url回车后发生了什么_第1张图片

        当得到ip地址后进行连接请求,客户端会向服务端发送一个SYN包,服务端得到SYN包后会返回SYN加ACK包,客户端收到SYN加ACK包后向服务端返回一个ACK包,至此,传输通道建立.

问题1:为啥是3不是2不是4

浏览器地址栏输入url回车后发生了什么_第2张图片

        如果tcp只进行两次握手时,当客户端发送SYN1给服务端遇到信道阻塞无法到达,客户端见到长久没有反应只能进行第二次发送SYN2请求连接,当服务端接收到SYN2返回ACK2连接建立.这时候SYN1信道阻塞恢复,服务端接收到SYN1以为客户端建立新连接,向客户端发送ACK1建立新连接,客户端认为自己只是为了一次连接,接收到ACK1也不予理会,导致两者连接状态不一致.

        三次握手能完成的事为什么要四次,嫌弃效率太高了么...

        结论:三次为了在不稳定的信道上建立稳定的传输通道

问题二:SYN包和ACK包是什么(别问,问就是我闲得慌)

        SYN:同步序列编号,TCP连接的第一个包,SYN攻击是常见的网络工具手段(又称泛洪攻击),通过发送大量的无意义SYN包,占用机器大量处理能力(因为处理一个包需要几秒钟才放弃),导致服务奔溃.

        ACK:确认字符,没有找到有意思的东西.

3.发送HTTP请求

        这里主要讲数据传输,主要解决数据包丢失和排序问题.

浏览器地址栏输入url回车后发生了什么_第3张图片

        在传输通道连接后,TCP会创建一个发送缓冲区(序号以0开头逐1递增),发送者发送报文由初始序列号和长度和数据内容组成,接收者回复报文ACK,发送者根据ACK进行新数据发送或者丢失数据补发.这种问答模式有利于在一次性多数据包传输上解决丢失和排序问题.

        TCP协议是双向的,发送者即可以是客户端也可以是服务端,接收者亦然.

4.服务器处理并返回响应请求

        服务器处理是后端的事了,响应请求的数据传输如步骤3.

5.关闭TCP

浏览器地址栏输入url回车后发生了什么_第4张图片

        当一方请求断开连接时(假设由客户端发出),客户端将发送一份FIN文件给服务端,表示自己将要进行断开连接并进入断开等待状态1,服务端接收到FIN文件后将发送一份ACK文件给客户端表示收到并进入最后的数据传输,当数据传输完成服务端将FIN文件返回给客户端表示最后数据传输完成,客户端收到后将ACK文件返回给服务端表示收到,至此,客户端进入超时等待,服务端关闭连接,时间超过,客户端关闭连接.

问题一:为什么是4不是3不是5

        ......为了在不稳定的信道上稳定的关闭连接

问题二:为什么有超时等待机制

浏览器地址栏输入url回车后发生了什么_第5张图片

        为了防止在客户端最后返回ACK文件时,信道阻塞导致服务端无法收到,服务端有机会重新向客户端发送FIN文件让客户端返回ACK文件. 

问题三:FIN文件是什么

        我也不知道,估且当作一个通知文件吧......

6.浏览器解析HTML文件并进行渲染布局

        这是前端的内容......就是把获取到的内容展示出来...吧?

你可能感兴趣的:(面试题,java,服务器,前端,网络)