注意:MAC地址在同一个广播域里面不变,跨越广播域的时候发生变化,IP地址在整个网络中不发生变化,除了经过NAT除外。
NAT技术:为了解决IPV4地址匮乏,引入的机制
NAPT技术:是为了解决数据报文返回到源端,引入端口号机制,避免同一个公网地址,引起冲突,引入的机制
经过NAT之后:
源IP映射成公网地址IP 源MAC变成当前接口的MAC 并且添加端口映射,避免引起冲突
目的IP不变 目的MAC变成吓一跳的mac,注意当数据报文从目的端发回来的时候要去掉上面的端口。
NAT技术在整个计算机数据报文的传输过程中意义重大,务必要理解清楚,下面通过一个例子加深理解。
这里遵从Douglas E.Comber这位大牛的著作,将运行NAT软件的电脑称之为NAT Box。一般情况下要求NAT Box的一端连接具有私有IP地址的电脑(称之为Internal Host),而另一端至少具备一个在公共因特网上的有效地址G。如下图所示:
NAT Box对来自于Internal Host的数据包以及从公共Internet传来的数据包进行了IP地址转换,具体说来,如果Internal Host A想要访问公共Internet网上的资源,当请求数据包到达NAT Box之后,NAT Box将该数据包的源IP地址由192.168.1.100替换成公共Internet的IP地址G;当公共Internet将资源返回到NAT Box时,NAT Box又将该数据包的目的IP地址替换成内部的Internal Host A地址。
内部Internal Host通过NAT上网时,公共Internet看到是NAT Box在索取资源,它看不到真正请求资源的是Internal Host,即Internal Host相对于公共Internet来说是透明的。我们都知道Internal Host的IP是私有IP,这样的IP在公共Internet上是不能够出现的,但是因为NAT的缘故,即便是私有IP,Internal Host也一样可以访问公共Internet的资源。
由此可见,NAT Box内部必然存在一张表格,内含Internal Host与公共Internet地址相互之间的映射,内部Internal Host访问外部资源的时候建立这张表格。如果我们在私有网络里只有Internal Host A的话,那么它与G的对应就是一对一的,即这张表格可以是下面的样子:
(G, 192.168.1.100)
但实际情况却是私有网络里有很多Internal Host,如果仅仅还是与G对应而没有其他的辅助的话,那么这张表格就乱了,因为从公共Internet上回来的多个数据包使得NAT Box不知道究竟将数据包传递到哪个Internal Host处,因为这些数据包的目的地址都是G,如下所示:
(G, 192.168.1.100)
(G, 192.168.1.101)
(G, 192.168.1.102)
所以,NAT的衍生技术NAPT就出现在了人们眼前,NAPT主要是把TCP的端口号给加了进来,从而导致NAT Box维护的表格变成下面的样子:
从上表可以看到,Host A与Host B需要同时访问百度服务器(百度的IP:220.181.112.143),而Host C则访问谷歌服务器(谷歌的IP:173.194.44.127),三者启动各自的TCP端口号21023、12345和1274。由于这些端口号来源于Host本身,所以有可能它们都采用了相同的端口号。三个Host的访问请求可以简化成如下的形式:
(192.168.1.100,21023; 220.181.112.143, 80)
(192.168.1.101, 12345; 220.181.112.143, 80)
(192.168.1.102, 1274; 173.194.44.127, 21)
当上面的请求到达NAT Box之后,NAT Box又做了什么“龌龊”的事情呢?NAT Box将这些请求中的源IP地址和源TCP端口号替换成如下的形式:
(G,14003; 220.181.112.143, 80)
(G, 14010; 220.181.112.143, 80)
(G, 14012;173.194.44.127, 21)
看到了吧,如果此时百度服务器和谷歌服务器都将响应数据包返回给NAT Box的话,那么NAT Box是否知道该怎么样分发对应的数据包到正确的Host了呢?答案是肯定的,如果你还没明白的话,请再想想。
如果你明白了的话,那么这里有个问题考考你。上面表格中的三个NAT Port号是否能相同呢?答案是否定的哈。