问题一:经典面试题【从输入URL到页面加载发生了什么?】
1.DNS解析 :如果地址包含域名通过DNS解析获取服务器对应的ip地址,如果输入的URL不包含域名则不经过这一步。
2.TCP连接 : 经过DNS解析后获取到了服务器的IP地址,在获取到IP地址后,便会开始建立一次连接(三次握手)。
3.发送HTTP请求 : 在确认与服务器建立连接后,便会发送一个HTTP请求。
4.服务器处理请求并返回HTTP报文 : 服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。
5.浏览器解析渲染页面
6.连接结束 : 在页面元素传输完成后,会选择关闭连接(TCP四次挥手)。
问题二:建立起一个TCP连接需要经过几次握手, 关闭TCP连接需要经过几次挥手
1.建立起一个TCP连接需要经过三次握手, 关闭TCP连接需要经过四次挥手
2.三次握手:
1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。
2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。
3)最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束。
通俗的说法
1)Client:嘿,李四,是我,听到了吗?
2)Server:我听到了,你能听到我的吗?
3)Client:好的,我们互相都能听到对方的话,我们的通信可以开始了。
3.为什么是三次握手
因为网络传输有延迟,客户端发送请求到服务器端要求即那里连接,如果服务器直接返回的话可能会产生丢包的情况导致客户端收不到数据,客户端会因为超时就关闭了,可能就去发送新的请求了,然而服务器端并不知道丢包导致客户端没有接收数据。服务器端t端口就一直开着,造成额外的开销。所以需要三次握手确认这个过程。
4.四次挥手
1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
通俗的说法
1)Client:我所有东西都说完了。
2)Server:我已经全部听到了,但是等等我,我还没说完。
3)Server:好了,我已经说完了。
4)Client:好的,那我们的通信结束。
5.TCP为什么要进行四次挥手
4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。
问题三:描述一下长连接和短链接的操作
1.短连接的操作步骤是:undefined建立连接——数据传输——关闭连接…建立连接——数据传输——关闭连接
2.长连接的操作步骤是:undefined建立连接——数据传输…(保持连接)…数据传输——关闭连接



