NAT
和 DHCP
似乎都跟 IP地址
有关,不过,有点乱。
进过网上的一番查询,似乎懂了一点点,但是不知道自己的理解对不对,特向大家请教。
下面是我的理解:
-
DHCP
有一个IP地址池
,能够为接入DHCP服务器
的机器分配IP地址
。 -
NAT
能够将私有 IP 地址
转换为公有 IP 地址
,以便能够访问Internet
。
那么:
- 上面我的理解对不对?
- 为什么还需要
NAT
呢?DHCP
不是都已经给接入的机器分配了IP地址
了吗? -
DHCP
分配的IP地址
如果跟已经存在的IP地址
冲突了怎么办? -
网上查资料的时候发现一个点:
要进行地址转换,当数据包经过路由器的时候,
MAC地址
是会变的上面的这一句话是什么意思?
-
Linux
如何开启NAT
,我在网上找了很久,操作各有不同,不知道那一个对,不过都是用了一个iptables
的程序。
问题有点多,麻烦大家了!谢谢!
简而言之:
所以 DHCP 和 NAT 基本上没有直接关系,它们独立工作,互不依赖。
你的理解基本正确,但可以看出你的理解还不够透彻
因为 DHCP 通常用来在(本地)网络内给主机分配地址,本地网络内的地址(子网掩码描述了 IP 地址的哪些部分属于本地网络)放到外面的其他网络里人家有可能不认,所以需要 NAT 把所有的私有地址翻译成网关的地址。
会出现 IP 地址冲突,会导致其中一台主机无法正确地收到数据(因为另一台主机也有同样的地址),ARP 攻击就是通过故意使用一个已经存在的地址实现的。
IP 协议是不传输 MAC 地址的,你引用的资料可能是在说其他的协议(如 ARP)。MAC 地址是对应物理设备(网卡)的,所以「数据包经过一台路由器时,MAC 地址会变」这个说法也不能说是错的。
iptables 有一个 nat 表是用来处理 NAT 相关的规则的,iptables 可以通过 SNAT 来修改源地址,DNAT 修改目标地址。
最后推荐 计算机网络:自顶向下方法 这本书,你的所有问题在这本书里都有非常透彻的解答。
补充第四点:可以从另一个角度来看:IP 在主机间传输数据,一个 IP 数据包可能跨越多个网络;而链路层只在网络内传输数据,与 IP 数据包并不是一一对应的关系。又因为网络被设计成层次状的,所以 IP 并不依赖于具体的链路层,理论上来讲,IP 协议也可以承载在一种没有 MAC 地址的概念的链路层上。