博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DNS协议基础
阅读量:6204 次
发布时间:2019-06-21

本文共 2894 字,大约阅读时间需要 9 分钟。

从百度开始说

众所周知,www.baidu.com就是百度网站的首页,它凭内容简单成为了不少电脑测试是否可以上网的直接凭据。www.baidu.com是一个域名,在真正通信的时候,域名是不被服务器这个铁疙瘩所识别的,铁疙瘩认识的就是IP地址。公网上的IP地址是唯一的,每个端口号有代表这一个程序进度。于是“ip地址+端口号”的组合就成了确定机器和它进行的程序的唯一识别码,而“ip地址+端口号”的组合名就叫socket。

QQ这个程序使用的是动态端口,默认是4000端口,如果4000端口被占用,会使用4001,如果4001被占用,会使用4002,以此类推。那默认情况下,192.168.1.99的4000端口的这个socket信息,就是192.168.1.99这个用户的QQ信息。就是这样,把用户发送的数据给确定住。然后一层一层的打包装头,再经过网线/光纤到达目的地的机器上,经过一层一层的拆头拆包,把这句QQ消息还原,呈现在4000端口上,最后呈现屏幕上。这就是QQ聊天的原理。

虽然IP地址表示机器,但是IP地址是四组数字,太不好记,所以就需要域名来代替IP地址。就好比人与人之间打招呼都是称呼名字,而不是称呼对方的身 份-证号码一样,况且将来会升级成IPv6,IP地址数字会更多。但是一个域名是可以有多个IP地址的,比如百度这www.baidu.com,它作为目前最大的中文搜索引擎,他应该最少有10个主ip地址。

在linux状态下使用#host -t A www.baidu.com,就会反馈两个ip地址,然后分别在浏览器的地址栏里输入这两个ip地址,都会打开百度的首页。本人在写文章之时身处黑龙江省,我输入上方的实验的host语句,会得到两个不同的ip地址,这两个不同的ip地址同样也会打开百度的首页。记得在2010年百度被黑掉的五个小时里,四川、福建、江苏、吉林、浙江、北京、广东等省市出现了登陆异常的现象,我想可能是这几个省的主服务器用的是一个服务器,所以ip地址也是同一个了,所以伊朗人一黑就把这几个省的百度服务全黑掉了。

DNS协议的原理

DNS是应用层协议,这一点跟http协议是一样的,它的端口号是53,注意!DNS是先用UDP协议查询IP,因为UDP协议比较快,如果UDP不行,才派上TCP协议,所以防火墙要同时放行UDP和TCP两个53端口。无论是iso的7层模型还是简化的4层模型,上下层协议的关系都是这样的:上层协议使用下层协议的服务(比如http协议是加载在tcp协议上的),下层协议给上层协议一个接口。

返回来说DNS,DNS的主要用途就是让那些充满了英文字母的域名与充满数字的IP能进行对应,但是要注意这个对应不是一对一的,比如上面百度的例子,北方人使用的www.baidu.com就至少对应了2个不同的IP,其实同样在上面的例子里,输入180.97.33.107网页页面是百度首页,但是实际上对应的不仅仅是百度首页。这是一个多对多的映射。

这个世界存在若干个DNS服务器(目前为止是13个),他们什么都不干,专门负责记录那些登记上来的域名,然后给他们分发一个ip地址,同时把ip地址与域名进行绑定。不过由于互联网产业是爆炸式发展,屁大点个公司都要弄个网站玩玩,再加上现在许多个人的博客,域名已经成万上亿了,于是这些域名就需要分别进行管理,就被划分成了顶级域名、二级域名和子域名。

举个例子,www.JQK123.net这个网络地址(FQDN比网址多一个.在后面)里,.net是顶级域名,JQK123是二级域名,前面的www是子域名。

再举个例子,网易新闻的地址是news.163.com,.com是顶级域名,163是二级域名,前面的news就是子域名,代表这个域放的都是新闻内容。如果子域名是bbs,代表这个域存放的网页都是论坛相关的内容。http://baike.baidu.com/view/655511.htm,这个网址的具体含义就是“这个网址遵循http协议的,它的内容是baidu.com这个主服务器下baike域里面view文件夹里的叫655511.htm“。

