1、url输入到页面显示全过程
总体来说分为以下几个过程:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
DNS解析
是一个递归查询过程,当我们访问www.google.com的时候,首先是在本地域名服务器中查询Ip地址,如果没找到,本地域名服务器会想跟域名服务器发送请求,如果根域名服务器也不存在该域名,本地服务器会想com的顶级域名发送一个请求,一次类推下去,知道最后本地域名服务器得到google的IP地址,并把它缓存到本地【浏览器在请求DNS的时候会自动加上,所有网址真正的解析过程为: . -> .com -> google.com. -> www.google.com.。】,提供下次查询使用。
DNS缓存
- 1、浏览器缓存 浏览器首先会在自己的缓存中查找有没有对应的域名 – IP匹配, 如果好运的话, 这里就可以直接尝试去访问资源了
- 2、系统缓存 浏览器缓存中没有命中, 浏览器会告诉操作系统, 调取系统中的DNS缓存进行查询
- 3、路由器缓存 路由中的缓存
- 4、ISP DNS缓存 ISP (网络提供商) 的DNS缓存服务器中寻找了, 一般情况下, 在ISP端的缓存中都能找到相应的缓存记录了
- 5、递归搜索 在前面都没有办法命中的DNS缓存的情况下, ISP的DNS服务器开始从root域名服务器开始进行递归, 顺序是从.com顶级域名服务器到alibaba的域名服务器
TCP 链接
-
1、三次握手就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。简单来说。
建立链接时候,客户端发送咏鹅syn包到服务器,等待服务器确认(一次握手)
服务器收到syn包,同时发送一个syn+ack 确认包给客户端(第二次握手),
客户端收到服务器syn+ask包后,想服务器发送确认报ack,发完此包后,客户端和服务器端进入ESTABLISHED状态(第三次),完成三次握手,客户端与服务器开始传送数据。
-
2、四次挥手就是终止TCP链接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
第一次挥手: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状态,完成四次挥手。
-
3、为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。