NAT 和 DHCP 的区别


NAT DHCP 似乎都跟 IP地址 有关,不过,有点乱。

进过网上的一番查询,似乎懂了一点点,但是不知道自己的理解对不对,特向大家请教。

下面是我的理解:

  • DHCP 有一个 IP地址池 ,能够为接入 DHCP服务器 的机器分配 IP地址
  • NAT 能够将 私有 IP 地址 转换为 公有 IP 地址 ,以便能够访问 Internet

那么:

  1. 上面我的理解对不对?
  2. 为什么还需要 NAT 呢? DHCP 不是都已经给接入的机器分配了 IP地址 了吗?
  3. DHCP 分配的 IP地址 如果跟已经存在的 IP地址 冲突了怎么办?
  4. 网上查资料的时候发现一个点:

    要进行地址转换,当数据包经过路由器的时候, MAC地址 是会变的

    上面的这一句话是什么意思?

  5. Linux 如何开启 NAT ,我在网上找了很久,操作各有不同,不知道那一个对,不过都是用了一个 iptables 的程序。

问题有点多,麻烦大家了!谢谢

ip iptables dhcp nat wifi

魂断六扇门 10 years, 7 months ago

一个是进,一个是出。
1. 进(NAT)。
通过NAT的转换,外网的机器,能找到内网中的pc机。
2. 出(DHCP)。
通过DHCP,内网中的pc机,能获取内网信息(ip地址、路由器地址、DNS地址),经过路由器访问外网。

巡音ルカ. answered 10 years, 7 months ago

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的说明。

以上内容根据百度百科整理,注意看 加粗 的内容,相信你会明白它们各自的使命与作用。

install answered 10 years, 7 months ago

我也没明白。
我讲一下我的理解,开一个电脑,连上路由器,dhcp给你分配一个ip,好了,可以上网了,这就是dhcp

然后开一个虚拟机,你并不希望别人能知道你开一个虚拟机,又想上网,或者是ip地址不够了,这时候可以通过电脑中转的,于是电脑和虚拟机之间搞一个ip,电脑再转发到路由器,这时候对路由来说只占用一个ip

如果选择桥接,不用nat,dhcp就会分配你一个ip,一根网线就有2个ip地址,但是这得是ip富裕的时候才行。

至于dhcp导致ip冲突,不是大概率事件,但是也发生,他自己维护一个表,哪个分配出去了,然后倒计时,电脑得到ip地址也倒计时,小于一个值的时候就刷新一下,如果不刷新就表明这个设备不在了,ip空出来了。如果路由器的表里面一个ip已经空出来了,分配给了别人,但是电脑里面计时器还有时间,这时候2个设备就冲突了,需要清理一下你的电脑,重新申请ip地址。。。。

goddnes answered 10 years, 7 months ago

其实两者的功能是完全不同的,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

菊花葵花都是花 answered 10 years, 7 months ago

当数据包经过路由器的时候,MAC地址是会变的

这一点是因为路由器是网络层设备,它两端连接的是两个不同的数据链路(比如一边是以太网一边是PPP)
一个数据链路中的设备不会知道另外一个数据链路的设备的地址(mac地址)
因此经过路由器的时候,数据包的mac地址会被改变成路由器的mac地址(也不一定是mac地址啦,比如PPP中就没有mac地址,帧的格式跟以太网的也不会是一样的)

不H是不对的 answered 10 years, 7 months ago

简而言之:

  • DHCP 用于为网络内的主机分配 IP 地址和一些其他与网络配置有关的信息
  • NAT 用于在网络间翻译地址,以达到同一个网络内的多个主机(对应多个地址)通过同一个网关(一个地址)来访问外部网络。

所以 DHCP 和 NAT 基本上没有直接关系,它们独立工作,互不依赖。

  1. 你的理解基本正确,但可以看出你的理解还不够透彻

  2. 因为 DHCP 通常用来在(本地)网络内给主机分配地址,本地网络内的地址(子网掩码描述了 IP 地址的哪些部分属于本地网络)放到外面的其他网络里人家有可能不认,所以需要 NAT 把所有的私有地址翻译成网关的地址。

  3. 会出现 IP 地址冲突,会导致其中一台主机无法正确地收到数据(因为另一台主机也有同样的地址),ARP 攻击就是通过故意使用一个已经存在的地址实现的。

  4. IP 协议 是不传输 MAC 地址的,你引用的资料可能是在说其他的协议(如 ARP)。MAC 地址是对应物理设备(网卡)的,所以「数据包经过一台路由器时,MAC 地址会变」这个说法也不能说是错的。

  5. iptables 有一个 nat 表是用来处理 NAT 相关的规则的,iptables 可以通过 SNAT 来修改源地址,DNAT 修改目标地址。

最后推荐 计算机网络:自顶向下方法 这本书,你的所有问题在这本书里都有非常透彻的解答。

补充第四点:可以从另一个角度来看:IP 在主机间传输数据,一个 IP 数据包可能跨越多个网络;而链路层只在网络内传输数据,与 IP 数据包并不是一一对应的关系。又因为网络被设计成层次状的,所以 IP 并不依赖于具体的链路层,理论上来讲,IP 协议也可以承载在一种没有 MAC 地址的概念的链路层上。

一水银灯一 answered 10 years, 7 months ago

Your Answer