HTTP的三次握手和四次挥手,以及DNS流程解析
首先模拟一个场景:你在浏览器输入自己想要访问的地址,浏览器发送请求到服务端,服务端进行响应,浏览器进行数据页面渲染,从而你得到自己想要访问地址的页面
总体流程图:
DNS:可以认为域名与对应的ip转化的服务器
1:DNS解析:
DNS解析流程:在输入框回车请求,客户端会向本地服务器缓存中请求这个域名的IP是多少,如果没有,DNS就会去根服务器(美国有,英国有,但是根服务器中的缓存也很少),他会让DNS去找.com域服务器,如果还是没查到他会让DNS去查域名(jsplusplus)服务器,如果在中国进行备案 就一定会有,找到并返回给浏览器。每一次DNS在根,或者com,或者域名(jsplusplus)中找到的话,DNS是会先将该次查询的IP对应表数据缓存到本地,下次再进行访问这个的时候就可以直接找到,图解如下
2
2:三次握手
前置知识:
标志位:
SYN:同步序列编号
ACK:Acknowledgement 确认字符
状态:
LISTEN:侦听TCP端口的连接请求(我在等你发请求哦)
SYN-Send:发送连接请求等待回复状态(我发了请求了,等你回复哦)
SYN-RECELVED:在收到或者发送一个连接请求后等待对连接请求的确认,接收请求并确认状态(我收到你的连接请求了哈,我等你回复)
ESTABLISHED:代表一个打开的连接,数据可以传送给用户,连接建立状态(连接已经建立了哈,我跟你说一下)
首先,你输入url地址,DNS将其转换为IP地址,服务端那边的端口是一直开着的(LISTEN是进行的),
开始进行握手
三次握手:
1、第一次握手:客户端给服务端发一个 SYN 报文(SYN-SENT),并指明客户端的初始化序列号 ISN(J)。此时客户端处于 SYN_Send 状态。
2、第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(K),同时会把客户端刚刚传过来的 ISN(J) + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。
3、第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN(K) + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态,
图解如下:
3:4次挥手
1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。
2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。
3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态
图解如下:
如有错误希望可以发表您的观点