首页 » 网络 » P2P协议

NAT

NAT类型

NAT(Network Address Translation,网络地址转换)是一种IP包通过路由器或防火墙时重写源IP/Port的技术。90年代中期,NAT作为一种解决IPv4地址短缺的方案流行,在家庭和小型办公室通过路由器联网,通常就应用了NAT技术。对外部网络而言,它只能看到路由器的IP/Port,但路由器内部却维持一个映射表,从映射表得知哪个报文是属于内网中哪台主机。

常见的NAT类型有4种:Full cone NAT、地址受限的NAT、端口受限的NAT,对称NAT。它们的束缚条件逐一加强。

Full cone NAT - 内网接口对(ip:port)总被映射为外部接口(eip:port),所有发自(ip:port)的报文都通过(eip:port)出去,所有来自(eip:eport)的报文都被转发到(ip:port)。如下图所示:

full cone nat

地址受限的NAT - 内网接口对(ip:port)发往网络host的报文被映射到外部接口(eip:port),只有来自host的报文才能通过(eip:port)转发到(ip:port)。所谓地址受限,即指只有内网的主机向网络主机发送过报文,网络主机向内网主机的报文才能被路由器转发回内网主机。

address restricted nat

端口受限的NAT - 内网接口对(ip:port)发往网络host (sip:sport)的报文被映射到外部接口(eip:port),只有来自host (sip:sport)的报文才能通过(eip:port)转发到(ip:port)。所谓端口受限,即指只有内网的主机向网络主机(sip:sport)发送过报文,网络主机(sip:sport)向内网主机的报文才能被路由器转发回内网主机。

address restricted nat

对称NAT - 每一个发往网络(sip:sport)的接口,都在路由器上被映射为不同的(eip:eport)。

address restricted nat

端口受限NAT和对称NAT看起来比较像,但实际上差别很大。例如在NAT穿透(打洞)中,Server会记录所有Client的(ip:port),如果是端口受限,Server看到Client1的接口是(ip1:port1),Client2的接口是(ip2:port2),当Client1向Client2发送报文时,Client2看Client1也是(ip1:port1);但如果是对称NAT,Client2看到Client1的接口成了(ip1:port2)。

NAT穿透

NAT后的Client互联,通常称为NAT穿透;NAT在路由器上维持到网络主机的映射,通常成为NAT打洞。

Server端为了辅助NAT穿透,提供2种基本的支持:NAT类型探测和NAT穿透代理。

NAT类型探测的原理

准备1台Server,配备2个IP和3个端口,这里设定为:

(sip1 : sport1)
(sip1 : sport2)
(sip2 : sport3)

Server的工作非常简单,(sip1 : sport1)和(sip1 : sport2)收到Client的报文,将它们所看见的Client的IP/Port返回给Client:

Client: request packet (myip : myport)
(sip1:sport1): respond packet (cip1 : cport1)
(sip1:sport2): respond packet (cip2 : cport2)

Client通过Server端的响应报文判断NAT类型。其中(myip:myport)是Client自己获得的信息,(cip:cport)是Server看到的Client信息:

NAT类型判断依据
公网Client(无NAT)(myip:myport) == (cip1:cport1) 或 (myip:myport) == (cip2:cport2)
非对称NATcport1 == cport2
对称NATcport1 != cport2

以上把Client分作3大类:

  • 公网Client
  • 非对称NAT - 可能是Full cone、地址受限、端口受限中的一种。
  • 对称NAT

非对称NAT对穿透不构成什么障碍,对称NAT则非常难以穿透。

参考

维基百科NAT介绍

分享

0