经典面试题:输入网址后会发生什么?

0.前言

”从输入网址到看到网页中间经历了什么?“是一个常见面试题,这个问题贯穿了整个网络系统,对回答者的网络综合素质要求较高。本文中对此问题的大致流程进行较细致的阐述,但篇幅有限,其中仍有一些细节性的知识需要读者自行查阅。

1.流程

1.1 解析URL并组装HTTP请求

1.1.1 浏览器端

用户最开始是在浏览器输入网址,所以第一步,就需要浏览器对输入的URL地址进行解析,从URL地址中,组装成一个HTTP请求。如输入 www.baidu.com就会生成一个对www.baidu.com的get请求。具体的HTTP请求信息细节可查阅其他资料。

1.1.2 DNS解析域名

从URL地址中解析出域名后,还需要通过DNS对域名进行解析,即查询域名所对应的IP地址。DNS是一种服务,其有很多个层级排列的服务器,类似与一个树状结构,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4bmpNMRk-1667130070904)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\image-20221028162035511.png)]

每个域名服务器中,都保存有大量的域名与IP地址的映射。接下来拿 WWW.baidu.com 举例,对DNS域名解析流程进行阐述:

  • 浏览器首先会查询本地缓存中是否有地址映射,如果有直接返回,没有则继续查询。

  • 客户端查询自身的hosts文件是否有这个网址的映射关系,如果没有,则查找本地DNS解析器缓存

  • 如果hosts和本地DNS解析器缓存中都没有查询到映射关系,则客户端访问本地DNS服务器,采用迭代的方法查询www.baidu.com的IP地址,如果查询成功的话,直接返回。如果不成功,则本地DNS服务器访问根服务器进行查询。

  • 根服务器接收到消息后,会返回给本地DNS服务器一个.com的DNS服务器地址。本地DNS再次对.com的地址发送请求,comDNS服务器则会返回一个baidu.com域的地址,反复此操作,直到查询到 www.baidu.com的IP地址。

1.2 包装请求

在完成HTTP请求的组装后,整个请求还很单薄,无法通过各种物理设备安全传输到目的IP地址的主机上,还需要通过TCP、IP等各种协议的配合完成请求的传输以及响应接受。所以从上到下还需要加上TCP、IP、MAC的请求头,对请求进行进一步的包装,才会对消息进行发送。

1.2.1 TCP

HTTP协议是基于TCP的,TCP是一个可靠传输协议,保证整个请求的可靠送达。首先来看看TCP请求头部有哪些重要参数。

  • 源端口号目标端口。这两个字段主要为上层的应用层服务,标识了应用的类别。HTTP 默认端口号是 80, HTTPS 默认端口号是 443

  • 序号,解决包乱序的问题。

  • 确认号,确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决不丢包的问题。

  • 一些状态位。例如 SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。

TCP还可以流量控制拥塞控制

总的来说,在这一阶段,TCP将整个HTTP请求视为一个整体,设置参数组装请求头,放在HTTP请求的头部之前,形成了一个新的请求。

注:如果 HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。数据会被以 MSS 的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

1.2.2 IP

TCP协议基于IP协议,IP协议主要实现远程定位的功能, IP 协议可以将数据封装成网络包发送给目的IP对象。首先也看看IP的重要参数有哪些:

  • 源地址IP,即客户端 IP 地址;目标地址,即DNS 域名解析后获得的IP地址。
  • 协议号06(十六进制)标识为TCP。

每个主机内部都维护了一张路由表,上面描述了为了达到某个目的IP而应该访问的IP,一个典型的路由表如下所示,根据目标网络即可找到对应的网关进行发送:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkESOVp9-1667130070905)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\image-20221028170041940.png)]

与TCP类似,在这一阶段,IP将整个TCP请求视为一个整体,设置参数组装请求头,放在头部之前,形成了一个网络包。

1.2.3 MAC

MAC地址和ARP协议主要是用于以太网内部通信。在 MAC 包头里需要发送方 MAC 地址接收方目标 MAC 地址,用于两点之间的传输

既然是以太网通信,所以每次不同主体间通信的时候,发送方MAC地址和接收方MAC地址都是不同的。发送方就是当前发送方的MAC地址,接收方是通过ARP协议获得的接收方的MAC地址。

ARP协议用于找到IP地址对应的MAC地址。其会在以太网中以广播的形式,询问某个IP地址的所有者,如果对方和自己处于同一个子网中,通过上面的操作就可以得到对方的 MAC 地址。

当然,为了增加性能,ARP协议也设置了缓存,如果缓存中直接就有IP与MAC地址的映射就不需要再发送广播了。

1.3 传输过程

1.3.1 网卡和交换机

网卡和交换机实现在以太网内进行点对点的消息传播。

首先网卡将网络包解析成电信号,让网络包能在介质上传播,控制网卡的是网卡驱动程序。

交换机接受到的包后,查看其MAC地址,然后查询MAC地址表,将包转发到指定的端口上,端口另一端链接的就是目的MAC地址的主机。如果表中没有查询到,就会进行广播。

目前为止,实现的也只是以太网内的通信,如果想要包传播的更远,还需要路由器的帮助。

1.3.3 路由器

完成包接收操作之后,路由器首先删除包开头的 MAC 头部。因为MAC 头部的作用就是将包送达路由器。随后从IP请求头中解析出其目的IP,再查询路由表判断下一跳的位置,获取其IP地址。

获得下一跳地址后,如果是以太网内,就直接通过ARP协议进行交付了。如果并不在以太网内,就需要再次通过ARP协议,通过下一跳IP地址查找到下一跳的MAC地址,并通过交换机发送给下一跳。

经过多轮转发后,最后包被传送到目的IP的主机上。

1.4 解析请求

在传输完成后,包成功发送到了目的主机上。这时候还会对包进行一些通用的处理和解析。

数据包抵达服务器后,服务器首先解析出MAC头部,查看MAC头部的目的地址是否和自身相符,如果不符则丢弃。随后解析出IP头部,对比目的IP地址,并通过协议项确定上层协议。如果TCP的话,就会解析出TCP头部,查看序列号、窗口值等,最后看到HTTP请求,再做出一些处理。

处理完后,对响应请求同样封装、再发送。

客户机接收到响应请求后,浏览器对响应进行解析与渲染,用户就看到了网页。

参考资料:

[1] 图解网络介绍 | 小林coding (xiaolincoding.com)

[2] 计算机网络.谢希仁

猜你喜欢

转载自blog.csdn.net/doreen211/article/details/127603761