NAT原理分类和STUN在SIP中的工作原理及过程

NAT原理分类    转自::http://blog.csdn.net/wcl0715/article/details/676070

  

1、NAT

       NAT是Net Address Translation 的缩写,从名字也可以看出,它是负责网络地址转换的一个协议。通俗的说,它负责把私网内的的IP和端口转换成公网的IP和端口,也即使我们通常所说的IP地址影射。例如:公司内一般有一个私网,假设为10.1.1.1网段。公司通过一个公网服务器(机器A)接入Internet,此服务器内网IP为10.1.1.1,外网为220.220.1.6。私网内的机器B 10.1.1.102打开自己的88端口想连接公网的一台WEB服务器C,假设IP为:204.56.43.8,端口为80。过程如下:

        step1: B (10.1.1.102:88->204.56.43.8:80)将数据包发送给网关A (10.1.1.1)

        step2: A   将(10.1.1.102:88)数据包的地址更换为服务器外网IP,并分配一个的端口(如何分配端口方法是不同的,以后会详细的说),假设为200,数据包也就变成了(220.220.1.6:200->204.56.43.8:80),服务器A将数据发送出去

        step3: C 将响应数据发送给网络服务器 A (204.56.43.8:80->220.220.1.6:200)

        step4:  A将C返回的响应数据报的IP地址的目的IP和端口做如下修改:(204.56.43.8:80-> 10.1.1.102:88)然后把数据发送出去

        step5:  B接收到C的响应数据。

       这个过程实际上也是NAT的工作过程,在B角度,B完全感受不到自己是在内网,它似乎有在公网一样的权利,这也就是NAT的优点所在:用同一个IP实现多个用户的Internet接入。

       2、防火墙

       刚读大学,第一次装防火墙软家的时候觉得这东西真***神秘,咋做的呢,呵呵。

       防火墙是通过管理网络端口的方法来拒绝和允许网络连接,这些拒绝或允许的原则由firewall的设计者来指定,并没有统一的标准,但防火墙大多都遵循以下几个原则:

       (1)允许内部向外部发送数据包

       (2)拒绝一切外部向内部的主动连接

       (3)允许本地发起的,符合firewall规则的外部数据包穿过firewall

       在第三条中,firewall的规则通常有以下两种:1、返回的数据包的源IP必须是内部发起的目的IP。2、返回的数据包的源IP必须是内部发起的目的IP并且返回的数据包的源端口必须是内部发起的目的端口。

       3、防火墙和NAT

       很多人把防火墙的概念混为一谈,其实NAT就是NAT,它负责IP地址影射。防火墙就是防火墙,它负责数据包的过滤。但为什么会有N多人分不清楚呢?原因很简单,是因为NAT的功能有了变化。为什么要变换呢?是因为NAT碰到了问题。为什么NAT会碰到问题呢?是因为#·#—……#¥。

       还是通过上面NAT的来说。假设C向B发送数据的过程中,C的另外一个端口100,也想向B发送数据包,那么当这个包到达A的时候A如何处理呢?过还是不过呢?如果过了,那么从另外一个IP到达A的数据包是否也允许过呢?显然在网络安全日益受到威胁的今天,让这些包通过是危险的。所以NAT决定不让这些包通过,也就是说NAT有了包过滤功能。于是:

      firewall:NAT,包过滤是我的事情,你多管什么闲事?(有没有核武器是我的事,你管得着吗?)

      NAT:让这些包通过不安全,所以我必须过滤这些数据包(伊朗有核武器,是个威胁,我必须干掉它)。

     firewall:那你是NAT啊你还是防火墙?(那你的主权,人权和和平自由呢?)

     NAT:(咬牙状)我是有部分防火墙功能的NAT,你咋地?(我想干啥干啥,你管得找吗?)

     firewall:.......(什么东西啊,整个一个杂种,还美呢)

      (其实,从概念上将,并不能这么说,但是便于理解,也没有什么深究的必要,就这么着吧)

     4、NAT分类

     NAT根据原理可以分成两类:锥型NAT和对称NAT

      (1)锥型NAT。还用上面的例子来说,在锥型NAT中,B的同一个端口去连世界上任何一台人类计算机的任何端口(日本除外),它在服务器A中得到的外部影射端口都是同一个。也就是说,在服务器A,它只有一个出口,假设为5060,而目的地却有很多,如果服务器的端口是一个平面,而所有计算机的端口在另外一个平面上的一个圆环之内,并且这两个面是平行的,那么将这些连写用线连起来,就构成了一个圆锥。这也就是cone的由来:锥。

      还记得刚才我们说的带防火墙功能的NAT,把防火墙功能加到cone类型的NAT中,就产生了三种不同的NAT:

       1。不对包进行过滤,任何包都可以通过服务器A的5060端口到达B full cone

       2。只要IP符合规则就可以到达B restrict cone

       3。IP和端口都要符合规才能到达B port restrict cone

       (说明:关于restrict cone,port restrict cone以前有位专家级别的人物说我弄反了,我也懒得去查,因为我有自己的理解,我觉得如果我理解错了,那么这个命名就有问题。)

      (2)对称NAT

       在对称NAT中,当B的同一个端口访问外部的IPC的不同端口的时候,A机器都会打开一个不同的外部端口来连接这C的不同端口。从C机器的端口来说,每一个端口在机器A中都有一个端口与之对应,这也就是对称NAT名称的由来:对称。

       对称NAT是很霸道的NAT,当数据包到达A的时候,必须IP和PORT都符合规则,数据包才允许通过。不仔细考虑,你可能觉得没什么,和port restrict cone一样啊,没什么特别,可是,你再和NAT的端口对称联系起来,这个东西就很恐怖了。因为它意味着:一旦一个端口在A打开了,那么这个连接也就确立了B:PORT->A:port->C:port的连接,无论何重情况下,这个连接都不可能被第三者使用。也就是说,一旦A上产生了一个端口,那么第一个知道这个端口的人一定会立刻拥有这个端口的终生使用权,而别人都没办法知道或者使用(除非A或者C告诉别人,但是告诉了也没用,你也使用不了,因为这个连接对别人来说,已经死了)。这也就是STUN对对称NAT无能为力的原因。因为STUN一旦检测到这个端口,那么它就拥有了这个端口的永久使用权,并且没有办法转让(这要是PLMM多好啊,谁发现是谁的,真好!公产主义来了么?天亮了,起床了),而这不是STUN想要的。

      以上也就构成了RFC中的四种NAT类型。希望我说的你都理解了(理解了就顶吧,呵呵)。


