DNS服务器是如何工作的?

    我们上网从打开浏览器开始,输入网址,按下回车,浏览器显示给你一个漂亮的网页,一切看上去都是这样自然。然而大学计算机网络老师告诉我们,ip是定位网络中主机的地址的。只有知道了ip地址才能访问对方主机也就是访问服务器,如果连服务器都无法访问,也就无从谈起怎么得到网页了。

    大多数同学都是知道的,存在一个将网址解析成ip地址的玩意——DNS服务器。可以理解为输入一个网址,返回一个ip,当然它也不单单是为了web应用而生,邮件应用也要靠它,输入一个邮件地址,返回一个优先级和邮件服务器网址和ip(优先级是因为有可能配置多级服务器)

    那么DNS到底是怎么工作的,身为程序员都有一颗追求底层的心。必须要一追到底!

    首先你打开你的电脑,一般都是windows系统


    如果要解析一个从未解析过的网址,首先通过操作系统的Socket库中方法将网址信息组装成一条请求消息发送到这台服务器上,然后DNS服务器根据这条消息,查询内置的表格,返回对应的结果。

    首先了解一下请求消息的格式:网址+class+类型

    网址就是你要转换成ip的网址,不用解释,class代表internet,现在基本都是IN,因为上世纪还存在除了internet之外的网络,类型代表是请求类型,到底是web应用的请求还是邮件应用的请求,web应用类型为A,address,邮件应用类型为MX。

    然后DNS服务器中有一个表格

网址 class 类型 响应数据
www.baidu.com IN A X.X.X.X
XXX@163.COM IN MX 10  www.sadsd.com
www.sadsd.com IN A Y.Y.Y.Y

    然后根据请求消息的值去和这个表一一对应,返回对应的响应结果。如果是MX类型,返回优先级和邮件服务器网址,网址还会自动解析成ip地址,如果上图显示

    好像到现在,网址解析成ip的问题已经解决了,但是好像还有个问题,如果这个DNS服务器没有这个地址所对应的响应数据咋办,返回为空咋办?

    这得说下网址得构成了,出现网址是因为ip地址太难记忆,没有网址可以形式化记忆如拼音,单词等等。网址一般由如下组成

xx.ss.cc.zz.tt.yy。一串字符串由点分割开来,每个小段称之为一个域,如www.baidu.com 这就代表com域,baidu域,www域

网址得组成和公司结构类似,上级管理一堆下级。在网址上就是com域下面得子域baidu域,baidu域下面子域www域。每一个域由一个DNS服务器管理(其实可以一个DNS管理多个域),上层域保管下层域对应的DNS服务器的ip,这样我们可以根据最高的域顺藤摸瓜的找到对应的网址,从而找到对应ip。例如www.baidu.com 首先找com,然后baidu,再找www

    但是这又有个问题,很多网址的结尾是不一样的,例如cn ,com,org。难道我要保存这些域的DNS所有服务器的IP嘛,我去哪里找他们,其实很多网址我们书写其实是不正确的,例如www.baidu.com正确写法应该是www.baidu.com.最后有个.这个点代表的根域,这个根域是最高域,管理着com,org,cn。这个根域也对应的根DNS服务器,全球一共有13个根服务器,这里是服务集群,不是说只有13个服务器(互联网的去中心化很重要啊)。

    这些根服务器已经内置到了各个计算机当中,最开始首先访问最近的DNS服务器如果找不到,就开始找根服务器,然后顺藤摸瓜的往下找,直到找到然后返回ip。值得注意的是每次请求和响应都是最近这个DNS服务器去请求,最终也由这个DNS服务器查询到ip地址返回给客户端。找到了之后DNS服务器和本地会缓存一份,下次再用就不需要重新查找。


    

全部评论

相关推荐

自从我室友在计算机导论课上听说了“刷 LeetCode 是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在 DP,请勿打扰,否则 Time Limit Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk is cheap. Show me the code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j] 代表第 i 个人坐在第 j 个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target node),我应该用 BFS 还是 DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点 (x, y),我们俩的路径有 k 个交点,为了最小化时间复杂度,应该在 (x/2, y/2) 处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是 O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到 O(log n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你 Two Sum 刷了几遍了?”“别提了,昨天遇到一道 Hard 题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode 真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务