-
当计算机联网出现问题时,第一个解决方法就是ping一下网络
-
指定ping的次数:
- 因为windows下的ping命令和Linux下的是有所不同的。linux下的ping必须指定次数,不然他会无限次的执行下去
- -c ping三次roclinux.cn网站的正确执行方法是:
- ping -c 3 roclinux.cn
-
只重结果不重过程 -q
- ping -q -c 3 roclinux.cn
-
陌生的指标mdev,就在ping命令输出的最后一行,这个指标用来干什么?
- mdev是Mean Deviation的缩写,表示ICMP包的RTT偏离平均值的程度,主要是用来衡量网速的稳定性的。mdev的值越大说明网速越不稳定。
- 在不同的操作系统的mdev的名字也有所不同,mac下叫stddev,在windows下根本没有这个统计指标。
-
指定ping的数据包的大小
- 默认情况下ping命令是以64B大小的数据包来测试网络连通性的,如果需要改变默认数据包的大小,可以使用参数-s选项。在实际工作中,我们通常使用-s选项来发现网络环境中有关MTU的问题
- 使用后65500B的数据包来测试网络
ping -s 65500 -c 3 roclinux.cn
-
指定ping的TTL
- TTL:生存时间,是指数据包被路由器丢弃之前允许通过的路由器跳数
- TTL是由发送主机来设置的,是为了防止数据包在网络中无限循环,每个路由器在转发网络数据包时,都要求将TTL的值减少1,直到TTL减为0的那一刻,也就是这个数据包生命终结的时刻。
- 设定他在网络上的生命时长:
- ping -t 255 roclinux.cn
- 默认值
- Linux 64/255
- windows NT/2000/XP系统 128
- Unix255
-
指定ping的时间间隔
- ping命令的核心功能就是查看网络的联通性和网络的延迟。默认情况下,发送两个数据包之间的间隔是1秒。
- -i指定发送两个ping包之间的时间间隔。
- 只有root用户才能够设置低于0.2秒的时间间隔
- ping -i 0.1 -c 3 rolinux.cn
-
如果我们希望ping命令以尽可能快的速度来发送数据包,则可以使用-f选项来实现爱如潮水般的ping。
- -f:flood ping
- flood ping会采用无间隔的方式尽全力发送探测数据包,以确保每秒钟至少发送100个。我们把这种模式称为“疯狂模式”。这个方式只有root用户才能使用
- 0%packet loss表示丢包率为0,说明网卡工作非常正常,也没有网络拥塞发生
*
DNS中的nslookup
-
DNS: Domain Name System 域名系统 负责整个互联网中“域名—IP地址”的管理和解析工作。
-
作用:访问网站时不用去记住IP地址,而是通过字符串
-
IP地址解析还存在着就地解析和经常更换的问题
-
nslookup:name server lookup的缩写。nslookup:用来查询DNS的
- 有两种工作模式:
- 交互模式
- 用户只需要执行一次nslookup,就可以向域名服务器连续发起查询请求
- 只需要在终端输入nslookup就可以了。‘>’就是nslookup进入交互模式的重要标志。此时nslookup会连接到默认的域名服务器,也就是/etc/resolv.conf中所配置的第一个DNS服务器的地址。(没有找到这个文件)。
- 如果我们想自己制定一个DNS服务器地址,也是完全可以的,设置nslookup的第一个参数为‘-’,第二个参数是要连接的DNS服务器IP地址即可。
- 假如我们想连接到谷歌的开放DNS,则可以这样做:nslookup - 8.8.8.8
- 非交互模式
- 用户发起的查询请求是一次性的,下次想查询就要再执行一次nslookup
- 交互模式
- 有两种工作模式:
-
DNS协议是一个应用层的协议
- 工作过程:
- 为了解析一个域名(www.baidu.com),应用程序会调用域名解析库函数,并将域名作为参数传入其中。
- 此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一个域名解析请求。
- 上连DNS服务器接到域名解析请求后,在本机查找此域名,找到后将其对应的IP地址返回给解析库函数。
- 解析库函数接收到上连DNS服务器返回的消息后,将此消息返回给应用程序。
- 通过上面四个步骤,应用程序就可以拿到一个域名对应的IP地址消息了。
- 如果上连DNS服务器在它本机中并没有搜索到你要查询的域名信息的情况,怎么办?
- 工作过程:
-
DNS的递归查询是怎样的?
- scs.bupt.edu.cn
- cn:国家域名
- edu:教育行业专属域名
- bupt:北京邮电大学英文缩写
- scs:计算机学院的缩写
- 假如小吴在家中希望访问北邮计算机学院的官方网站scs.bupt.edu.cn,于是浏览器会首先发起这个域名的DNS解析。
*- 为了解析这个域名,浏览器会调用域名解析库函数,并将域名作为参数传入其中。
- 此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一域名解析请求。
- 上连DNs服务器接到域名解析请求后,在本机查找此域名,但是并没有找到对应的信息。
- 上连DNS服务器就会求助于根DNS服务器(root-servers.net).
- 此后,请求会逐级转发,顺序是cn的DNS服务器->deu.cn的DNS服务器->bupt.edu.cn的DNS服务器。
- 由于bupt.edu.cn一定是管理scs.bupt.edu.cn的资源记录的DNS服务器,于是,bupt.edu.cn的DNS服务器会将查询域名对应的IP地址返回给上一级。
- 这个IP地址会按照逆序依次回转,顺序是edu.cn的DNS服务器->cn的DNS服务器->根DNS服务器
- 最后根DNS服务器将这个消息返回给上连DNS服务器
- 上连服务器收到结果后,首先会将这个结果缓存到本机,同时将其回传给小吴家中的浏览器。
- DNS的迭代查询
*- 为了解析这个域名,浏览器仍然会调用域名解析库函数,并将域名作为参数传入其中。
- 然后此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一个域名解析请求
- 上连DNS服务器街道域名解析请求后,在本机查找此域名,但是没有找到。
- 上连DNs服务器就会求助于根DNS服务器,注意迭代查询要开始了。
- 根DNS服务器会将cn的DNS服务器的地址返回给上连DNs服务器,潜台词就是“虽然我是根DNS服务器,但是我不是万能的,我其实也没办法直接告诉你答案,但是呢,我可以给你引荐一位高人”
- 就这样,上连DNS服务器又依次拜访了cn的DNS服务器-》edu.cn的DNS服务器-》bupt.deu.cn的DNS服务器
- 由于bupt.deu.cn一定是知道scs.bupt.edu.cn的资源记录的,所以bupt.edu.cn的DNS服务器终于把最终答案告诉了上连DNS服务器。
- 上连DNs服务器收到结果后,首先会将这个结果缓存到本机,同时,将其回传给小吴家中的浏览器。
- 区别:
- 递归查询:好事办到底,每个环节都承担起了寻找答案的责任,都会负责去询问他的下一级DNS服务器。
- 迭代查询:给你指路,每个环节都是告诉你下一步怎么走路还是要自己去走。
- 除了这两个,还有什么?
- 递归和迭代相结合的查询方法
- 这种查询方法产生的背景是:根DNS服务器在全球仅有13台,每天都承载着全球数以亿计的查询请求。为了尽量降低他们的工作负载,他们在收到查询请求后,会采用迭代查询的方法,将下一级DNs服务器地址返回给请求方,而请求方再次去请求下一级DNS服务器时,则开始采用递归查询的方法。这样有效的降低了根DNS服务器的负荷,提高全球的DNS查询效率。
*
- scs.bupt.edu.cn
-
域名解析的缓存:
- 如果你仔细看nslookup的输出内容的话,就会发现里面有“Non-authoritative answer”的字样,这个就是和缓存知识密切相关的。
- 每一个DNS服务器都有一个高速缓存区,这里面存放着这台DNS服务器最近经手过的“域名–IP地址”映射关系,以及获得这些映射关系的查询出处。。正如上例中描述的那样,上连DNS服务器在获得了scs.bupt.edu.cn的IP地址后,就会把这个映射关系缓存在自己机器上,这样做的好处在于:下次再有人询问scs.bupt.edu.cn的IP消息的话,这台上连DNS服务器就不需要在发起递归查询或迭代查询了,直接就可以从缓存中找到答案。
- 理想很丰满!!!事情并不简单。因为机器经常会发生故障,网站也会偶尔迁移,所以域名对应的IP地址会变化的。所以DNs服务器不能将这个信息缓存一辈子,需要给他设定一个期限,当然不可能是一万年。一般是小时级别的期限。一旦超过这个期限,DNS服务器就不会再信任自己缓存中的信息,而是重新发起迭代查询或递归查询,去寻求最新的答案。
- 有了这样的机制是不是我们的DNS查询就很完美了?no!虽然我们将期限设置为小时级,但是仍然会存在不走运的“时间差”,假如一台DNS服务器在14:00刚刚缓存了scs.bupt.edu.cn的解析数据,很不幸在14:05,scs.bupt.edu.cn因为网站迁移修改了其对应的IP地址,假如正好有一个用户通过这台DNs服务器来查询scs.bupt.edu.cn时,就会拿到过时的IP地址了。
- 正是由于存在这种隐患和时间差,所以如果DNs服务器是从自己缓存中提取解析数据返回给用户的,那么就会很谨慎的在返回内容中给出“Non-authoritative answer”的字样:潜台词提示用户:朋友,我把答案告诉你了,但是我可不保证它是最新的,因为这是我前一阵子听说的,不是我现在去查的。
- 有人会问:Non-authoritative在英文是非权威的意思,有什么讲究?
- 授权和非授权?
- 还真的有讲究。刚才迭代查询的例子:
- 例子中的DNs服务器会为你指一条明路,即“虽然我不知道xxx的信息,但是我可以给你引荐一个高人”。这位高人就是我们下面要讲的“被授权的人”。
- 在DNS的世界里,没有人知道全部答案,但人们总能告诉你离正确答案更劲的下一位高人
- 例子:
- 虽然edu.cn的DNS服务器(我们称为A机)自己并不知道scs.bupt.edu.cn的IP地址,但是edu.cn的DNS服务器知道负责bupt.edu.cn域名解析的DNs服务器(我们称为B机)的地址,B机就是那个离正确答案更近的高人。所以edu.cn的DNs服务器(A机)就将bupt.edu.cn的域名解析授权给了这台DNS服务器(B机)。只有这台DNs服务器(B)所返回的有关scs.bupt.edu.cn的域名解析才是授权的,否则就称为非授权的。
- 一般情况下,一台DNS服务器从自身缓存中提取结果并返回给询问者,这个结果就是非权威的。
- 还真的有讲究。刚才迭代查询的例子:
-
nslookup输出解析
*
-
上半部分:DNS服务器信息
-
下半部分:域名解析信息
-
DNS服务器信息中包含了两行内容,就是下面两行:
-
Server:127.0.0.53
-
Address:127.0.0.53#53
-
第一行的Server表示我们本次DNS解析所使用的DNS服务器名称,默认会采用系统里/etc/resolv.conf文件中所配置的第一个DNS服务器
-
第二行的Address,表示我们连接到的DNS服务器的具体IP地址和端口。这里的#53就表示我们访问的是DNS服务器的53号端口。53号端口也是DNS Server的默认服务器端口。在亚马逊云AWS中就有一个独立的产品叫做Route53,他是一个强调高可用和灵活伸缩的域名系统(DNS)服务。
-
下半部分就是“域名解析信息”
-
Non-authoritative answer :表示返回的结果是非权威的,可能会因为时间差的原因而不是最新的。
-
www.baidu.com canonical name = www.a.shifen.com //canonical name就是我们常说的CNAME,也就是别名。
-
下面的内容才是表示的是真正的答案,也就是www.baidu.com所对应的两个IP地址
-
-
-
-
-
DNS协议中的五元组
-
一提到DNs,大家都会认为DNS就是用来做域名和IP地址转换的,但其实并非如此,准确的说,DNS是用来做域名和资源转换的,而IP地址只是资源中的一种而已。
当我们把一个域名查询的请求传递给DNS服务器后,DNS服务器返回的是与该域名相关的资源记录。那么资源是个什么东西呢?
在DNS世界里,资源是一个五元组,即:
{DomainName,TimeToLive,Class,Type,Value}
{域名,生存期限,类别,类型,值}
-
DomainName(域名):我们要查的那个域名
-
TimeToLive(生存期限):表示此域名在各DNSfwq缓存中应保存的时长
-
Class(类别):通常为IN,即Internet。另外还有CH(Chaos)和HS(Hesiod)两类,但目前几乎已经被淘汰了。
-
Type(类型):指出这条记录的类型,包括8种SOA,A,MX,NS,CNAME,PTR,HINFO和TXT。
-
SOA:Start of Authority授权起始
-
在这里我们可以获得针对一个域名的最基本的设置信息。包括但不限于:
- Mail:管理员邮箱地址
- Serial:版本序号,格式一般为年月日次,如2016031903表示2016年03月19日的第三个版本。
- Refresh Slave:表示Slave的DNSfwq多久向Master的DNS服务器要一次更新数据。
- Retry:在发起Refresh时,如果Slave连接不到Master,那么间隔多久进行一次连接尝试。
- Expire:在发起Refresh时,如果Slave时钟无法连接到Master,那么多久后放弃尝试。
- Minimum:即TTL,表示外部DNS服务器如果要缓存DNS服务器的授权数据,那么保存时限是多久
Authoritative answers can be found from:
-
-
A:IP地址
- 表示从域名解析到IP地址。此处用来展示其对应的IP地址信息。俗称“A记录”
*
- 表示从域名解析到IP地址。此处用来展示其对应的IP地址信息。俗称“A记录”
-
MX:邮件交换
- Mail eXchanger的缩写,即邮件交换。此类型和邮箱服务器设置有关,用来表示当前域名对应的邮箱服务器。
- 如果你的域名没有配置对应的邮箱服务器,则MX为空
-
NS: 域名服务器
- Name Server:给定域名下所包含的DNS服务器信息
-
CNAME:别名,也较规范名
*
-
PTR:指针,用于反向解析
- 即从IP地址查询其对应域名的映射关系
-
HINFO:主机描述信息,包括CPU和OS信息
-
TXT:其他一些文本信息
-
-
-
Value(值):针对不同类型,会有不同的值。
-
-
为了让大家有一个直观的认识,我们截取了dig命令(后面的文章会讲到)的一小段输出作为例子:
-
scs.bupt.edu.cn 7200 IN CNAME revp.bupt.edu.cn //表示scs.bupt.edu.cn是revp.bupt.edu.cn的别名,其超时时限是7200秒 revp.bupt.edu.cn 7200 IN A 124.127.207.100 //表示revp.bupt.edu.cn对应的IP地址是124.127.207.100,其超市时限同样为7200秒
-
-
nslookup交互模式
-
直接查询域名A记录
-
如果你直接输入域名(www.baidu.com),会有类似如下的输出
-
$ nslookup > www.baidu.com Server: 61.139.2.69//上连的DNS服务器 Address: 61.139.2.69#53//上连的DNS服务器的IP地址与端口号 Non-authoritative answer://非权威答案,即从上连DNS服务器的本地缓存中读取的值 www.baidu.com canonical name = www.a.shifen.com.//说明www.baidu.com有别名叫www.a.shifen.com Name: www.a.shifen.com//域名www.a.shifen.com Address:119.75.217.56//对应的IP地址之一 Name:www.a.shifen.com Address:119.75.218.77//对应的IP地址之二
-
-
-
更改上连DNS地址
-
默认情况下,nslookup会连接到本机的默认上连DNS服务器去查询域名的IP地址
-
我们可以使用server命令来制定上连DNS服务器的地址。
-
$nslookup >www.baidu.com//以默认的上连DNS服务器来查询 Server: 61.139.2.69 Address: 61.139.2.69#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifem.com Address:119.75.218.77 Name: www.a.shifem.com Address:119.75.217.56 >server 8.8.8.8//更改了上连DNS服务器地址为谷歌开放DNS Default server:8.8.8.8 Address:8.8.8.8#53 >www.baidu.com//以更改后的上连DNSfwq来查询 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address:220.181.111.147//看!IP地址变化了,说明百度采用了只能DNS解析策略
-
这个例子可以得到一个知识,那就是,针对同一个域名,两个上连DNS服务器返回的IP地址有可能是不同的,这有可能是由于域名本身采用了只能DNS解析策略所造成的
-
-
-
查看当前DNS的配置
-
列出nslookup工具的常用选项的当前设置值
-
> set all Default server: 8.8.8.8//当前的上连DNS服务器 Address: 8.8.8.8#53//当前的上连DNS服务器的IP地址和端口 Set options: novc nodebug nod2 search recurse timeout = 0 retry = 3 port = 53 querytype = A class = IN srchlist=
-
-
进入调试模式,查看更多交互的信息
-
通过开启debug开关,可以让我们进入调试模式。在调试工程下,域名查询过程中完整的响应包及其中的交互包,都会显示出来,方便大家追查问题和调试功能。
-
$ nslookup > set debug//进入调试模式 > www.baidu.com Server: 61.139.2.69 Address: 61.139.2.69#53 -------- QUESTIONS://发出的查询请求 www.baidu.com,type = A, class = IN ANSWERS://返回的信息 -> www.baidu.com canonical name = www.a.shifen.com. ttl = 1192 -> www.a.shifen.com internet address = 119.75.217.56 ttl = 262 -> www.a.shifen.com internet address = 119.75.217.56 ttl = 262 AUTHORITY RECORDS: ADDITIONAL RECORDS: -------- Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address:220.181.111.147
-
如果你使用set d2命令,则会开启高级调试模式,会输出更多nslookup内部工作的信息,甚至包括许多函数调用信息。
-
-
指定查询中默认的域后缀
-
设置默认的域后缀,可以为我们的域名查询带来便捷。因为,对于所有尾部不包含“.”的查询请求,都会在自动在尾部加上我们所设置的域后缀。
-
$ nslookup > set all//首先显示上连DNS服务器信息以及所有的当前选项信息 Default server:61.139.2.69 Address:61.139.2.69#53 Default server:8.8.8.8 Address:8.8.8.8#53 Default server:202.102.224.68 Address:202.102.224.68#53 Set options: novc nodebug nod2 search recurse timeout = 0 retry = 3 port = 53 querytype = A class = IN srchlist = //可以看到srchlist为空 >set domain = baidu.com//设置默认域为baidu.com >set all//再次查看选项信息 Default server:61.139.2.69 Address:61.139.2.69#53 Default server:8.8.8.8 Address:8.8.8.8#53 Default server:202.102.224.68 Address:202.102.224.68#53 Set options: novc nodebug nod2 search recurse timeout = 0 retry = 3 port = 53 querytype = A class = IN srchlist = baidu.com//可以看到srchlist已经被设置了baidu.com后缀 >image//直接查询image Server: 61.139.2.69 Address: 61.139.2.69#53 Non-authoritative answer: image.baidu.com canonical name = image.n.shifen.com.//可以看到一默认追加了.baidu.com域后缀,变成了image.baidu.com Name: image.n.shifen.com Address:220.181.111.131
-
-
在交互模式下设置type
-
通过set querytype=[value],我们可以更改信息查询的信息
-
默认情况下,nslookup是查询域名所对应的A记录,而当你想查询其对应的MX记录等信息时,就需要更改查询的类型了。
-
目前常用的type值如下:
- A:查看主机的IPv4地址
- AAAA:查看主机的IPv6地址
- ANY:查看关于主机域的所有信息
- CNAME:查找与别名对应的正式名字
- HINFO:查找主机的CPU与操作系统类型
- MINFO:查找邮箱信息
- MX:查找邮箱交换信息
- NS:查找主机域的域名服务器
- PTR:查找与给定IP地址匹配的主机名
- RP:查找域负责人记录
- SOA:查找域内的SOA地址
- UINFO:查找用户信息
-
针对MX类型的查询结果如下
-
>set type = MX >baidu.com//查询MX信息 Server: 61.139.2.69 Address: 61.139.2.69#53 Non-authoritative answer: baidu.com mail exchanger = 20 jpmx.baidu.com. baidu.com mail exchanger = 20 jpmx.baidu.com. baidu.com mail exchanger = 20 jpmx.baidu.com. baidu.com mail exchanger = 20 jpmx.baidu.com. Authoritative answers can be found from: >set type = A >baidu.com//查询A记录 Server: 61.139.2.69 Address: 61.139.2.69#53 Non-authoritative answer: Name: baidu.com Address:123.125.114.114 Name: baidu.com Address:220.181.111.85 Name: baidu.com Address:220.181.111.86
-
-
dig
dig: Domain Information Groper他是一个DNS查询工具
吸血专业的DNS管理员在查询DNS问题时,都乐于使用dig命令,看中的是dig设置灵活,输出清晰,功能强大的特点
-
最简单的dig用法:直接执行dig命令
*
从上面的输出可以发现,当直接使用dig命令不加任何参数和选项时,dig会向上连DNS服务器查询“.”(根域)的NS记录 -
dig 后面加个.
- 表示查询根域,看看结果和刚才有什么不一样
* - 可以看出,这次输出的是根域的A记录,这个例子中展示了13个根域之一的a.root-servers.net.的五元组信息
- 表示查询根域,看看结果和刚才有什么不一样
-
谷歌开放DNS来查询
-
在2009年Google对外发布了一项全新的服务,即谷歌公共域名解析服务,英文是Google Public DNS,旨在为全球用户提供安全可靠地DNS解析服务。他的首选DNS服务器是8.8.8.8,而备选DNS服务器则为8.8.4.4
-
下面这个例子就是用谷歌开放DNS服务器来查询百度域名的A记录:
-
$ dig @8.8.8.8 www.baidu.com A //命令格式为dig @dnsserver name querytype //如果你没有设置@dnsserver,那么dig会依次使用/etc/resolv.conf里的地址作为上连DNS服务器
-
-
-
用-f选项实现批量查询
-
dig命令支持从一个文件里读取内容进行批量查询,这个功能非常体贴。
-
#文件内容,共有两个域名需要查询 [roc@roclinuc~]$cat querylist www.baidu.com www.sohu.com #设置-f参数开始批量查询,同时通过-t来指定查询类型 [roc@roclinux~]$dig -f querylist -t A
-
-
用-t选项设置查询类型
- 我们可以使用-t选项设置需要查询的资源类型,默认情况下是A。
- 如果我们想查看域名的MX信息,则方法如下:
#我们设置查询类型为MX,即邮箱服务器 [roc@roclinux~]$dig roclinux.cn -t MX
-
看似没用却有用的-q选项
-
-q选项可以显式的设置你要查询的域名,这样可以避免和其他众多的参数,选项相混淆,提高了命令的可读性。
-
[roc@roclinux~]$dig -q www.roclinux.cn -t A
-
虽然输出的内容并没有什么变化,但是这样的写法可以让人很清晰的看到我们要查询的是www.roclinux.cn域名。
-
-
-
用-x选项实现反解
- 反解功能:可以查询IP地址到域名的映射关系
- dig -x 193.0.14.129
-
dig特有的查询选项:
- 和刚才的选项不同,dig还有一批所谓的“查询选项”,这批选项的使用与否,会影响到dig的查询方式或输出的结果信息。dig要求显式地在其前面同意加上一个“+”符号,这样dig识别起来会更加方便。【42个查询选项】
-
查询选项—用TCP代替UDP
- DNS查询过程中的交互默认是采用UDP协议。如果你希望采用TCP协议来进行DNS通信,那么就需要使用+tcp选项了。dig +tcp @8.8.8.8 www.baidu.com
-
查询选项-----默认追加域
- dig +domain=baidu.com image
- +domain=baidu.com格式来设置默认域
-
查询选项-----跟踪dig全过程
- +trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果。,并将整个过程信息输出出来。
-
查询选项—精简dig输出
- 我们使用+short选项,可以让dig输出最精简的CNAME信息和A记录
- dig +short ww.baidu.com
- 如果我们想在dig的标准输出中精简一些冗余内容,那么可以使用+nocmd+nocomment+nostat组合选项,这样各类冗余信息就都不会输出了,只会输出最核心的内容