1、调试与排错 1.1 解决问题的一般方法和流程 解决问题一般要经过以下几个步骤:发现问题、定位问题、分析问题、解决问题。下面以一个例子来简单的说明,目的就是教会大家如何发现并准确地定位问题。 假设我们遇到这样的一个问题:Alice向我们报告说,她通过Freeswitch呼叫Bob,能呼通,但没有声音。 在这里,有两个问题是很值得考虑的: 1.核实问题的现象:有时候问题的实际现象Alice可能描述不清楚,或者可能跟她描述的完全不一样。 2.问题能否重现:如果一个问题总是能重现,那么一般是比较容易解决的。最难解决的问题就是不能重现的问题,或者不知道什么时候能重现的问题。 在发现问题后,就要尝试定位问题。一般建议使用“分段法”和“换位思考法”来定位问题。所谓分段法,就是一个问题可能涉及很多环节,我们首先要把这些环节从逻辑上和功能上分开,一段一段地检查。所谓换位思考法,结合例子,如果Alice打给Bob没有声音,那么,Bob打给Alice有没有声音?能不能把Alice和Bob的话机对调一下再试一次?或者Alice或Bob换其他的话机试试。 当上面这些方法找不到具体原因时,就考虑用分段法。如首先让Alice拨打默认的9196,看能否听到自己的声音。9196是默认的回音测试功能,如果打9196都听不到声音,就要先解决Alice打9196的问题。 首先建议关掉防火墙,确认防火墙关闭后,可以通过抓包看有没有RTP流到达或从服务器发出。Wireshark抓包知识后面讲。 2、查看日志 在有些情况下,呼叫可能直接不通,即无法正常建立呼叫。这时候就需要我们查看系统的日志。 在日志中,“警告(WARNING)”和“错误(ERROR)”是级别比较高的日志,“调试(DEBUG)”是级别比较低的日志,但其能显示更多的细节。 如果Alice发起呼叫后什么日志也不显示,那么肯定呼叫没有到达Freeswitch,此时应检查客户端是否配错了IP地址或防火墙是否有问题。入如果呼叫到达了,还是出错,查看是不是Dialplan设置的问题。另外,日志中一般有挂机的原因,比方说CALL_REJECTED代表呼叫被拒绝,可能是用户名或密码不对;USER_NOT_REGISTERED就说明Bob没有注册,因而呼叫无法继续进行。 3、使用外部工具抓包 1.tcpdump是经典的抓包工具,比如下面的命令可以抓取5060端口上的SIP包: # tcpdump -nq -s 0 -A -vvv -i eth0 port 5060 其中,-n、-q表示不进行域名翻译及减少输出内容;-s 0表示不限制包长,即争取抓最大的长度;-A表示以ASCII方式输出,这样用眼看起来比较直观;-v表示显示的详细程度,'v’越多则越详细;-i表示使用指定的网卡;port 5060表示过滤器,这里我们只关心5060端口上的SIP包。 另外,可以使用-w将结果写入文件中,如下列命令将结果写入/tmp/dump.pcap文件中: # tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap port 5060 当还需要分析RTP流时,可以将port 5060简单改成udp,这样可以抓取所有的UDP包: # tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap udp 如果你是在服务器上抓包,并只想抓取某个用户的包,可以根据用户的IP地址来进行过滤。当然这需要找到用户实际的IP地址,如用户的IP是192.168.200.10,端口号是65272: # tcpdump -s 0 -i eth0 -A host 192.168.200.10 and port 65272 有时候我们需要抓取所有的RTP包进行分析,在Freeswitch中默认的端口号范围是16384~32768,因此我们可以使用如下抓包命令: # tcpdump -i eth0 -w /tmp/sip-rtp.pcap “udp and (port 5060 or port 5080 or portrange16384~32768)” 4、使用Wireshark抓包并分析呼叫 Wireshark可以分析使用tcpdump或pcapsipdump抓下来的pcap包。 1、分析SIP包 首先我们先看SIP信令,我们可以在“Filter”一栏中输入“sip”,便可以显示所有的SIP包,如图一。 图一 使用了sip过滤器只显示SIP包 Wireshark有专门分析VoIPT通话的工具。在主菜单中,选择Telephony—VoIP Calls可以看到所有的VoIP呼叫,如图二。 图二 一路VoIP通话 此时,选择一路通话并单击Flow按钮,就可以看到详细的SIP呼叫流程,如图三。 图三 Wireshark中分析呼叫流程 2、分析RTP包 在Filter栏中输入RTP就可以看到所有的RTP包,详细的分析可以使用Telephony—Show All Streams显示所有的RTP流。如图四所示。 图四 一个呼叫的2路RTP流 单击分析就可以看到详细的RTP流分析。 |
|
来自: 草莓加冰 > 《Freeswitch》