NAT、防火墙的原理区别和分类 转自:http://blog.csdn.net/wcl0715/article/details/676070

 1、NAT

       NAT是Net Address Translation 的缩写,从名字也可以看出,它是负责网络地址转换的一个协议。通俗的说,它负责把私网内的的IP和端口转换成公网的IP和端口,也即使我们通常所说的IP地址影射。例如:公司内一般有一个私网,假设为10.1.1.1网段。公司通过一个公网服务器(机器A)接入Internet,此服务器内网IP为10.1.1.1,外网为220.220.1.6。私网内的机器B 10.1.1.102打开自己的88端口想连接公网的一台WEB服务器C,假设IP为:204.56.43.8,端口为80。过程如下:

        step1: B (10.1.1.102:88->204.56.43.8:80)将数据包发送给网关A (10.1.1.1)

        step2: A   将(10.1.1.102:88)数据包的地址更换为服务器外网IP,并分配一个的端口(如何分配端口方法是不同的,以后会详细的说),假设为200,数据包也就变成了(220.220.1.6:200->204.56.43.8:80),服务器A将数据发送出去

        step3: C 将响应数据发送给网络服务器 A (204.56.43.8:80->220.220.1.6:200)

        step4:  A将C返回的响应数据报的IP地址的目的IP和端口做如下修改:(204.56.43.8:80-> 10.1.1.102:88)然后把数据发送出去

        step5:  B接收到C的响应数据。

       这个过程实际上也是NAT的工作过程,在B角度,B完全感受不到自己是在内网,它似乎有在公网一样的权利,这也就是NAT的优点所在:用同一个IP实现多个用户的Internet接入。

       2、防火墙

       刚读大学,第一次装防火墙软家的时候觉得这东西真***神秘,咋做的呢,呵呵。

       防火墙是通过管理网络端口的方法来拒绝和允许网络连接,这些拒绝或允许的原则由firewall的设计者来指定,并没有统一的标准,但防火墙大多都遵循以下几个原则:

       (1)允许内部向外部发送数据包

       (2)拒绝一切外部向内部的主动连接

       (3)允许本地发起的,符合firewall规则的外部数据包穿过firewall

       在第三条中,firewall的规则通常有以下两种:1、返回的数据包的源IP必须是内部发起的目的IP。2、返回的数据包的源IP必须是内部发起的目的IP并且返回的数据包的源端口必须是内部发起的目的端口。

       3、防火墙和NAT

       很多人把防火墙的概念混为一谈,其实NAT就是NAT,它负责IP地址影射。防火墙就是防火墙,它负责数据包的过滤。但为什么会有N多人分不清楚呢?原因很简单,是因为NAT的功能有了变化。为什么要变换呢?是因为NAT碰到了问题。为什么NAT会碰到问题呢?是因为#·#—……#¥。

       还是通过上面NAT的来说。假设C向B发送数据的过程中,C的另外一个端口100,也想向B发送数据包,那么当这个包到达A的时候A如何处理呢?过还是不过呢?如果过了,那么从另外一个IP到达A的数据包是否也允许过呢?显然在网络安全日益受到威胁的今天,让这些包通过是危险的。所以NAT决定不让这些包通过,也就是说NAT有了包过滤功能。于是:

      firewall:NAT,包过滤是我的事情,你多管什么闲事?(有没有核武器是我的事,你管得着吗?)

      NAT:让这些包通过不安全,所以我必须过滤这些数据包(伊朗有核武器,是个威胁,我必须干掉它)。

     firewall:那你是NAT啊你还是防火墙?(那你的主权,人权和和平自由呢?)

     NAT:(咬牙状)我是有部分防火墙功能的NAT,你咋地?(我想干啥干啥,你管得找吗?)

     firewall:.......(什么东西啊,整个一个杂种,还美呢)

      (其实,从概念上将,并不能这么说,但是便于理解,也没有什么深究的必要,就这么着吧)

     4、NAT分类

     NAT根据原理可以分成两类:锥型NAT和对称NAT

      (1)锥型NAT。还用上面的例子来说,在锥型NAT中,B的同一个端口去连世界上任何一台人类计算机的任何端口(日本除外),它在服务器A中得到的外部影射端口都是同一个。也就是说,在服务器A,它只有一个出口,假设为5060,而目的地却有很多,如果服务器的端口是一个平面,而所有计算机的端口在另外一个平面上的一个圆环之内,并且这两个面是平行的,那么将这些连写用线连起来,就构成了一个圆锥。这也就是cone的由来:锥。

      还记得刚才我们说的带防火墙功能的NAT,把防火墙功能加到cone类型的NAT中,就产生了三种不同的NAT:

       1。不对包进行过滤,任何包都可以通过服务器A的5060端口到达B full cone

       2。只要IP符合规则就可以到达B restrict cone

       3。IP和端口都要符合规才能到达B port restrict cone

       (说明:关于restrict cone,port restrict cone以前有位专家级别的人物说我弄反了,我也懒得去查,因为我有自己的理解,我觉得如果我理解错了,那么这个命名就有问题。)

      (2)对称NAT

       在对称NAT中,当B的同一个端口访问外部的IPC的不同端口的时候,A机器都会打开一个不同的外部端口来连接这C的不同端口。从C机器的端口来说,每一个端口在机器A中都有一个端口与之对应,这也就是对称NAT名称的由来:对称。

       对称NAT是很霸道的NAT,当数据包到达A的时候,必须IP和PORT都符合规则,数据包才允许通过。不仔细考虑,你可能觉得没什么,和port restrict cone一样啊,没什么特别,可是,你再和NAT的端口对称联系起来,这个东西就很恐怖了。因为它意味着:一旦一个端口在A打开了,那么这个连接也就确立了B:PORT->A:port->C:port的连接,无论何重情况下,这个连接都不可能被第三者使用。也就是说,一旦A上产生了一个端口,那么第一个知道这个端口的人一定会立刻拥有这个端口的终生使用权,而别人都没办法知道或者使用(除非A或者C告诉别人,但是告诉了也没用,你也使用不了,因为这个连接对别人来说,已经死了)。这也就是STUN对对称NAT无能为力的原因。因为STUN一旦检测到这个端口,那么它就拥有了这个端口的永久使用权,并且没有办法转让(这要是PLMM多好啊,谁发现是谁的,真好!公产主义来了么?天亮了,起床了),而这不是STUN想要的。

      以上也就构成了RFC中的四种NAT类型。希望我说的你都理解了(理解了就顶吧,呵呵)。


