NAT 和 DHCP 的区别
NAT
和
DHCP
似乎都跟
IP地址
有关,不过,有点乱。
进过网上的一番查询,似乎懂了一点点,但是不知道自己的理解对不对,特向大家请教。
下面是我的理解:
-
DHCP
有一个IP地址池
,能够为接入DHCP服务器
的机器分配IP地址
。 -
NAT
能够将私有 IP 地址
转换为公有 IP 地址
,以便能够访问Internet
。
那么:
- 上面我的理解对不对?
-
为什么还需要
NAT
呢?DHCP
不是都已经给接入的机器分配了IP地址
了吗? -
DHCP
分配的IP地址
如果跟已经存在的IP地址
冲突了怎么办? -
网上查资料的时候发现一个点:
要进行地址转换,当数据包经过路由器的时候,
MAC地址
是会变的上面的这一句话是什么意思?
-
Linux
如何开启NAT
,我在网上找了很久,操作各有不同,不知道那一个对,不过都是用了一个iptables
的程序。
问题有点多,麻烦大家了!谢谢 !
Answers
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途: 给内部网络或网络服务供应商自动分配IP地址 ,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又 想和因特网上的主机通信 (并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它 至少有一个有效的外部全球IP地址 。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 1632中有对NAT的说明。
以上内容根据百度百科整理,注意看 加粗 的内容,相信你会明白它们各自的使命与作用。
我也没明白。
我讲一下我的理解,开一个电脑,连上路由器,dhcp给你分配一个ip,好了,可以上网了,这就是dhcp
然后开一个虚拟机,你并不希望别人能知道你开一个虚拟机,又想上网,或者是ip地址不够了,这时候可以通过电脑中转的,于是电脑和虚拟机之间搞一个ip,电脑再转发到路由器,这时候对路由来说只占用一个ip
如果选择桥接,不用nat,dhcp就会分配你一个ip,一根网线就有2个ip地址,但是这得是ip富裕的时候才行。
至于dhcp导致ip冲突,不是大概率事件,但是也发生,他自己维护一个表,哪个分配出去了,然后倒计时,电脑得到ip地址也倒计时,小于一个值的时候就刷新一下,如果不刷新就表明这个设备不在了,ip空出来了。如果路由器的表里面一个ip已经空出来了,分配给了别人,但是电脑里面计时器还有时间,这时候2个设备就冲突了,需要清理一下你的电脑,重新申请ip地址。。。。
其实两者的功能是完全不同的,DHCP是用来动态分配IP地址的,NAT是用来动态转换IP地址的。
下面回答问题:
1、对
2、NAT是为了解决当前使用的IPv4地址不足的问题,将私有IP地址转换为公有IP地址的方案。如果你是土豪,家里或公司可以为每台设备预留一个公有IP的话,可以不用NAT,直接把DHCP分配的IP池设置为申请到的公有IP就行啦!NAT的作用是在内网私有IP与外网设备(比如segmentfault网站)通信的时候做数据包内IP转换的,segmentfault网站不会知道你的私有IP的,只知道你的公有IP,那么数据包是怎么知道传到你的电脑浏览器上,而不是手机上的呢?就是靠NAT来动态转换的!
3、DHCP会有自己的一个小型数据库,确保分配还未占用的地址,如果预留的地址池满了,比如一般家用路由局域网配置192.168.0.1/255.255.255.0,除去路由本身,只能分配2~254,理论能分配253台设备,如果第254台设备上来就分配不到IP了。
4、应该是IP地址会改变的,理由见答复第2点
5、首先Linux主机要有两块网卡(一块也行,不过配置略显复杂,此处略去),假设eth0是WAN,eth1是LAN
打开转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
设置NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
简而言之:
- DHCP 用于为网络内的主机分配 IP 地址和一些其他与网络配置有关的信息
- NAT 用于在网络间翻译地址,以达到同一个网络内的多个主机(对应多个地址)通过同一个网关(一个地址)来访问外部网络。
所以 DHCP 和 NAT 基本上没有直接关系,它们独立工作,互不依赖。
-
你的理解基本正确,但可以看出你的理解还不够透彻
-
因为 DHCP 通常用来在(本地)网络内给主机分配地址,本地网络内的地址(子网掩码描述了 IP 地址的哪些部分属于本地网络)放到外面的其他网络里人家有可能不认,所以需要 NAT 把所有的私有地址翻译成网关的地址。
-
会出现 IP 地址冲突,会导致其中一台主机无法正确地收到数据(因为另一台主机也有同样的地址),ARP 攻击就是通过故意使用一个已经存在的地址实现的。
-
IP 协议 是不传输 MAC 地址的,你引用的资料可能是在说其他的协议(如 ARP)。MAC 地址是对应物理设备(网卡)的,所以「数据包经过一台路由器时,MAC 地址会变」这个说法也不能说是错的。
-
iptables 有一个 nat 表是用来处理 NAT 相关的规则的,iptables 可以通过 SNAT 来修改源地址,DNAT 修改目标地址。
最后推荐 计算机网络:自顶向下方法 这本书,你的所有问题在这本书里都有非常透彻的解答。
补充第四点:可以从另一个角度来看:IP 在主机间传输数据,一个 IP 数据包可能跨越多个网络;而链路层只在网络内传输数据,与 IP 数据包并不是一一对应的关系。又因为网络被设计成层次状的,所以 IP 并不依赖于具体的链路层,理论上来讲,IP 协议也可以承载在一种没有 MAC 地址的概念的链路层上。