ping域名和ping IP时速度不同的原因

不知道大家在ping的时候有没有遇到过这样的问题:
当你ping一个域名的时候,ping结果返回得很慢,但是如果直接ping这个域名的ip,结果却快很多。

直接ping ip的时候,每两次发包之间没有明显的能感知出来的延迟:

PING www.example.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.

64 bytes from xxx.xxx.xxx.xxx: icmp_req=1 ttl=50 time=3.71 ms

64 bytes from xxx.xxx.xxx.xxx: icmp_req=2 ttl=50 time=5.61 ms

64 bytes from xxx.xxx.xxx.xxx: icmp_req=3 ttl=50 time=3.78 ms

64 bytes from xxx.xxx.xxx.xxx: icmp_req=4 ttl=50 time=4.11 ms

64 bytes from xxx.xxx.xxx.xxx: icmp_req=5 ttl=50 time=3.74 ms

64 bytes from xxx.xxx.xxx.xxx: icmp_req=6 ttl=50 time=3.64 ms

— www.example.com ping statistics —

6 packets transmitted, 6 received, 0% packet loss, time 25073ms

rtt min/avg/max/mdev = 3.647/4.103/5.618/0.697 ms

ping域名的时候,每两次发包间有明显的延迟:

PING www.example.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.

(10s…)

64 bytes from xxx.xxx.xxx.xxx: icmp_req=1 ttl=50 time=3.71 ms

(3s…)

64 bytes from xxx.xxx.xxx.xxx: icmp_req=2 ttl=50 time=5.61 ms

(4s…)

64 bytes from xxx.xxx.xxx.xxx: icmp_req=3 ttl=50 time=3.78 ms

(6s…)

64 bytes from xxx.xxx.xxx.xxx: icmp_req=4 ttl=50 time=4.11 ms

(3s…)

64 bytes from xxx.xxx.xxx.xxx: icmp_req=5 ttl=50 time=3.74 ms

(5s…)

64 bytes from xxx.xxx.xxx.xxx: icmp_req=6 ttl=50 time=3.64 ms

— www.example.com ping statistics —

6 packets transmitted, 6 received, 0% packet loss, time 25073ms

rtt min/avg/max/mdev = 3.647/4.103/5.618/0.697 ms

google相关资料后发现,当每次ping完得到响应之后,ping程序会尝试一次反向dns查询(reverse dns lookup)来获取“64 bytes from”后面的域名,如果查询速度很慢的话,就会给人似乎延迟很大的感觉,其实这也是ping感觉慢,但是每次ping的响应时间却并不慢的原因。

其实,ping指令有一个 -n 选项,加上之后可以阻止ping程序去进行反向dns查询,这样ping起来就“快”了!

阅读原文

===============================================================

Linux下的dig 命令详解

在 UNIX 和 Linux 下,建议大家使用 dig 命令来代替 nslookup。 dig 命令的功能比 nslookup 强大很多,不像 nslookkup 还得 set 来 set 去的,怪麻烦的。下面是 dig 的一些比较常用的命令:

# dig 最基本的用法

dig @server qianlong.com

# 用 dig 查看 zone 数据传输

 

dig @server qianlong.com AXFR

# 用 dig 查看 zone 数据的增量传输

dig @server qianlong.com IXFR=N

# 用 dig 查看反向解析

dig -x 124.42.102.203 @server

# 查找一个域的授权 dns 服务器

dig   qianlong.com +nssearch

# 从根服务器开始追踪一个域名的解析过程

dig   qianlong.com +trace

# 查看您使用的是哪个 F root dns server

dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXT

# 查看 bind 的版本号

dig @bind_dns_server CHAOS TXT version.bind

********************************

您能够到 www.isc.org 去下载一个 bind for windows 的版本安装,安装后就能够在 windows 上使用 dig 命令了。^O^

ftp://ftp.isc.org/isc/bind/contrib/ntbind-9.3.0/BIND9.3.0.zip

*********************************

用途

DNS 查询实用程式。

语法

