IMS中SIP的DNS查询过程

最近要做做系统测试,负载肯定比功能测试的要高,而且功能测试中的DNS查询一般都是本地查询,不需要额外的DNS服务器。

看网上用脚本写了DNS 模拟器,不太好用,当负载稍高些,这个模拟器就会挂掉,而且经常出现各种奇怪的问题。

所以就想能不能有一个稳定的,好用的DNS模拟器。研究发现LINUX系统里BIND架设的DNS就可以满足我的要求。

但是我的测试环境比较特殊,是对IMS网络中SIP消息涉及的DNS过程。

IMS URI主要有两种:TEL URI 和 SIP URI, 其中TEL URI不能再IMS里面路由,都需要转化成SIP URI. DNS的NAPTR查询会主动将TEL URI转换成SIP URI。

TEL URI, TEL就是telephone的缩写,就跟平时看见的一串数字的电话号码类似,分为国际号码和国内号码。国际号码前加国家码,国内号码在漫游时加地区码。

  • 国际号码的格式     tel:+862512345000。 +86表示中国的国家码
  • 国内号码的格式  tel:12345000;phone-context=+021。  phone-context=+021,表示上海的地区码

如果域名是tel格式,NAPTR查询会先将TEL URI转换成SIP URI,然后对获得的域名进行NAPTR查询,返回目标网元的新域名。

假设TEL号码为+86-021-12340000

TEL URI转换成SIP URI的过程如下:

  • 将TEL URI号码变成包含国家码或地区码的全码        +86-021-12340000
  • 去除首部的“+"和所有其他的非数字字符                     8602112340000
  • 在数字字符之间加上"."                                                   8.6.0.2.1.1.2.3.4.0.0.0.0
  • 将数字字符顺序翻转                                                      0.0.0.0.4.3.2.1.1.2.0.6.8 
  • 在翻转后的字符串后面加后缀"e164.arpa"                 0.0.0.0.4.3.2.1.1.2.0.6.8.e164.arpa 
SIP URI,采用的格式:”sip:+用户名/电话号码@域名/IP地址端口[:user=phone]“, user=phone表示被叫用户是一个电话用户。

如sip:smith@zte.com.cn

    sip:+862512345000@zte.com.cn

    sip: +86251234500@10.10.10.10:6000;user=phone


SIP消息涉及到的DNS过程主要包括两个方面:

  • 如何发送请求消息,发送方需要通过DNS过程得到传输层协议类型(TCP, UDP, SCTP),下一跳的IP和Port
  • 如何返回相应消息,需要决定上一跳的IP和Port。

实例:

如果向下一跳发送请求消息是sip:example.com或者是tel:+86-021-12340000

  • 对sip号码example.com进行NAPTR查询,获得传输层协议类型和获取目标网元的地址信息。对tel号码要先转换成0.0.0.0.4.3.2.1.1.2.0.6.8.e164.arpa,在进行NAPTR查询。
  • 对目标网元进行SRV查询,获得端口和目标网元的域名
  • 对目标网元的域名进行AAAAA查询,得到目标网元的IP地址

具体分析过程如下:

1. 对域名example.com进行NAPTR查询,返回多条记录,查询结果为:

                            order   pref    flags   service           regexp            replacement

IN         NAPTR    50       50       "s"    "SIPS+D2T"      ""             _sips._tcp.example.com.

IN         NAPTR    90       50       "s"    "SIP+D2T"      ""                _sip._tcp.example.com.

IN         NAPTR    100     50       "s"    "SIP+D2U"      ""               _sip._ucp.example.com.

IN         NAPTR     100    10       "u"    "SIP+E2U"      "!^.*$!sip:info@tele2.se!"          .

IN         NAPTR     102    10       "u"    "mailto+E2U"      "!^.*$!mailto:info@tele2.se!"      

*.e164.arpa.  NAPTR   10 100  "u"    "SIP+E2U"     "!^.*$!sip:info@sipp.com!"     

根据order和pref的数值,选择第一条记录,flags为s表示下一步进行SRV查询,service表示TCP作为传输层协议,用sips方式传输消息,replacement表示使用_sips._tcp.example.com.进行进一步的获取目标网元的地址信息。

flags为"u"表示regexp给出了替代规则,根据该规则和原来的域名得到新域名,service中的E2U表示从e.164(tel num)转换成SIP URI服务。


2.对NAPTR产生的新域名进行SRV查询,返回多条记录,查询结果为:

                  priority    weight    port                target

IN     SRV    0              1         5060        server1.example.com

IN     SRV    0             2          5060         server2.example.com

_sip._udp.sipp.com    IN   SRV  0  0   590    sipp.com.


根据priority和weight选择第一条记录,port表示使用5060,target表示目标网元的域名为server1.example.com

3.对SRV产生的新域名进行A或AAAA查询,得到目标网元的IP地址

IN      A      10.170.9.123

sipp.com  IN  A  192.30.0.120

到这里我们就得到了:  将请求消息sip:example.com或者tel:+86-021-12340000通过TCP方式传输,采用SIPS方式,发送的下一跳的IP:Port是  10.170.9.123:5060


如何发送响应消息,尤其是UAC发送完请求消息后发生故障无法接收响应消息?

主要是通过收到的上一跳的请求消息中的Top Via的IP, Port, Domain Name等来获得新的目标地址。

  • 有IP:Port,直接发送到该IP:Port
  • 有IP,无Port,使用NAPTR查询获得的传输协议的默认端口
  • 有domain name和port,对domain name进行A或AAAA查询获得的IP列表,对获得IP和port发送消息
  • 只有domain name,进行SRV查询获得Port,进行A或AAAA查询获得IP,向获得的IP和port发送响应消息



DNS服务器的原理及功能

  • DNS的配置和管理
  • DNS的应用

DNS查询有正向和反向查询,正向是将域名解析城IP地址。

DNS查询过程为:本地的/etc/hosts文件--->本地的DNS缓存---->本地局域网的DNS服务器----->迭代或递归查询公共DNS服务器。


/etc/hosts               ------- 主机名查询静态表,主要用于在局域网内使用,将主机名解析到对应的ip     

/etc/host.conf         ------- 定义查询的先后顺序,是先host还是dns server

/etc/resolv.conf      ------- 静态dns server

/etc/named.conf  -------- 静态dns zone的定义


vim /etc/named.conf

options {
	directory "/var/lib/named";        ### the name server's working directory
};
zone "." in {                              ###the root name servers
	type hint;
	file "root.hint";
};

zone "e164.arpa" in {
	type master;
	file "e164.arpa.zone";
};

zone "sipp.com" in {
	type master;
	file "sipp.com.zone";
};

vim /var/lib/named/e164.arpa.zone

$TTL 1W
@  IN SOA  @ root (42  2D  4H  6W  1W)
   IN NS .
*.9.9.9.e164.arpa. NAPTR  10 100   'u'    "SIP+E2U"    "!^.*$!sip:info@sipp.com!"      .


vim /var/lib/named/sipp.com.zone

@TTL 1W
@    IN    SOA   @     root (42  2D  4H  6W  1W)
     IN     NS    .
sipp.com    IN   A      172.30.0.120
_sip._udp.sipp.com   IN     SRV  0    0   5990     sipp.com.


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值