2

应该多数人在面试的过程中,都会被面试官问过,“从浏览器输入一个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请求。最后,当服务端查找到客户端需要的内容之后,按以上客户端到服务端的流程,再走一遍,不过这次开始的服务端的应用层而已,当再次回到客户端的应用层,浏览器就能看到页面内容了。(再细一点的话,还会经历浏览器的重绘,回流等行为)


时樾同学
74 声望3 粉丝

前端打杂大户