dig [@server] [-b address] [-c class] [-f filename] [-k filename] [ -n ][-p port#] [-t type] [-x addr] [-y name:key] [name] [type] [class] [queryopt...]

dig [-h]

dig [global-queryopt...] [query...]

描述

dig(域信息搜索器)命令是个用于询问 DNS 域名服务器的灵活的工具。他执行 DNS 搜索,显示从受请求的域名服务器返回的答复。多数 DNS 管理员利用 dig 作为 DNS 问题的故障诊断,因为他灵活性好、易用、输出清楚。虽然通常情况下 dig 使用命令行参数,但他也能够按批处理模式从文档读取搜索请求。不同于早期版本,dig 的 BIND9 实现允许从命令行发出多个查询。除非被告知请求特定域名服务器,dig 将尝试 /etc/resolv.conf 中列举的任何服务器。当未指定任何命令行参数或选项时,dig 将对“.”(根)执行 NS 查询。

标志

-b address 配置所要询问地址的源 IP 地址。这必须是主机网络接口上的某一合法的地址。

-c class 缺省查询类(IN for internet)由选项 -c 重设。class 能够是任何合法类,比如查询 Hesiod 记录的 HS 类或查询 CHAOSNET 记录的 CH 类。

-f filename 使 dig 在批处理模式下运行,通过从文档 filename 读取一系列搜索请求加以处理。文档包含许多查询;每行一个。文档中的每一项都应该以和使用命令行接口对 dig 的查询相同的方法来组织。

-h 当使用选项 -h 时,显示一个简短的命令行参数和选项摘要。

-k filename 要签署由 dig 发送的 DNS 查询连同对他们使用事务签名(TSIG)的响应,用选项 -k 指定 TSIG 密钥文档。

-n 缺省情况下,使用 IP6.ARPA 域和 RFC2874 定义的二进制标号搜索 IPv6 地址。为了使用更早的、使用 IP6.INT 域和 nibble 标签的 RFC1886 方法,指定选项 -n(nibble)。

-p port# 假如需要查询一个非标准的端口号,则使用选项 -p。port# 是 dig 将发送其查询的端口号,而不是标准的 DNS 端口号 53。该选项可用于测试已在非标准端口号上配置成侦听查询的域名服务器。

-t type 配置查询类型为 type。能够是 BIND9 支持的任意有效查询类型。缺省查询类型是 A,除非提供 -x 选项来指示一个逆向查询。通过指定 AXFR 的 type 能够请求一个区域传输。当需要增量区域传输(IXFR)时,type 配置为 ixfr=N。增量区域传输将包含自从区域的 SOA 记录中的序列号改为 N 之后对区域所做的更改。

-x addr 逆向查询(将地址映射到名称)能够通过 -x 选项加以简化。addr 是个以小数点为界的 IPv4 地址或冒号为界的 IPv6 地址。当使用这个选项时,无需提供 name、class 和 type 参数。dig 自动运行类似 11.12.13.10.in-addr.arpa 的域名查询,并分别配置查询类型和类为 PTR 和 IN。

-y name:key 您能够通过命令行上的 -y 选项指定 TSIG 密钥;name 是 TSIG 密码的名称,key 是实际的密码。密码是 64 位加密字符串,通常由 dnssec-keygen(8)生成。当在多用户系统上使用选项 -y 时应该谨慎,因为密码在 ps(1)的输出或 shell 的历史文档中可能是可见的。当同时使用 dig 和 TSCG 认证时,被查询的名称服务器需要知道密码和解码规则。在 BIND 中,通过提供正确的密码和 named.conf 中的服务器声明实现。

参数

global-queryopt... 全局查询选项(请参阅多个查询)。

查询 查询选项(请参阅查询选项)。

查询选项

dig 提供查询选项号,他影响搜索方式和结果显示。一些在查询请求报头配置或复位标志位,一部分决定显示哪些回复信息,其他的确定超时和重试战略。每个查询选项 被带前缀(+)的关键字标识。一些关键字配置或复位一个选项。通常前缀是求反关键字含义的字符串 no。其他关键字分配各选项的值,比如超时时间间隔。他们的格式形如 +keyword=value。查询选项是:

+[no]tcp

查询域名服务器时使用 [不使用] TCP。缺省行为是使用 UDP,除非是 AXFR 或 IXFR 请求,才使用 TCP 连接。

+[no]vc

查询名称服务器时使用 [不使用] TCP。+[no]tcp 的备用语法提供了向下兼容。 vc 代表虚电路。

+[no]ignore

忽略 UDP 响应的中断,而不是用 TCP 重试。缺省情况运行 TCP 重试。

+domain=somename

设定包含单个域 somename 的搜索列表,似乎被 /etc/resolv.conf 中的域伪指令指定,并且启用搜索列表处理,似乎给定了 +search 选项。

+[no]search

使用 [不使用] 搜索列表或 resolv.conf 中的域伪指令(假如有的话)定义的搜索列表。缺省情况不使用搜索列表。

+[no]defname

不建议看作 +[no]search 的同义词。

+[no]aaonly

该选项不做任何事。他用来提供对配置成未实现解析器标志的 dig 的旧版本的兼容性。

+[no]adflag

在查询中配置 [不配置] AD(真实数据)位。现在 AD 位只在响应中有标准含义,而查询中没有,但是出于完整性考虑在查询中这种性能能够配置。

+[no]cdflag

在查询中配置 [不配置] CD(检查禁用)位。他请求服务器不运行响应信息的 DNSSEC 合法性。

+[no]recursive

转换查询中的 RD(需要递归)位配置。在缺省情况下配置该位,也就是说 dig 正常情形下发送递归查询。当使用查询选项 +nssearch 或 +trace 时,递归自动禁用。

+[no]nssearch

这个选项被配置时,dig 试图寻找包含待搜名称的网段的权威域名服务器,并显示网段中每台域名服务器的 SOA 记录。

+[no]trace

转换为待查询名称从根名称服务器开始的代理路径跟踪。缺省情况不使用跟踪。一旦启用跟踪,dig 使用迭代查询解析待查询名称。他将按照从根服务器的参照,显示来自每台使用解析查询的服务器的应答。

+[no]cmd

设定在输出中显示指出 dig 版本及其所用的查询选项的初始注释。缺省情况下显示注释。

+[no]short

提供简要答复。缺省值是以冗长格式显示答复信息。

+[no]identify

当启用 +short 选项时,显示 [或不显示] 提供给答的 IP 地址和端口号。假如请求简短格式应答,缺省情况不显示提供给答的服务器的源地址和端口号。

+[no]comments

转换输出中的注释行显示。缺省值是显示注释。

+[no]stats

该查询选项设定显示统计信息:查询进行时,应答的大小等等。缺省显示查询统计信息。

+[no]qr

显示 [不显示] 发送的查询请求。缺省不显示。

+[no]question

当返回应答时,显示 [不显示] 查询请求的问题部分。缺省作为注释显示问题部分。

+[no]answer

显示 [不显示] 应答的回答部分。缺省显示。

+[no]authority

显示 [不显示] 应答的权限部分。缺省显示。

+[no]additional

显示 [不显示] 应答的附加部分。缺省显示。

+[no]all

配置或清除任何显示标志。

+time=T

为查询配置超时时间为 T 秒。缺省是5秒。假如将 T 配置为小于1的数,则以1秒作为查询超时时间。

+tries=A

配置向服务器发送 UDP 查询请求的重试次数为 A,代替缺省的 3 次。假如把 A 小于或等于 0,则采用 1 为重试次数。

+ndots=D

出于完全考虑,配置必须出现在名称 D 的点数。缺省值是使用在 /etc/resolv.conf 中的 ndots 语句定义的,或是 1,假如没有 ndots 语句的话。带更少点数的名称被解释为相对名称,并通过搜索列表中的域或文档 /etc/resolv.conf 中的域伪指令进行搜索。

+bufsize=B

配置使用 EDNS0 的 UDP 消息缓冲区大小为 B 字节。缓冲区的最大值和最小值分别为 65535 和 0。超出这个范围的值自动舍入到最近的有效值。

+[no]multiline

以周详的多行格式显示类似 SOA 的记录,并附带可读注释。缺省值是每单个行上显示一条记录,以便于电脑解析 dig 的输出。

多条查询

dig 的 BIND9 支持在命令行上指定多个查询(支持 -f 批处理文档选项的附加功能)。每条查询能够使用自己的标志位、选项和查询选项。

在这种情况下,在上面描述的命令行语法中,每条查询自变量代表一个个别查询。每一条由任意标准选项和标志、待查询名称、可选查询类型和类连同任何适用于该查询的查询选项。

也能够使用对任何查询均有效的查询选项全局集合。全局查询选项必须位于命令行上第一个名称、类、类型、选项、标志和查询选项的元组之前。任何全局查询选项(除了 +[no]cmd 选项)能够被下面的查询特别选项重设。例如:

dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr显示 dig 如何从命令行出发进行三个查询:一个针对 www.isc.org的任意查询、一个 127.0.0.1 的逆向查询,连同一个 isc.org 的 NS 记录查询。应用了 +qr 的全局查询选项,以便 dig 显示进行每条查询的初始查询。最后那个查询有一个本地查询选项 +noqr,表示 dig 在搜索 isc.org 的 NS 记录时不显示初始查询。

示例

一个典型的 dig 调用类似:

dig @server name type其中:

server

待查询名称服务器的名称或 IP 地址。能够是用点分隔的 IPv4 地址或用冒号分隔的 IPv6 地址。当由主机提供服务器参数时,dig 在查询域名服务器前先解析那个名称。假如没有服务器参数能够提供,dig 参考 /etc/resolv.conf,然后查询列举在那里的域名服务器。显示来自域名服务器的应答。

name

将要查询的资源记录的名称。

type

显示所需的查询类型 - ANY、A、MX、SIG,连同任何有效查询类型等。假如不提供任何类型参数,dig 将对纪录 A 执行查询。

时间: 2024-08-08 14:48:05

ping域名和ping IP时速度不同的原因的相关文章

[case分享]在多AD站点环境,为什么客户端ping 域名获取的IP是飘动的

环境: 域名:contoso.com BJ站点dc:10.1.0.1  10.1.0.2         站点子网:10.1.0.0/16 GD站点dc:10.2.0.1  10.2.0.2       站点子网:10.2.0.0/16 SC站点dc:10.3.0.1    10.3.0.1      站点子网:10.3.0.0/16 其他站点子网就不多说了. 故障问题描述: BJ站点客户端IP:10.1.30.21,在客户端ping contoso.com,获取的DNS IP(不断刷新ipco

公司网络能ping通ip,不能ping域名

第一天去公司,就因为网络问题弄了大半天.只能ping通ip,不能ping域名.网上查了各种方式都不行,刷新dns缓存.说是什么域名解析问题.dns的问题.公司里好几个人都看了看不能解决.领导让重装系统,等了十几分钟,装完了,还是不行.最后的解决办法是:换了个ip就行了.比如本来这个位置上的ip是192.168.161.126该为192.168.161.127竟然成功了.但是还是不知道为什么,求大牛指点. 2017-03-21  23:12:57

mac ping: sendto: Host is down PING不通别人的ip,可以ping通路由器  

mac ping: sendto: Host is down PING不通别人的ip,可以ping通路由器 PING 192.168.1.131 (192.168.1.131): 56 data bytesRequest timeout for icmp_seq 0Request timeout for icmp_seq 1Request timeout for icmp_seq 2Request timeout for icmp_seq 3ping: sendto: No route to h

Windows下ping域名找不到主机

在Windows下ping域名找不到主机的解决办法. 首先先确定是否是网络问题,ping下路由的网关,或者其他ip. 查看域名系统用nslookup是否正常,在查看hosts文件是否被更改,C:\windows\system32\drivers\etc\hosts.如果被更该需要复制一份别人的做替换. 最后在cmd下清理DNS的缓存,ipconfig /flushdns,重置winsock目录,netsh winsock reset,重启计算机即可.

解决linux下内网域名的ping结果和nslookup结果不一致

今天在linux服务器下遇到一个奇怪的问题:内网域名的ping结果居然和nslookup结果不一致,特将解决过程记录如下. 确认/etc/resolv.conf配置是否正确:没问题: 确认/etc/hosts中是否添加了额外域名:没问题: 确认域名服务器中正确的内网域名对应的IP,并和同事确认发现内网域名更新过,ping的结果指向了旧的IP,nslookup的解析结果正确: 确认本地域名缓存服务nscd状态:处于运行中,重启没有解决问题,看起来缓存还是很顽固的: # service nscd s

用shell脚本批量ping域名

此脚本实现的功能是批量ping域名,将能ping通的和不能ping通的分类,并记录能ping通的域名的相应解析地址 #!/bin/bash #判断第一个参数是否是文件,不是则退出 if [[ -f $1 ]];then do_name=(`cat $1`) else echo "$1文件不存在" exit 1 fi #设置ping的包个数 package_num=2 echo -e "解析地址\t\t域名">>res_ok.txt echo "

Python: ping网段内所有ip并返回结果

今天用Python写了一段小代码,实现的功能是ping某一个网段的所有ip,然后将ping的结果提取出来,输出可以ping通的ip以及往返时间. 初学Python,写得简陋,各位大侠多多指教. 正则表达式请根据自己的系统进行调整,我这个是中文win7下的结果 Python3.3下测试没问题 ping测试的过程中内存占用较大,不知道可以怎么改进 __author__ = 'wucl' import subprocess, re, _thread, queue, time, threading pr

同一域名对应多个IP时,PHP获取远程网页内容的函数

同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389/] PHP获取远程网页内容有多种方式,例如用自带的file_get_contents.fopen等函数. 引用 <?php echo file_get_contents("http://blog.zyan.cc/abc.php"); ?> 但是,在DNS轮询等负载均衡中,同一

函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容

<?php /************************ * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 * 创建时间:2008-12-09 * 创建人:张宴(img.jb51.net) * 参数说明: * $ip 服务器的IP地址 * $host 服务器的host名称 * $url 服务器的URL地址(不含域名) * 返回值: * 获取到的远程网页内容 * false 访问远程网页失败 ************************/ function HttpVi