HTTP协议请求流程分析

一、DNS域名解析

用户输入一个URL(统一资源定位符)或点击一个链接,这里以访问www.baidu.com为例。

1、用户在浏览器中输入www.baidu.com,浏览器先查找自己的缓存,如果存在百度的缓存可直接查找。如果不存在

2、查找主机的hosts文件,若hosts文件中存在直接通过主机访问。如果不存在

3、查找本机首选本地DNS缓存服务器,如果存在百度的地址,返回给主机,再通过主机访问百度服务器。若不存在

4、本地DNS缓存服务器会去寻找 .(根域),根域不存在具体地址,会返回 .com 一级域

5、本地DNS去找 .com 一级域,返回 baidu.com

6、本地DNS缓存服务器会去寻找 baidu.com 解析服务器,将 www.baidu.com 的IP地址返回给本地DNS缓存服务器。

7、本地DNS缓存服务器会先记录下百度的IP地址,然后返回给主机 。

8、主机在接收到返回的IP地址时,会直接去寻找百度的服务器。

二、连接

1、主机会产生一个随机端口(1000--65635)和服务器的80端口建立连接(三次握手)

  • 刚开始客户端与服务器处于关闭状态
  • 客户机向服务器发送请求连接的报文,同步位SYN=1,序列号seq=x,期待序列号为x+1。此时客户端处于同步已发送状态。
  • 服务器接收到来自客户端的请求之后,确认收到请求ACK=1,确认序列号ACK=x+1。服务器向客户端发送请求连接的请求SYN=1,序列号seq=y,期待序列号y+1,此时服务器处在同步已收到状态。
  • 客户端接收到来自服务器的请求,确认收到ACK=1,确认序列号ACK=y+1,序列号seq=x+1,此时客户端与服务器处于已连接状态

2、确认连接后,客户端向服务器发送包含头部、主体的HTTP GET请求

3、服务器向客户端发送包含头部、主体、正文的HTTP响应

4、客户机在接受到内容后经浏览器显示给用户

三、断开连接

1、当客户机关闭浏览器页面时(四次挥手)

  • 开始时客户端与服务器处于连接状态
  • (1)客户端向服务器发送请求释放连接的报文段FIN=1,序列号seq=w,期待序列号w+1,此时客户端处于终止等待1状态。
  • (2)客户端接收到来自客户端的请求,确认收到ACK=1,确认序列号seq=w+1,此时服务器处于关闭等待状态,服务器向客户端做出回应,此时客户端处于终止等待2状态
  • (3)当服务器将客户端的请求全部回应完后才开始请求断开连接,服务器向客户端发送请求终止报文段FIN=1,序列号seq=v,期待序列号为v+1,此时服务器最后等待客户端的接收。
  • (4)客户端接收到来自服务器的请求,确认收到ACK=1,确认序列号ACK=v+1,此时客户端处在时间等待状态,客户端向服务器作出回应,服务器收到回应后会立即关闭,客户端需等待两个最长报文段寿命的时间再关闭
  • 客户端与服务器处于关闭状态,断开来连接。

猜你喜欢

转载自www.cnblogs.com/tanxiaojuncom/p/11492616.html