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类型。希望我说的你都理解了(理解了就顶吧,呵呵)。