我有一台笔记本电脑,我想针对 voip 应用程序进行优化。我遇到的问题是,连接到 localhost 的应用程序会遭受很大的延迟。当一个应用程序连接到同一台计算机上的另一个应用程序时,大约 2-3 秒内基本上什么都没有发生。这看起来像是“空闲”时间。我在 voip 论坛上提出了这个问题,其中一个答案是“正在使用的地址之一没有有效的反向 DNS,甚至没有从 DNS 服务器获得明确的“未知”响应”
ping localhost 返回 0.03ms - 不错
现在,当我在计算机连接到网络时挖掘 e330(本地主机)时,我得到:
dig e330
; <<>> DiG 9.8.1-P1 <<>> e330
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 46557
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;e330. IN A
;; AUTHORITY SECTION:
. 600 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2015012700 1800 900 604800 86400
;; Query time: 38 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jan 27 12:35:08 2015
;; MSG SIZE rcvd: 97
38毫秒看起来很糟糕。
然后我断开电脑与网络的连接,再次执行“dig e330”。这次查询时间:0 毫秒但是,我的笔记本电脑是否连接到网络并不重要。“空闲”时间大致相同。
从我读到的内容来看,我可以在笔记本电脑上配置 DNS 和 DHCP。但我不想让它作为服务器运行。它是一台笔记本电脑,它必须连接到任何地方的其他网络,而无需重新配置任何东西。
可以对“反向 DNS”做些什么?(我明白它是什么,但我不知道有什么可以解决它的方法)从 Linux 的角度来看,还有什么可以做的来加速 VOIP 应用程序的网络接口吗?
Linux E330 3.13.11-03131111-通用#201411111336 SMP 2014 年 11 月 11 日星期二 18:55:51 UTC i686 i686 i386 GNU/Linux
答案1
我解决了这个问题。似乎每台 Ubuntu 机器上都是这样。至少在 12.04 上是这样的。
这是我调试该问题的方法:
- 我已经安装了 Asterisk、Linphone 和 Wireshark。我运行了它们全部。
- 我让 Wireshark 监听“lo”。Wireshark 中通常不会显示任何内容。
- 然后我打电话
hello world
给本地主机。我发现 Linphone 和 asterisk 之间的第一次通信发生在 0 秒,然后在 0.5 秒时发生了一些事情,然后是长时间的停顿,下一个数据包几乎是在 3 秒之后。这就是我的问题。
下面是我修复它的方法。它消除了长达 3 秒的延迟,尽管仍有 0.5 秒,我无法消除。
事实证明域名系统附带网络管理器通过询问远程 DNS 服务器(在我的情况下是 opendns)来解析本地主机。
我/etc/NetworkManager/NetworkManager.conf
注释掉了#dns=dnsmasq
然后
sudo service network-manager stop
sudo netstat -anlp | grep -w LISTEN
终止所有正在运行的 dnsmasq 进程
sudo apt-get install dnsmasq
然后配置 dnsmasq,确保/etc/dnsmasq.conf
你有
# Listen only on localhost
listen-address=127.0.0.1
bind-interfaces
就这样。你必须重新启动,我认为注销并登录也可以。
要查看您的系统当前是否正在使用 Dnsmasq,请运行
netstat -ulnp | grep ":53 "
你可以运行
sudo /etc/init.d/dnsmasq restart
看看是否没有收到任何错误。现在“dig localhost”需要 0 秒。
一些对我有帮助的链接: http://sokratisg.net/2012/03/31/ubuntu-precise-dnsmasq/
答案2
您看到的实际上是失败。它没有在本地得到答案,然后在线搜索,最后因为错误而放弃NXDOMAIN
。它花费了这么长时间,因为它正在查询本地网络之外的主要根服务器。
它看起来应该是这样的。这是我查询主机名时看到的内容:
oli@bert:~$ dig bert
; <<>> DiG 9.9.5-3ubuntu0.1-Ubuntu <<>> bert
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25238
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bert. IN A
;; Query time: 2 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Tue Jan 27 12:37:37 GMT 2015
;; MSG SIZE rcvd: 33
您会注意到没有任何root-servers.net
活动。
看起来你可能没有/etc/hosts
指定主机名的行。很容易修复,只需添加如下内容:
127.0.1.1 e330
然后dig e330
重试。