关于DNS不得不说的一些事(关于dns的说法正确的是)
nanshan 2024-11-08 12:38 12 浏览 0 评论
专注于Java领域优质技术,欢迎关注
作者:孤独烟 文章转自:孤独烟
引言
今天我们来聊聊DNS。
所谓域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,可以balabala..省略一万字不表,因为这都不是重点!
重点只有一个,大厂经常问!
没错,正是因为DNS包含着很多大厂常考面试知识点!因此,烟哥认为很有必要再开一文说明。
正文
概念
DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的作用就是将人们所熟悉的网址 (域名) “翻译”成电脑可以理解的 IP 地址,这个过程叫做 DNS 域名解析。
打个比方,我们登百度的地址的时候,都是敲www.baidu.com,进行登陆,难道你会去敲IP地址登百度?明显,域名容易记忆。
而且,一个域名往往对应多个DNS地址,如下图所示
如果要全部都记住,嗯,我相信兄台记忆力一定十分惊人!
流程
接下来,就不得不说一道经典面试题了
其实回答很简单(俗称天龙八步)
- 1.根据域名,进行DNS域名解析;
- 2.拿到解析的IP地址,建立TCP连接;
- 3.向IP地址,发送HTTP请求;
- 4.服务器处理请求;
- 5.返回响应结果;
- 6.关闭TCP连接;
- 7.浏览器解析HTML;
- 8.浏览器布局渲染;
ps:由于本文不是讲HTTP请求,我提几个思考题,读者自己去思考(没错,我就是故意不说,咬我啊!)
- 1、一个 TCP 连接可以对应几个 HTTP 请求?(提示,这在问你HTTP1.0和1.1的区别)
- 2、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?(提示,这就是在问你HTTP2.0和HTTP1.1协议的区别)
- 3、浏览器对同一Host建立TCP连接到数量有没有限制?(拜托,一个网站那么多图片,开一个TCP连接,按顺序下载?那不是等到死?)
好了,不扯了,本文不是在讲Http协议。
下面我们着重来说DNS解析这块
解析
OK,着重说DNS解析这块,流程图如下
如图所示,大致就是:浏览器输入地址,然后浏览器这个进程去调操作系统某个库里的gethostbyname函数(例如,Linux GNU glibc标准库的gethostbyname函数),然后呢这个函数通过网卡给DNS服务器发UDP请求,接收结果,然后将结果给返回给浏览器。
这张图其实已经讲明白大致的流程,但是细节上可能有些差异。
例如
- (1)我们在用chrome浏览器的时候,其实会先去浏览器的dns缓存里头查询,dns缓存中没有,再去调用gethostbyname函数
- (2)gethostbyname函数在试图进行DNS解析之前首先检查域名是否在本地 Hosts 里,如果没找到再去DNS服务器上查
不过,看到这里!请回忆下这两道面试题?
现在,会回答了么?
什么,你还不懂怎么答?把文章拉到开头。从头看过。
不过呢,需要补充说明一下,DNS中也有一个地方用到了TCP协议。那就是区域传送!
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。这种情况下,使用TCP协议。
讲到这里。其实面试官是可以深入追问的,如下所示
针对第一问,为什么域名解析用UDP协议?
因为UDP快啊!UDP的DNS协议只要一个请求、一个应答就好了。而使用基于TCP的DNS协议要三次握手、发送数据以及应答、四次挥手。但是UDP协议传输内容不能超过512字节。不过客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。
针对第二问,为什么区域传送用TCP协议?
因为TCP协议可靠性好啊!你要从主DNS上复制内容啊,你用不可靠的UDP?
因为TCP协议传输的内容大啊,你用最大只能传512字节的UDP协议?万一同步的数据大于512字节,你怎么办?
讲到这里,我突然想到一个段子(没办法,头脑中知识太多)!
这个问题,我们这里当段子来讲,改天写一篇《TCP/IP面试指南》!
三次握手:
两次握手:
四次握手:
所以啊。三次握手资源最省(当段子看看就好)!扯回我们的DNS话题!
原理
现在,讲最后一块DNS解析域名的原理!这块是重中之重!
先介绍linux下一个dig命令,以显示解析域名的过程。
为了便于说明,我们来dig一下天猫的过程
dig www.tmall.com
结果如下图所示
莫方,看不懂没事。
现在我们来读重点的两段。第一段代表请求参数如下图所示
这段为查询内容。
DNS的查询参数一般有三个
- (1)域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称
- (2)Class:在设置DNS方案时,互联网之外的网络也考虑到了,而Class就是用来识别网络的,不过现在只有互联网,所以它的值永远都是代表互联网的IN
- (3)记录类型:标识域名对应何种类型的记录。类型为A,表示域名对应的IP地址。类型为MX时,表示域名对应的是邮件服务器。类型为PTR,表示根据IP地址反查域名。类型为CNAME,表示查询域名相关别名。
当然,你这个时候要问我一个问题啦(注意上图红框)
烟哥,我输入的明明是www.tmall.com可是命令里解析的地址是www.tmall.com.啊,多了一个.的符号啊?这个.符号是什么意思呢?
于是乎,又扯了一道经典面试题
OK,好,要讲明白这个问题。我们要先把域名的结构讲清楚!
www.tmall.com对应的真正的域名为www.tmall.com.。末尾的.称为根域名,因为每个域名都有根域名,因此我们通常省略。
根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com、.net;
再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.tmall.com里面的.tmall,这一级域名是用户可以注册的;
再下一级是主机名(host),比如www.tmall.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。
那么解析流程就是分级查询!
(1)先在本机的DNS里头查,如果没有就直接返回了。本机DNS就是下面这个东东
(2)本机DNS里头发现没有,就去根服务器里查。根服务器发现这个域名是属于com域,因此根域DNS服务器会返回它所管理的com域中的DNS 服务器的IP地址,意思是“虽然我不知道你要查的那个域名的地址,但你可以去com域问问看”
(3)本机的DNS接到又会向com域的DNS服务器发送查询消息。com 域中也没有www.tmall.com这个域名的信息,和刚才一样,com域服务器会返回它下面的tmall.com域的DNS服务器的IP地址。
以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标DNS服务器ps:温馨提醒,dig +trace www.tmall.com 可以看到解析过程。有兴趣的读者,自己实验一下。
扯了那么多东西,我们来看第二段内容,也就是响应体的部分!
如下所示
很明显,第一行就是说www.tmall.com这个域名地址拥有一个别名是www.tmall.com.danuoyi.tbcache.com。那么,很显然,后面几行就是这个www.tmall.com.danuoyi.tbcache.com地址的真实IP。
为什么天猫要设一个别名到www.tmall.com.danuoyi.tbcache.com地址呢?
于是乎,又一道经典面试题出现
说句实在话,我当初第一眼,见到这题的时候,我觉得应该是方便cdn配置。
回到我们的例子,如果烟哥的猜测正确,www.tmall.com.danuoyi.tbcache.com这个地址,应该是淘宝的一个cdn地址。
因此,我特意去查了域名备案记录。如下图所示
果然,就是一个淘宝的cdn环境。
那么这么配有什么好处呢?
唉,这题当思考题,快过来探讨留言!
总结
本文讲了DNS的一些常见知识点,希望大家有所收获。如果有其他关于DNS的问题,欢迎留言咨询。
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)