STUN在SIP中的工作原理及过程 转自:http://blog.csdn.net/wcl0715/article/details/677331


  STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在ANT穿透中占有一席之地。

       STUN的探测过程需要有一个公网IP的STUN server,在NAT后面的UAC必须和此server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网IP,PORT等等。UAC通过是否得到这个UDP包和包中的数据判断自己的NAT类型。

       假设有如下UAC(B),NAT(A),SERVER(C),UAC的IP为IPB,NAT的IP为 IPA ,SERVER的 IP为IPC1 、IPC2。请注意,服务器C有两个IP,后面你会理解为什么需要两个IP。 

       (1)NAT的探测过程:(吃个芒果先,呵呵,老妈给的)


        STEP1:B向C的IP1的pot1端口发送一个UDP包。C收到这个包后,会把它收到包的源IP和port写到UDP包中,然后把此包通过IP1和port1发还给B。这个IP和port也就是NAT的外网IP和port(如果你不理解,那么请你去看我的BLOG里面的NAT的原理和分类),也就是说你在STEP1中就得到了NAT的外网IP。

        熟悉NAT工作原理的朋友可以知道,C返回给B的这个UDP包B一定收到(如果你不知道,去读下我的其它文章)。如果在你的应用中,向一个STUN服务器发送数据包后,你没有收到STUN的任何回应包,那只有两种可能:1、STUN服务器不存在,或者你弄错了port。2、你的NAT拒绝一切UDP包从外部向内部通过(我们公司的NAT就是)。

       当B收到此UDP后,把此UDP中的IP和自己的IP做比较,如果是一样的,就说明自己是在公网,下步NAT将去探测防火墙类型,我不想多说。如果不一样,说明有NAT的存在,系统进行STEP2的操作。

       STEP2:B向C的IP1发送一个UDP包,请求C通过另外一个IP2和PORT(不同与SETP1的IP1)向B返回一个UDP数据包(现在知道为什么C要有两个IP了吧,虽然还不理解为什么,呵呵)。

       我们来分析一下,如果B收到了这个数据包,那说明什么?说明NAT来着不拒,不对数据包进行任何过滤,这也就是STUN标准中的full cone NAT。遗憾的是,full cone nat太少了,这也意味着你能收到这个数据包的可能性不大。如果没收到,那么系统进行STEP3的操作。

       STEP3:B向C的IP2的port2发送一个数据包,C收到数据包后,把它收到包的源IP和port写到UDP包中,然后通过自己的IP2和port2把此包发还给B。

       和step1一样,B肯定能收到这个回应UDP包。此包中的port是我们最关心的数据,下面我们来分析:

        如果这个port和step1中的port一样,那么可以肯定这个NAT是个CONE NAT,否则是对称NAT。道理很简单:根据对称NAT的规则,当目的地址的IP和port有任何一个改变,那么NAT都会重新分配一个port使用,而在step3中,和step1对应,我们改变了IP和port。因此,如果是对称NAT,那这两个port肯定是不同的。

       如果在你的应用中,到此步的时候PORT是不同的,恭喜你,你的STUN已经死了。如果不同,那么只剩下了restrict cone 和port restrict cone。系统用step4探测是是那一种。

       STEP4:B向C的IP2的一个端口PD发送一个数据请求包,要求C用IP2和不同于PD的port返回一个数据包给B。

      我们来分析结果:如果B收到了,那也就意味着只要IP相同,即使port不同,NAT也允许UDP包通过。显然这是restrict cone NAT。如果没收到,没别的好说,port restrict  NAT.

      (2)SIP怎么使用STUN

       个人认为这是个很不值得提的问题,不过有许多人问我,还是简要提一下。其实这是个很简单的问题,SIP通过STUN得到NAT的外网IP和SIP的信令监听端口的外网port,替换SIP注册包中的contact头中的IP和port,然后注册。这样就可以确保当有人呼叫你的的时候注册服务器能找到你。需要提醒你的是,NAT发现一个连接超过一段时间后没有活动,它就会关闭这个影射,因此你必须间隔一端时间发送一个数据包出去以keep alive。

        另外,当你要和别人建立RTP通讯的时候,不要忘记把你的SDP中的IP和PORT改成公网IP和PORT。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值