从浏览器输入网址回车到看到页面过程到底经历了什么?

时间:2022-07-23
本文章向大家介绍从浏览器输入网址回车到看到页面过程到底经历了什么?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

#前言:从浏览器输入网址到回车看到页面的过程,面试逃不掉的一个问题,我们知道从浏览器输入网址到看到页面主要是涉及DNS解析,TCP三次握手,请求报文,响应报文,TCP4次挥手。

#首先我们先来看一下总体的访问过程

#总体的访问过程:首先会进行DNS解析,然后解析得到地址之后客户端和web服务器会建立一条TCP连接,其中有一个TCP三次握手过程,当完成握手之后客户端就会向浏览器发送一条请求报文,服务器然后进行响应,接着当数据传输完之后,服务器和客户端有一个TCP四次挥手过程,来结束连接。

#然后我们来将过程分解一下

#dns解析流程

在浏览器中输入网址回车后,首先系统会去找这个域名对应的ip,然后再根据这个ip地址查找web服务器,
这里面有个DNS解析流程
        1、系统首先查找本地的DNS缓存和hosts文件信息,确认是否有www.baidu.com对应的ip地址,如果有就直接访问
        这个ip地址对应的www.baidu.com web服务器
        2、如果没有,那么系统会将解析请求发送给本机网卡指定的DNS服务器,称为LDNS(本地dns),如果本地DNS服务器
        中有域名www.baidu.com所对应的的ip地址,就会去访问这个IP对应的web服务器,如果没有就去请求其他DNS服务器
        3、LDNS服务器会从根域名服务器开始对于域名www.baidu.com的解析,全球有13台根服务器,根域名服务器没有
        www.baidu.com的解析记录,有.com顶级域的解析记录,然后把.com所对应的DNS服务器地址返回给LDNS服务器
        4、LDNS获取到.com的DNS服务器地址之后,就去.com服务器请求www.baidu.com域名的解析,.com里面也没有www
        .baidu.com域名对应的地址,但是有baidu.com域名的解析记录,然后.com服务器将baidu.com对应的DNS服务器地址
        返回给LDNS,
        5、同理LDNS去找baidu.com的DNS服务器请求www.baidu.com的域名解析,然后baidu.com域名DNS服务器将www.baidu.com地址对应的IP解析记录发送回给LDNS
        6、LDNS把解析出的结果www.baidu.com对应的ip地址发送给客户端的浏览器,然后也记录到缓存中

#浏览器通过解析后得到的ip地址和端口号与web服务器建立一条TCP连接通道

#tcp3次握手过程

三次握手指一个TCP连接时,需要客户端和服务器总共发送3个包
    第一次握手:建立连接时,客户端A发送syn包(syn=j)到服务器B,并进入Syn_send状态,等待服务器B确认
    第二次握手:服务器B收到syn包,必须确认客户A的syn(ACK=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,然后服务器B进入SYN_RECV状态
    第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),包发送完毕,客户端A和服务端B进入ESTABLISHED状态,完成三次握手

#建立TCP连接时,浏览器向web服务器发送一条HTTP请求报文

请求报文包括:请求行,请求头部,空白行,请求报文主体
    请求行:
        用来说明客户端想要做什么,内容包括方法字段(请求方法包括:GET:请求指定资源,HEAD,请求响应报文的首部,
        POST:提交数据到服务器,PUT:传送的数据取代指定的文档内容,DELETE:删除Request-URI所标识的资源,MOVE:
        移动)、URL字段以及HTTP协议版本(最开始的0.9版本,后来又有了1.0,1.1,2.0,其中1.1是主流)
        
    请求头:
        通过客户端把请求的相关信息发给服务器,内容包括媒体类型,语言类型,主机名等信息
    
    空行:
        告诉服务器空行以下内容不属于请求头部信息
    
    请求报文主体:
        用来说明客户端具体想要做的事情

#有请求报文来请求服务器,就会有服务器端去响应,为响应报文

 响应报文包括:状态行,响应头部,空白行,响应报文主体
    状态行
        用来说明服务器响应客户端的状态,包括一些状态码信息:一些比较重要的状态码信息有:
            200-ok                        访问成功
            301-moved permanently       永久跳转
            403-Forbidden                   禁止访问,服务端设置了相关权限,客户端没有权限去访问
            404-Not Found                    没有找到访问的页面,客户端请求的页面不存在
            500-Internal servr error    内部服务器错误
            502-Bad gateway                坏的网关
            503-Service Unavailble        服务不可用,服务超载或停机
            504-Gateway Timeout            网关超时,没有在特定时间内处理请求
        
    响应头将服务器响应的相关信息发给客户端
        
    空行:
        告诉客户端空行一下内容不属于响应头部信息
        
    响应报文主体:
        将web服务数据资源返回给客户端
            包括静态网页资源,动态网页资源,和伪静态资源
            纯html格式的为静态网页,服务端写的什么就返回什么给客户端
            常见的静态网页后缀有html htm xml
            
            以.php .js .aspx结尾的为动态网页,以数据库为基础,可以实现很多功能
            
            伪静态网页是通过一些技术(如rewrite重写)将动态的URL伪装成静态的URL,但实际上还是动态的URL

#当完成数据传输之后,就会有一个四次挥手的过程来进行断开连接

#tcp4次挥手过程

  第一次挥手
    客户端A发送一个FIN,用来关闭客户端A到服务器B的数据传送
  第二次挥手
    服务器B收到这个FIN,会回一个ACK,确认序号为收到的序号加1
  第三次挥手
    服务器B关闭与客户端A的连接,发送一个FIN给客户端A
  第四次挥手
    客户端A发回ACK报文确认,并将确认序号设置为收到序号加1