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