您的位置:首页 > 其它

NAT与P2P打洞的基础知识

2009-10-13 10:28 239 查看
借助于NAT,"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。

  NAT将自动修改IP报文头申的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文进行修改,以匹配IP头中已经修改过的源IP地址。

NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机.

NAT的实现方式有三种,即静态转换Static Nat动态转换Dynamic Nat 端口多路复用OverLoad
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问(需要使用Inbound static mapping 技术A web server hosted on the internal private network can be accessed from the Internet if an inbound static mapping is defined.
)。 (参考http://www.2000trainers.com/tutorials/nat/)
  动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的,而是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。

基于端口的网络地址转换的实现

1. NAT转发数据包(TCP UDP)
每当一个外出的封包进入NAT盒。NAT会对改封包的进行改装。封包的源IP地址(如192.168.X.Y 等内部地址)就会被该NAT的对外IP地址所替代。
(也许该NAT的对外IP地址也是个内部地址,发出的改装后的封包需要下个NAT的处理,直到被转换成一个真正的IP地址的封包出现在Internet上)

在封包的源IP地址被替代后,它的端口(TCP UDP)会被一个索引替换,该索引是指向NAT盒内部的有65536个表项的装换表。表中的表项包含了原来的IP地址和源端口号。最后IP头和TCP或UDP头的校验和都会被重新计算插入封包。这样做的缘由是,对于NAT来说,有可能收到来自内部网络的两个内部地址不用但源端口号相同的封包,所以从端口号上不能唯一确定这个数据包。

2. NAT接受来自外部网络的封包并转发到内部网络。
前提:这个封包必须是作为NAT发出的数据包的回应,否则NAT就抛弃这个不请自来的封包
当封包到达NAT时,该封包的目的端口号就会被提取出来。作为索引在NAT装换表中找到相应的表项,然后用内部的IP和端口号替换封包的目的IP和端口,重新计算IP和TCP UDP头的校验和,整理号封包后,该封包就会被转发到内部网络的某个机器。

所对于外部服务器来说,它自身认为只是与一个有真实IP的客户通信。对于内部网络中的机器来说,它自身认为是与服务器在直接交换。NAT中间的封包的发送和接受处理对于二者来说都是透明的。

NAT的缺点:NAT的设计没有考虑让其后面的主机去被动的接受连接,所以要隐藏在NAT后面的两台主机建立TCP/UDP连接,就需要一个中介服务器来帮助它们完成初始化工作。这里都需要进行一个UDP和TCP的打洞的过程了。

在各种各样的NAT中,最常见的类型是传统的(外出式OutBand)NAT,外出式NAT默认状况下,仅允许开往外地的会话(IP封包)通过,到来的封包会被抛弃,除非NAT标识它们是从内部网络初始化的现存会话的一部分,也就是说是对内部网络外出会话请求的回应。所在要让两个在不用NAT后面的节点进行通信时,外出式NAT与点与点通信相抵触。因为不管哪一方初始化这个会话,另一方都会拒绝。所以
必须借助服务器的帮助使p2p会话看起来像两个NAT的外出会话。

NAT Inbound Mapping
. Recall that by default, a NAT server will drop all packets that are not replies to requests that were originated from the internal private network

对于内部网络放置web服务器,肯定是不能用到外出式NAT,外出式NAT会抛弃所有的不是对内部网络会话的回应的封包。让服务器放置到内部网络,需要使用Indound
Static mapping技术,可以把NAT路由器上的特定外部端口静态映射到内部网络上的某个IP的端口上(如果有很多IP地址,可以把一个外部地址映射到内部的节点上)。
对于内置web服务器,就向内映射80端口。
当配置NAT创建好向内的静态映射后,当NAT路由器接收到TCP 80端口的封包后,
路由器会将其转发到内部网络的web服务器上。由于web服务其是隐藏在内部网络的,所以外部的客户端根本不会知道服务器的确切位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