[计算机网络] 当输入URL回车之后都发生了什么?

107 阅读3分钟

同样是面试中遇到的问题, 没有答的很清晰, 在这里总结一下.

整体流程

  1. URL解析
  2. DNS查询
  3. TCP连接
  4. 通过IP进行寻址
  5. 使用以太网进行传输
  6. 返回响应

其中1, 2发生在应用层, 3发生在传输层, 4发生在网络层, 5发生在数据链路层.


我们使用www.google.com来作为例子, 当我们输入www.google.com进入浏览器会发生什么?

1. URL解析

浏览器会判断URL是否合法, 并且完成字符编码, 检查缓存等操作. 本例中, www.google.com合法并且假设不在我们的缓存中.

检查缓存的流程如下(引用自知乎答主4Ark):

image.png

2. DNS查询

如果存在缓存, 浏览器会使用缓存来继续接下来的流程. 如果没有缓存, 本地的DNS服务器首先会将请求转发到根域名服务器, 如果根域名服务器也不存在该域名, 则会转发到com顶级域名服务器, 以此类推, 直到找到该域名.

按照这个流程, 我们首先会在本地域名服务器中查询www.google.com的IP地址, 没有找到的话我们会将请求发送到根域名服务器, 通过根域名服务器去查www.google.com的IP地址, 如果还没找到会向下去com顶级域名服务器去找www.google.com的IP.

3. TCP连接

当我们得到了www.google.com的IP地址之后, 浏览器会去构建一个HTTP报文, 接下来我们要通过TCP在传输层去传输整个报文.

在使用TCP进行连接的时候, 为了传输方便, 会将数据进行分割并标记. 然后建立连接之前, 会进行TCP的三次握手, 当连接成功之后, 将包裹着TCP首部的HTTP数据传输到下一层(网络层).

4. 通过IP进行寻址

在网络层, 我们通过IP地址和ARP协议去查询目标的MAC地址, 如果找到了则发送, 没有找到的话, 继续通过路由表查找下一跳的地址.

此时, IP会将自己的信息加到原有的数据包上, 形成新的数据包, 现在的数据包应是IP首部->TCP首部->HTTP数据.

5. 使用以太网进行传输

在数据链路层, 通过以太网协议将数据打包并发送出去, 数据包携带源MAC地址与目标MAC地址, 通过ARP协议进行广播向当前网络的所有机器发送, 如果MAC地址一致就接受, 否则不接受.

6. 返回响应

当服务器接收到了请求, 会反着走一遍以上流程, 将数据包进行解封, 得到初始的HTTP数据, 然后进行处理, 并且返回自身的响应到客户端.

整体流程图如下:

image.png


以上就是输入URL之后的大概流程, 非常粗略, 如果有不当之处, 请各位大牛指出.

图源自zhuanlan.zhihu.com/p/80551769