zoukankan      html  css  js  c++  java
  • 从浏览器输入网址回车到看到页面过程到底经历了什么?

    #前言:从浏览器输入网址到回车看到页面的过程,面试逃不掉的一个问题,我们知道从浏览器输入网址到看到页面主要是涉及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
  • 相关阅读:
    22天学习java基础笔记之day08
    22天学习java基础笔记之day07
    22天学习java基础笔记之day06
    22天学习java基础笔记之day05
    架构师_设计模式_行为型_迭代器
    架构师_设计模式_行为型_命令模式
    架构师_设计模式_行为型_责任链模式
    架构师_设计模式_行为型_模板方法
    架构师_设计模式_结构型_装饰器模式
    架构师_设计模式_结构型_桥接模式
  • 原文地址:https://www.cnblogs.com/guoke-boy/p/12520892.html
Copyright © 2011-2022 走看看