RFC3581-关于rport字段 的阅读笔记
来源:互联网 发布:南昌金域名都房价 编辑:程序博客网 时间:2024/05/18 00:39
1. 背景:
SIP提供给客户端服务器收到来自客户端请求的IP地址,这个源IP地址被放在”received”参数中传送,它 放
于响应的顶端头字段中。对NAT穿越有很大作用。
但有很多情况下,仅一个ip地址信息还不够,还有需要端口信息。于是有了第二步扩展,也可以称作平完善。
2. 引出讨论主题:在via头字段中增加了一个新的参数”rport”,它允许服务器回应客户端到源ip和端口,类
似 于”received”,只是它包括的是端口,而received包括的是ip地址。
3. 客户端行为
1) 客户端可以包含”rport”参数,但它一定没有值 ,作为一个标志,来向服务器表明这种扩展在传送数据
的过程中是被支持的。
2) Keep binding fresh
UDP NAT绑定的超时时间是一分钟,然而,INVITE传送可能会花费大量的时间去完成,结果可能会导致
回应被收到前绑定过期,为了保证绑定新鲜,客户端每20S左右重传一次INVITE消息。
3) 重传周期问题
如果NAT绑定周期大于1分钟,则客户端的请求重传间隔应增大至其一半;
如果NAT绑定周期小于1分钟,则客户端的请求重传间隔应减小至其一半。
4. 服务器端行为:
端口号赋值给”rport”,这类似于”received”参数赋值,即使”sent-by”中包括ip。注意这一处理完全独立于
传输协议。
服务器端的回应必须从收到请求的ip和port发送以穿越对称的NATS,当一个服务器正在多个端口或者接口
上监听请求时,它需要记住某个请求是从哪个端口收到的。这对于有状态的代理来说,事务期间存储此信
息不成问题。然而,一个无状态代理并不能存储请求和响应之间的状态信息,因此不能记住所收到请求的ip
和port,但为了实现此功能,无状态代理可以封装一个请求的目的地址和port到它所插入的via头字段中。当
一个响应到达时,它可以提取此信息并用它来发送回应。
5. 举例
一个客户端要发送一个INVITE消息到一个代理服务器,部分消息如下:
INVITE sip:user@example.com SIP/2.0
Via: SIP/2.0/UDP 10.1.1.1:4540;rport;branch=z9hG4bKkjshdyff
这个INVITE消息发送的源端口号是4050,IP是10.1.1.1。这个代理服务器正在IP为192.0.2.2端口为5060和5070的
地址上监听请求。由于此请求穿过NAT到代理服务器,因此源IP显示的是192.0.2.1,端口号是9988。此代理
服务器转发此请求,但必须先追加给”rport”参数一个值,代理要转发的请求如下:
INVITE sip:user@example.com SIP/2.0
Via: SIP/2.0/UDP proxy.example.com;branch=z9hG4bKkjsh77
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988;branch=z9hG4bKkjshdyff
上面请求产生的到达代理的响应如下:
SIP/2.0 200 OK
Via: SIP/2.0/UDP proxy.example.com;branch=z9hG4bKkjsh77
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988;branch=z9hG4bKkjshdyff
此代理提取它的via头字段的值,一个一个地检查。它包括了”reveived”参数和”rport”参数。这个服务器按照规
则发送响应到ip为192.0.2.1,port为9988的地址上,并且是必须是从proxy上的192.0.2.2:5060发送的。
Via: SIP/2.0/UDP 10.1.1.1:4540;received=192.0.2.1;rport=9988可看作是NAT两侧的ip和port的一个绑定,即
10.1.1.1:4540(内网地址)与192.0.2.1:9988(外网地址)的一个绑定。这样当响应到达NAT的外网地址
192.0.2.1:9988时,NAT可以改写目的地址为与之对应的内网地址10.1.1.1:4540,客户端正在用此地址监听响
应信息,从而客户端最终可收到此响应。
6. 抓包实例:
[15:21:41] ===SIPTransaction Received SIP message (428 bytes) from 222.210.226.30:1068
REGISTER sip:sip1.tv.qualvideo.net SIP/2.0
Via: SIP/2.0/UDP 192.168.1.102:15060;rport;branch=z9hG4bK1041051991
注:客户端发送请求时,rport的值必为空。[15:21:41] ===SIPTransaction Send SIP message (610 bytes) to 222.210.226.30:1068
SIP/2.0 401 Unauthorized
Via:SIP/2.0/UDP 192.168.1.102:15060;rport=1068;branch=z9hG4bK1041051991;received=222.210.226.30
注:服务器回应时给”rport”,” received”赋值。
From : http://hi.baidu.com/caoyaping/blog/item/aa25bd08998f23980a7b82d8.html
http://hi.baidu.com/caoyaping/blog/item/18f15c6e724e6fd781cb4ad8.html
- RFC3581-关于rport字段 的阅读笔记
- RFC3581-关于rport字段 的阅读笔记(一)
- RFC3581-关于rport字段 的阅读笔记(二)
- RFC3581——SIP中的rport机制
- RFC3581——SIP中的rport机制
- RFC3581——SIP中的rport机制
- RFC3581——SIP中的rport机制
- RFC3581——SIP中的rport机制
- RFC3581——SIP中的rport机制
- RFC3581——SIP中的rport机制(一)
- 关于android的阅读笔记--01
- 关于 AlphaGo 论文的阅读笔记
- 关于剑指offer的阅读笔记
- 关于阅读EOC的一些笔记
- SIP穿越NAT的rport机制
- SIP穿越NAT的rport机制
- SIP穿越NAT的rport机制
- SIP穿越NAT的rport机制
- linux挂载NTFS格式硬盘
- 谁让披着假发的女人在婚姻中折腾
- invite与register中call-Id的区别
- directX编译连接错误 error C2146: syntax error : missing ';' before identifier 'PVOID64'
- 为宽带网络提速 自制本地DNS服务器
- RFC3581-关于rport字段 的阅读笔记
- SDI或MDI中获得某个文档模板的视图
- 分析uboot是如何启动内核的
- 关于互联网产品设计的10个建议
- DirectX链接错误fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
- explorer.exe崩溃后恢复托盘图标
- 新年好!!
- VC解析XML--使用CMarkup类解析XML .
- MyISAM InnoDB 区别