从上面的例子中可以看出,常见的论坛一般都是bbs作为主机名,但是都是bss,这些bbs的不同就是通过后面的二级域名区分的,这个是sina的bbs,那个是taobao的bbs。这种感觉就好比,同样叫做孙悟空,但是一个是中国猴,另一个是赛亚人。

DNS工作流程

DNS的架构是反向树形结构,比如说bbs.123JQK.com和news.123JQK.com与game.163.net的关系,就如图所示。

上一层的DNS服务器所记录的信息只有下一层的主机名,就好比国家主席只需要对各省省长有所掌控,再有各省省长对各市市长进行管控,这样层层递进。而大可不必国家主席直接管每一个市民,假如一台普通的用户上网需要登录上面的bbs.123JQK.com,是怎么实现的?

1)用户在浏览器的地址栏里输入bbs.123JQK.com。这个请求先到本地系统,linux系统的话,会查询/etc/hosts这个文件,如果hosts这个文件里面没有bbs.123JQK.com这个对应的IP。然后查找就近的DNS服务器,DNS服务器同样的先检查自己缓存,缓存是记录这台机器曾经成功登陆网站的信息,如果缓存内有bbs.123JQK.com,那么无需继续查找,就直接按缓存记录里的IP地址跳转即可。如果缓存里没有,那就向上查找。
2)服务器向上“上访”,这里可不是一级一级的上访,而是直接上访到.(root)那里。但是前面说过了上一层的只记录下一层的信息,于是.(root)只说,你这玩意是.com那一片的,你去.com那里问问。
3)然后DNS服务器接到.(root)的指示,将信号发送到.com服务器。这里的服务器告诉123JQK.com的地址。
4)DNS这时候收到.com的指示,调头去了123JQK.com,123JQK.com服务器这时候提供bbs.123JQK.com的IP号。至此,终于得到目标网站的IP号了。
5)查到这个IP之后,DNS机器还先把这个IP号保存到自己的缓存里,不至于下一次再登陆这个网站的时候,再从步骤1跑到步骤4,跑一次其实很消耗系统带宽的。这份缓存也是有时间限制的,通常是24小时,过了24小时之后,缓存会被释放掉。

在步骤1中,优先查缓存然后去找DNS,虽然找缓存是优先的做法,而且使用缓存更快,但是不权威,DNS查询是权威的。而且从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

如果要想在电脑上看到这个查询IP的过程,可以在linux状态下输入"#dig +trace 目标网络地址"

【参考文章】http://369369.blog.51cto.com/319630/812889/

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1748603

转载地址:http://snhca.baihongyu.com/

你可能感兴趣的文章
安装 SharePoint 2013 Foundation
查看>>
【无删减】Python老司机收藏夹的17个国外免费学习网站
查看>>
学会这二十个正则表达式,能让你少些1000行代码!
查看>>
MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八
查看>>
Python从菜鸟到高手(1):初识Python
查看>>
网络监控如影随形
查看>>
Server 2012 Hyper-v新功能之二:自动化支持技术
查看>>
VMM2012应用指南之12- 创建自助服务用户并分配云
查看>>
dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》
查看>>
关于Go语言在服务端做Restful接口和socket通信
查看>>
Snapchat, 给年轻人要的安全感
查看>>
高计能计算要实现软着陆
查看>>
程序集、应用程序配置及App.config和YourSoft.exe.config .
查看>>
【qt】QT 的信号与槽机制
查看>>
servlet乱码 解决方法 2种方法
查看>>
.balignl 16,0xdeadbeef浅析
查看>>
Android处理ListView中的Item中的Button按钮不能点击的问题
查看>>
翻译词典推荐
查看>>
DEFINE_PER_CPU
查看>>
[C#]Attribute特性(3)——AttributeUsage特性和特性标识符
查看>>