NAT技术与代理服务器

来源:互联网 发布:c语言新建文件步骤 编辑:程序博客网 时间:2024/06/05 18:29

一.NAT技术
NAT技术也叫网络地址转换技术,是一种私有地址转换成合法IP地址的技术,要了解他之前,首先得了解什么是私有地址,什么是合法IP地址,其次为什么要引入这样的技术。
①私有地址和合法IP地址
如果组建一个局域网,其中的IP地址仅用于局域网内部通信,而不能直接连到Internet外网上的话,那么这些IP地址就是局域网的私有IP地址,理论上所有IP地址均可作为私有IP地址,但是RFC1918规定私有IP地址不能出现在Internet上,所以规定了私有IP地址为以下三种:
10.*,前8位是网络号,共16777216个地址;
172.16.*到172.31.*,前12位是网络号,共1048576个地址;
192.168.*,前16位是网络号,共65536个地址
与私有IP地址相对的就是公有IP地址,也就是合法IP地址,是能够用在Internet上的,是唯一的
②为什么要引入NAT技术
由于IP地址数量有限,对于企业而言,向ISP申请IP地址,能够申请到的IP地址数目也远远满足不了网络用户的需求,所以在局域网内用户在向外网访问的时候,将其私有IP地址转换成一个合法的公有IP地址,通过这个IP地址来在外网上进行访问,而将私有IP地址转换成公有IP地址的技术就是NAT技术,而且在一定程度上,NAT技术对局域网内的主机与外网进行了分隔,保护了局域网内部的信息交互。

对于NAT技术,我们都知道在网络传输过程中数据包中会包含源IP地址和目的IP地址,它们俩在传输过程当中一般不会改变的,但在这里我们应用NAT技术就是要改变它们俩的其中之一满足我们的需求:
在数据包从局域网内部的某个主机上送至网关上时,会将数据包中的源IP地址替换成公有IP地址,然后转发给外网的某个服务器,而当服务器处理好服务,会向之前接收到的数据包中的源IP地址(也就是公有地址)发送数据包,而当它到达网关时,此时数据包中的目的IP地址又会被替换成局域网内发送请求的主机的私有IP地址,从而转发到目标主机上。

NAT技术类型:
①静态转换Static NAT:将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备的访问。
②动态转换Dynamic NAT: 将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。

前面两种转换私有IP地址在访问外网时,都会被分配一个公有IP地址,只不过第一种是私有IP地址与公有IP地址是永久对应的,而第二种则是临时分配给这个静态IP地址的,用户断开后这个公有IP地址就会被释放,后面别的私有IP地址也可以和它匹配,到了这里似乎我们发现当同时一个局域网内有多个主机进行访问,而公有IP数目不够时,似乎无法进行同时访问,而要实现这一点,就要用下面这种NAT技术:

③端口多路复用OverLoad:这种NAT技术是应用最多的,它在私有IP进行访问时,NAT服务器会提供一个未被使用的端口,将以公有IP地址:端口号的形式替换数据包中的目的IP地址(私有IP地址:端口号),而在服务器响应发送回数据包后,又会将目的地址用私有IP地址:端口号替换公有IP地址:端口号;所以只要NAT服务器还有未被使用的端口号,那么就可以实现局域网内的不同主机同时访问外网
http://blog.sina.com.cn/s/blog_9d386e13010175rq.html

这里提到了端口号,其实在网络当中,IP地址+端口号才能标识网络服务当中唯一的特定主机的网络进程,这也就是我们的套接字。
至于端口号,在网络当中主要分为两类:物理端口(硬端口)和逻辑端口(软端口)
所谓硬端口就是我们经常能看到的各种设备上真实存在的端口,而软端口则是逻辑意义上用于区分服务的端口,它们是供各种应用程序使用进行各种服务的不存在于真实的某个设备上,但能被应用程序识别的,为了区分这些端口,我们将这些端口进行编号,这也就是我们前面所说的端口号,都是这些软端口的编号。
一台计算机上的有效端口号最多到65535,而我们对这些端口又大致进行了如下划分:0~1023为公认端口,它们一般与我们的常见服务进行绑定(如21对应ftp服务,22对应SSH服务,80对应http服务,443对应https服务);1024~49151为注册端口,这些端口松散的绑定某些服务,但同样也可以用于其他目的;49152及以上为动态端口也叫私有端口,可以用于任意应用软件与其他应用软件进行通信,使用TCP/UDP协议
至于常见的服务与端口号之间的对应关系,可以在/etc/services文件中查找
http://www.cnblogs.com/kerrycode/p/5609010.html


二.代理服务器
对于局域网内的私有IP地址的主机,想要访问外网,除了使用工作在网络层的NAT技术,也可以使用工作在应用层的代理服务器,典型的有Http代理,Socks代理,VPN代理

举个简单的例子,“翻墙”这个技术就是利用了代理服务器这一技术,对于国内的用户而言,出于某些原因,国内的IP用户是无法访问到像美国的某些网站Google,Facebook等,但是通过代理服务器,我们可以绕过这些限制进行访问,大致原理如下:
假如国内的某台主机想要登上Google主页,直接访问显然是不可以的,但是通过代理服务器,可以轻松解决这个问题:
首先在代理服务器正常工作的状况下,代理服务器主进程会监听与它绑定的客户端主机发送的请求,当由我们的主机发送访问Google主页的请求给代理服务器时,我们的代理服务器会创建一个子进程,由这个子进程来应对客户端主机所发送的请求(为什么要创建子进程,其实很简单,我们的代理服务器总不会只给一台主机服务吧),父进程继续负责监听;而接下来子进程的操作就是分析客户端主机所发送过来的请求,然后依照代理服务器上事先预设的访问规则列表,检验当前请求是否满足规则约束,若满足则在代理服务器的缓存当中查找是否存在客户端主机所请求的信息。
子进程在查询缓存后,根据查询结果会有两种不同的结果:一是在缓存当中查找当对应的信息,而且这些信息没有过期,那么直接由代理服务器将客户端主机请求所需的信息发送给客户端主机;二是在缓存当中查找当对应信息,但是这个信息已经过期了,那么子进程将代替客户端主机向Google服务器发出访问主页的请求,并接收Google服务器所发回的响应信息,然后代理服务器子进程将这些信息发送给客户端主机,同时将自己的缓存信息进行更新,以便下次能够直接处理相同请求


总结一下,NAT技术与代理服务器都能够解决局域网内主机访问外网的问题,只不过NAT技术是作为客户端主机与服务器的提供了一个中转站,对于NAT而言,只需要对数据包中的IP地址进行修改,再将数据包转发出去即可;而对于代理服务器则是对于客户端主机所发送的请求进行解析,查询自己的缓存是否能满足这个请求,如果能就作为服务器向客户端提供服务,否则向目标服务器发送请求,并接收信息进行转发同时更新缓存,所以对于两者而言,NAT更像是一个中转站,负责货物的转发,而代理服务器则更像是一个代理商,负责代理货物的售卖,只有库存不足时才会向厂家进货
https://zhidao.baidu.com/question/471701560.html
http://book.51cto.com/art/200904/119211.htm
http://blog.csdn.net/zhangzhentao/article/details/6094146