HTTP协议请求过程(包含dns解析)
HTTP协议请求过程分析
步骤:
用户输入URL,以www.yxh.com为例,获得主机名后,进行DNS域名解析;
首先,浏览器自身会查找自己缓存,没有的话,寻找本机的hosts文件,本机hosts没有后,查找本机域名缓存服务器,如果在缓存服务器未发现,缓存服务器会像根域发起请求;
根域会给返回.com的IP地址,然后缓存服务器会请求.com服务器;
.com服务器会返回yxh.com的IP地址(假设为192.168.20.20),然后缓存服务器会寻找yxh.com服务器,询问www主机所对应的的IP地址,服务器会返回www.yxh.com的IP地址,并且根据URL获得端口号,默认80,。
获取到IP地址及端口号后,客户端会开启一个随机端口(1024-65535)与其服务器(192.168.20.20)的80端口相连,并开始建立TCP的三次握手:
首先,客户端会向服务器发送一个SYN请求报文,SYN的值为1,初始序列号为x,此时,客户端处于SYN-SENT(等待服务器回应状态),服务器收到后返回一个ACK确认报文,ACK的值为1,确认序列号为x+1,同时,发送一个SYN请求连接报文,SYN的值为1,初始序列号为y+1,这时服务器处于SYN-RCVD(服务器请求确认状态),客户端收到确认号x+1后,发送一个ACK报文,ACK的值为1,确认序列号为y+1,至此,客户端与服务器完成TCP的三次握手;
然后客户端会向服务器发送一个HTTP GET请求,然后客户端会从服务器读取HTTP相应,之后浏览器会解析HTML代码,并且请求HTML代码中的资源,浏览器将内容呈现给用户;
当用户访问完成后,客户端会主动断开连接,开始进行TCP的四次挥手:客户端会发送一个FIN断开连接报文,FIN的值为1,初始序列号为u,这时客户端处于中止等待状态1(FIN-WAIT-1),服务器收到后,会给客户端发送一个ACK确认释放报文,ACK的值为1,确认序列号为u+1,同时发送一个自己的序列号v,客户端收到后确认报文后,进入FIN-WAIT-2(中止等待状态2)服务器处于CLOSE-WAIT(关闭等待状态),但是这时服务器还能继续想服务器发送数据,客户端被动接受,所以服务器会发出FIN中止连接报文,FIN的值为1,初始序列号为w,这时服务处于LAST-ACK(最后确认状态),客户端收到后会返回一个ACK确认报文,确认序列号为w+1,服务器收到后会断开自己的连接,但是这时客户端还处于TIME-WAIT(时间等待状态),等待时长为2MSL(即两倍最长报文寿命),等待结束后,客户端会进入CLOSED状态,至此TCP的四次挥手完成,客户端与服务器断开TCP连接;
至此,HTTP协议请求流程分析结束