应该多数人在面试的过程当中,都会被面试官问过,“从浏览器输入一个URL到显示页面内容,这个过程都经历了什么?”面试
那么你们回答得也应该是各类各样,各有所长吧。浏览器
这个过程会经历TCP/IP的各个层以及各个层中的针对性的处理。服务器
应用层网络
传输层spa
网络层blog
链路层事务
由于TCP/IP协议是经过分层管理的,每一个层有每一个层的事务。资源
应用层决定了向用户提供应该服务时通讯的活动。rem
传输层对上层应用层,提供处于网络链接中的两台计算机之间的数据传输。域名
网络层用来处理在网络上流动的数据包。
用来处理链接网络的硬件部分。(如光纤)
DNS位于应用层,DNS协议提供经过域名查找IP地址,或逆向从IP地址反查域名的服务。
HTTP协议也位于应用层,HTTP协议负责各类报文(是报文不是豹纹)的处理。
TCP协议位于传输层,TCP协议为了传输方便,会将报文切成报文片,并打上标记;并且为了传输的可靠性,TCP协议还会进行“三次握手”的验证行为。
IP协议位于网络层,IP协议会经过ARP协议经过IP地址去查询目标服务器的MAC地址,也可经过MAC地址反查IP地址。
什么?他喵的,你不知道报文是什么?还不知三次握手是什么?
这部分这里就不说太具体了,要想了解HTTP更多的内容,掘金有不少大佬写的好文章,能够自行查阅,这里本渣渣就不班门弄斧了。
首先客户端会先向服务端发一个SYN的数据包,告诉服务端,“老子要链接你”;服务端接收到后,会给客户端发送一个SYN/ACK的数据包,告诉客户端,“爸爸知道了,连吧”;最后,客户端收到后会再给服务端发一个ACK的数据包,告诉服务端,“好的,儿子,那我连了”。
--剧终--
逼逼了那么多,如今把以上的知识点串联起来就能够回答一开始的那个问题了。
当在浏览器输入一个URL的时候,会先进入,TCP/IP协议的应用层,在应用层会先经历DNS服务对域名的解析查找对应的IP地址,找到的话就继续,找不到就完事了。找到后,应用层先将IP地址和HTTP报文转给运输层;在运输层,TCP协议会将报文切成报文段,并打上标记,且为了保证可靠的将数据送达给目标服务器,TCP还会进行一次“三次握手”的验证行为;接着运输层,将处理权转给网络层,在网络层(IP协议)会经过ARP协议结合IP地址去查找目标服务器的MAC地址,并增长该地址后转发给链路层;这样一来,发往网络的通讯请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。最后,当服务端查找到客户端须要的内容以后,按以上客户端到服务端的流程,再走一遍,不过此次开始的服务端的应用层而已,当再次回到客户端的应用层,浏览器就能看到页面内容了。(再细一点的话,还会经历浏览器的重绘,回流等行为)