【计算机网络 - 基础问题】每日 3 题(三)
✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/fYaBd
📚专栏简介:在这个专栏中,我将会分享 C++ 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
📝推荐参考地址:https://www.xiaolincoding.com/(这个大佬的专栏非常有用!)
7. 输入域名后会发生什么?这个过程涉及了哪些协议?
流程如下:
- 解析 URL:分析 URL 所需要使用的传输协议和请求的资源路径。如果输入的 URL 中的协议或者主机名不合法,将会把地址栏中输入的内容传递给搜索引擎。如果没有问题,浏览器会检查 URL 中是否出现了非法字符,则对非法字符进行转义后在进行下一过程。
- 缓存判断:浏览器会判断所请求的资源是否在缓存里,如果请求的资源在缓存里且没有失效,那么就直接使用,否则向服务器发起新的请求。
- DNS 解析:如果资源不在本地缓存,首先需要进行 DNS 解析。浏览器会向本地 DNS 服务器发送域名解析请求,本地 DNS 服务器会逐级查询,最终找到对应的 IP 地址。
- 获取 MAC 地址:当浏览器得到 IP 地址后,数据传输还需要知道目的主机 MAC 地址,因为应用层下发数据给传输层,TCP 协议会指定源端口号和目的端口号,然后下发给网络层。网络层会将本机地址作为源地址,获取的 IP 地址作为目的地址。然后将下发给数据链路层,数据链路层的发送需要加入通信双方的 MAC 地址,本机的 MAC 地址作为源 MAC 地址,目的 MAC 地址需要分情况处理。通过将 IP 地址与本机的子网掩码相结合,可以判断是否与请求主机在同一个子网里,如果在同一个子网里,可以使用 APR 协议获取到目的主机的 MAC 地址,如果不在一个子网里,那么请求应该转发给网关,由它代为转发,此时同样可以通过 ARP 协议来获取网关的 MAC 地址,此时目的主机的 MAC 地址应该为网关的地址。
- 建立 TCP 连接:主机将使用目标 IP 地址和目标 MAC 地址发送一个 TCP SYN 包,请求建立一个 TCP 连接,然后交给路由器转发,等路由器转到目标服务器后,服务器回复一个 SYN-ACK 包,确认连接请求。然后,主机发送一个 ACK 包,确认已收到服务器的确认,然后 TCP 连接建立完成。
- HTTPS 的 TLS 四次握手:如果使用的是 HTTPS 协议,在通信前还存在 TLS 的四次握手。
- 发送 HTTP 请求:连接建立后,浏览器会向服务器发送 HTTP 请求。请求中包含了用户需要获取的资源的信息,例如网页的 URL、请求方法(GET、POST 等)等。
- 服务器处理请求并返回响应:服务器收到请求后,会根据请求的内容进行相应的处理。例如,如果是请求网页,服务器会读取相应的网页文件,并生成 HTTP 响应。
- 浏览器接收响应:浏览器接收服务器返回的响应数据。
- 解析 HTML 和构建 DOM 树:浏览器解析收到的 HTML 文档,构建文档对象模型(DOM)树,以表示页面的结构。
- 下载和处理 CSS 样式:浏览器获取并解析 CSS 文件,应用样式到 DOM 树中的元素,构建 CSSOM 树。
- 执行 JavaScript 脚本:浏览器执行页面中的 JavaScript 代码,这可能会修改 DOM 树、执行动态效果等。
- 布局和绘制:根据 DOM 树、CSS 样式和 JavaScript 的操作结果,浏览器进行页面布局计算,确定每个元素的位置和大小,然后进行绘制,将页面显示在屏幕上。
- 后续交互:用户与页面进行交互,如点击链接、提交表单等,浏览器重复上述过程获取新的页面或处理用户操作。
一个 URL(统一资源定位符)的访问过程中,涉及到了多个协议。下面是一些常见的协议:
- HTTP(超文本传输协议):用于在 Web 浏览器和服务器之间传输和交互数据,是互联网上常用的协议。
- HTTPS(HTTP 安全):是在 HTTP 的基础上增加了安全性的协议,通过使用 SSL 或 TLS 加密通信内容,保证了数据传输的机密性和完整性。
- FTP(文件传输协议):用于在客户端和服务器之间传输文件,支持上传、下载等文件操作。
- SMTP(简单邮件传输协议):用于发送和传输电子邮件的协议。
- POP3(邮局协议版本3):用于从服务器接收电子邮件的协议。
- IMAP(Internet 邮件访问协议):也是用于接收邮件的协议,相比于 POP3,它具有更多的功能,如在服务器上保留电子邮件的副本等。
- DNS(域名系统):用于将 URL 中的域名映射为 IP 地址,以便进行网络通信。
- TCP/IP(传输控制协议/互联网协议):是一组用于在网络中传输数据的协议,包括 IP(Internet Protocol)用于寻址和路由,以及 TCP(Transmission Control Protocol)用于可靠数据传输。
8. DNS 查询
DNS 解析流程分为递归查询和迭代查询,递归查询是以本地名称服务器为中心查询,递归查询是默认方式,迭代查询是以 DNS 客户端,也就是客户机器为中心查询。
由于递归查询对于被查询的域名服务器负担太大,通常采用下面右图的模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。
为了提高 DNS 的查询效率,并减轻根域名服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的的域名以及从何处获得域名映射信息的记录。
9. DNS 的用途
DNS(Domain Name System)是互联网中用于将域名(如 www.example.com)解析为对应的 IP 地址的分布式命名系统。DNS 的主要用途如下:
- 域名解析:DNS 最主要的用途是将人类可读的域名解析为计算机可理解的 IP 地址。当用户在浏览器中输入一个域名时,DNS 服务器会根据域名查询对应的 IP 地址并返回给客户端,以便建立与目标服务器的通信连接。
- 负载均衡:DNS 可以用于实现负载均衡,将多个服务器的域名映射到同一个域名下的多个不同 IP 地址。通过在 DNS 记录中配置权重、优先级等机制,DNS 服务器可将用户的请求分发到不同的服务器上,以平衡服务器的负载。
- 高可用性和冗余:DNS 还用于实现高可用性和冗余。通过将一个域名映射到多个不同的 IP 地址,当其中一个服务器不可用时,DNS 可以将用户的请求转发到其他可用的服务器上,从而实现高可用性和冗余。
- 反向解析:DNS 也可以用于反向解析,即将 IP 地址解析为对应的域名。这在一些安全审计和网络追踪的场景中很有用,可以通过 IP 地址获得对应的主机名或域名。
- 邮件传递:DNS 在邮件系统中也扮演着重要的角色。邮件服务器在发送或接收邮件时,使用 DNS 查找目标服务器的 MX(邮件交换)记录,以确定邮件应该发送到哪台服务器上。
总的来说,DNS 在互联网中扮演着非常重要的角色,它是将域名解析为 IP 地址的关键系统,同时还支持负载均衡、高可用性和反向解析等功能。