用户用浏览器访问一个网站的时候背后的过程与步骤是怎样的?

1. 用户访问网站的流程

用户访问网站的流程  用户在浏览器中输入 www.taobao.com 到显示页面的过程 

 

1.1 访问流程

 利用DNS协议进行域名解析   -->   建立tcp协议三次握手过程   -->   客户端发出访问网站相应页面请求(发出http协议请求报文)   -->   服务端发出相应访问页面的请求信息(发出http)   -->   断开tcp协议四次挥手过程

 

1.2 利用DNS协议进行域名解析

DNS称为域名系统,主要作用是负责把域名解析对应的IP地址。就是把www.baidu.com 解析为对应的IP地址 111.13.101.208,有了IP地址就相当于知道百度服务器在哪了,接下来就是去找它。

 

 

DNS体系中,查找记录,分为两种查找方式:递归查询和迭代查询。

1、 递归查询:由DNS客户端发起,一级一级的向上提交查询申请,直至查询终止

2、 迭代查询:一般情况下由DNS服务器之间完成,即本地DNS向上一级DNS提交查询,上级DNS并不直接返回查询结果,而是告知DNS应该向哪里去查找。

 

 

 

 

 在真正的DNS查询过程中,是包含递归查询和迭代查询的。无论任何方式的查找过程,在每个环节,都会先查找缓存。DNS服务器如果没有了缓存就失去了意义。。。

请记住查询顺序:

HOSTS表--> 本地DNS -->上层DNS(包括根DNS)  

 

1.3 建立tcp协议三次握手过程

    好了经过DNS解析,现在我们已经知道了百度服务器的地址(111.13.101.208),可以访问它了。

    约会也得先发个邀请吧,网络也一样。先建立连接,才可以传输数据呢。接下来看看怎么和百度服务器约会吧。

 

1.3.1 简单说明TCP协议

IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。

IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。

简单说,TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。

 

 

TCP三次握手建立过程简单说明:

 

01.由客户端(用户)发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的。

并且还将报文中SYN字段置为1,表示需要建立TCP连接请求。

 

02。服务端(就是百度服务器)会回复客户端(用户)发送的TCP连接请求报文,其中包含seq序列号,也是由回复端随机生成的,

并且将回复报文的SYN字段置1,而且会产生ACK验证字段,ACK验证字段数值是在客户端发过来的seq序列号基础上加1进行回复:

并且还会回复ack确认控制字段,以便客户端收到信息时,知晓自己的TCP建立请求已得到了确认。

 

03.客户端收到服务端发送的TCP建立请求后,会使自己的原有序列号加1进行再次发送序列号,

并且再次回复ACK验证请求,在B端发送过来的seq基础上加1,进行回复;同时也会回复ack确认控制字段,

以便B收到信息时,知晓自己的TCP建立请求已经得到了确认。

 

 

 

 

 

1.4 客户端发出访问网站相应页面请求(发出http协议请求报文)

     建立连接后,发送请求报文,想看什么数据。 输入www.baidu.com时,默认请求的是index.html首页文件

 

1.4.1 请求报文结构:

   1. 请求行:

  ①. 请求的方法(get post)

  ②. 请求的数据信息(默认请求index.html首页文件)

  ③. 请求http协议版本

        tcp协议分为长连接(http1.1)和短连接(http1.0)

      

   2.请求头:

   3.空行:

   4.请求主体:get方法没有请求主体内容 post方法会有请求主体信息

 

 

 

 

1.5 服务端发出相应访问页面的请求信息(发出http响应报文)

 

1.起始行(响应行)

    ①. HTTP协议版本信息

    ②. 响应的状态码信息(请求成功状态码 200)

    ③. 响应状态码说明信息

2.响应头部:

3.空行:

4.响应主体内容:一般为html css js 等等代码信息

 

 

 

1.6 断开tcp协议四次挥手过程

    当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。

 

    • 第一次挥手:
      Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
    • 第二次挥手:
      Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
    • 第三次挥手:
      Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
    • 第四次挥手:
      Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

 

 

 

 

 

 

posted @ 2018-03-31 16:04  LiShiChao  阅读(12664)  评论(0编辑  收藏  举报