`
tianshibaijia
  • 浏览: 1126074 次
文章分类
社区版块
存档分类
最新评论

NAT以及MAP详解

 
阅读更多

(图片上传不了,完整版本请去我的资源里下载)

NAT以及MAP详解

在讨论NATMAP之前,先说一下为什么需要它们。想象一下,如果每个终端设备都有公网IP地址,那么任意两个设备之间只要有网络联通就可以直接相互访问,根本不需要改变IP数据报。问题是,现在大多数设备还工作在Ipv4,公网IP的数量十分有限,早就被用光了。为了解决公网IPV4地址短缺的问题,才引入了NATMAP。当然还有安全问题等也需要这种技术,但是最最重要的原因还是IP地址短缺。为此IPV6才慢慢发展起来,当然即使完全实现了IPV6,这种技术还会存在,只不过应用就不象现在这么广泛了。

1 什么是NATMAP

首先需要说明的是,NAT,MAP与路由的关系。最最需要说明的是,NATMAP不是路由设备的必备功能,这往往让人容易误解。因为现在用户接触到的网络路由器往往具有这些功能。还是先看看路由的概念吧。

路由:连接两个不同IP网段的技术。

(拿以太网为例)如果两个设备的IP位于同一网段,那么设备会通过ARP协议直接找到发送至对方所使用的链路层地址(MAC),当然不需要任何路由设备。

如果两个设备位于不同的网段,那么一个设备的ARP表里就不会有另一个设备的IP映射,从而不能直接找到对方。其实对于IP网络,历史上最常用的“邮局”比喻最为恰当,如果两个设备在一个办公室里,那么有信直接放到对方的桌子上就是了,根本不需要邮局。如果不能直接找到对方,那么就需要一个中转站,把所有不知道的IP数据报都发送到那里,这在以太网里叫做网关。网关是个特殊的设备,它有自己的IP地址,但是他除了能接收目的是自己IP的数据报外,还能接收目的为任何IP数据报。其实一般的PC的以太网卡也能接收目的IP不是自身IP的数据报(事实上,网卡接收数据不需要IP),但是对于这样的数据报只是简单的丢弃而已。而对于网关设备(路由器)对于接收到的所有IP数据报都进行处理,处理的依据就是目的IP地址,处理的方法就是如果目的IP是自己或是与自己位于同一网段,那么直接发送。如果目的IP不在自己网段,那么就继续中转它。

从以上路由的功能可以看出,路由设备根本不关心IP数据报的源IP,而只是关心目的IP;还有就是路由设备不会对原来的IP数据报做任何改动。改动的只是链路层的地址而已。这才是通常意义上的路由。

如果在中转站把IP数据报的IP地址改了会怎样呢?这分两种情况,一是改变源IP地址,而是改变目的IP地址。

先看第一种,路由设备改变了IP数据报的源IP的情况。如下图所示:

上图展示的是设备IPS1的设备主动与IPD1的设备通信的过程。S1D1处于不同的网段。从S1设备发出去的数据报(S1:D1)经过路由设备时,在被路由之前修改成了(S2,D1),数据报到达D1后,D1并不知道这是经过修改的数据报,因此照常返回数据报(D1:S2),当到达路由设备时,路由器发现目的为S2,按照之前的修改规则重新把S2改为S1,修改后变成(D1:S1),到达S1后,S1并不知道这是经过修改的数据报,但是与自己发出去的(S1:D1)配对,所以接收并处理。这个过程就叫做NAT

可以看出:

1)终端设备对NAT并不知情;

2)路由设备在改变了源IP后,必须做记录,以能对于接收的对应数据报必须进行反改变,以保证设备S1发出和接收到的数据报配对;这就要求,对于改变了的数据报,必须保证其对应的返回数据报必须也经过此路由器。

再看第二种情况,就是路由器改变数据报的目的IP.

此时,路由设备修改数据报的目的地址,原理与第一种清况类似,得出的结论也类似。不同的是这种技术叫做MAP

通过分析,可以看出无论是NAT还是MAP都会改变源地址和目的地址,只不过是改变的次序问题。NAT先改变源IP,当返回时对应的数据报中被改变的IP变成了目的IP;而MAP恰好相反。

当然仅仅通过NATMAP并不能节约IP,因为这是一对一的转换。要想节约IP,必须能做到私有IP和公网IP的多对一转换,这就是NAPTMAPT,原理是转换(IP:Port)对,不再累述。

2 NATMAP容易出现的问题

2.1 内网无法访问同网段的其他设备的公网地址

举个例子,会更明白。一家公司有两个公网IP,一个IP-A用于对外访问互联网,一个IP-B用于内部服务器供互联网访问。如下图:

看到问题了吗,IP1访问IP-B发出去的数据报为(IP1,IP-B),收到的却是(IP2,IP1),因此没有配对,所以(IP2, IP1)被简单的丢弃,IP1在可怜的等待(IP-BIP1)的到来,而事实上永远也不会等到。

问题就出在了,IP1IP2处于同一网段,发出去的数据报被路由器修改了目的IP,而返回时,数据报没有经过那个路由器,因此没有对应的改变。

如何解决呢?知道了原因解决就很简单了,就是要保证经过改变的数据报对应的返回数据报也要经过同一个路由器,也就是让IP2发出的返回给IP1的数据报不是直接发给IP1而是要先经过路由器。具体方法是改变IP1,IP-B的源地址,如何改变呢?原则是只要是能经过路由器就行,因为这种改变只是为了让数据经过路由器。经过之后又被反改变成IP1了。

尽管这样可以解决,但是本来可以直接访问的内部服务器,却要经过路由器中转,白白浪费带宽和加长中转距离,但有一个好处,那就是可以在路由器上监控内部员工访问自己服务器的情况。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics