NAT 和 DHCP 的区别
NAT
和 DHCP
似乎都跟 IP地址
有关,不过,有点乱。
进过网上的一番查询,似乎懂了一点点,但是不知道自己的理解对不对,特向大家请教。
下面是我的理解:
DHCP
有一个IP地址池
,能够为接入DHCP服务器
的机器分配IP地址
。NAT
能够将私有 IP 地址
转换为公有 IP 地址
,以便能够访问Internet
。
那么:
- 上面我的理解对不对?
- 为什么还需要
NAT
呢?DHCP
不是都已经给接入的机器分配了IP地址
了吗? DHCP
分配的IP地址
如果跟已经存在的IP地址
冲突了怎么办?网上查资料的时候发现一个点:
要进行地址转换,当数据包经过路由器的时候,
MAC地址
是会变的上面的这一句话是什么意思?
Linux
如何开启NAT
,我在网上找了很久,操作各有不同,不知道那一个对,不过都是用了一个iptables
的程序。
问题有点多,麻烦大家了!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
简而言之:
所以 DHCP 和 NAT 基本上没有直接关系,它们独立工作,互不依赖。
你的理解基本正确,但可以看出你的理解还不够透彻
因为 DHCP 通常用来在(本地)网络内给主机分配地址,本地网络内的地址(子网掩码描述了 IP 地址的哪些部分属于本地网络)放到外面的其他网络里人家有可能不认,所以需要 NAT 把所有的私有地址翻译成网关的地址。
会出现 IP 地址冲突,会导致其中一台主机无法正确地收到数据(因为另一台主机也有同样的地址),ARP 攻击就是通过故意使用一个已经存在的地址实现的。
IP 协议是不传输 MAC 地址的,你引用的资料可能是在说其他的协议(如 ARP)。MAC 地址是对应物理设备(网卡)的,所以「数据包经过一台路由器时,MAC 地址会变」这个说法也不能说是错的。
iptables 有一个 nat 表是用来处理 NAT 相关的规则的,iptables 可以通过 SNAT 来修改源地址,DNAT 修改目标地址。
最后推荐 计算机网络:自顶向下方法 这本书,你的所有问题在这本书里都有非常透彻的解答。
补充第四点:可以从另一个角度来看:IP 在主机间传输数据,一个 IP 数据包可能跨越多个网络;而链路层只在网络内传输数据,与 IP 数据包并不是一一对应的关系。又因为网络被设计成层次状的,所以 IP 并不依赖于具体的链路层,理论上来讲,IP 协议也可以承载在一种没有 MAC 地址的概念的链路层上。
这一点是因为路由器是网络层设备,它两端连接的是两个不同的数据链路(比如一边是以太网一边是PPP)
一个数据链路中的设备不会知道另外一个数据链路的设备的地址(mac地址)
因此经过路由器的时候,数据包的mac地址会被改变成路由器的mac地址(也不一定是mac地址啦,比如PPP中就没有mac地址,帧的格式跟以太网的也不会是一样的)
其实两者的功能是完全不同的,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,好了,可以上网了,这就是dhcp
然后开一个虚拟机,你并不希望别人能知道你开一个虚拟机,又想上网,或者是ip地址不够了,这时候可以通过电脑中转的,于是电脑和虚拟机之间搞一个ip,电脑再转发到路由器,这时候对路由来说只占用一个ip
如果选择桥接,不用nat,dhcp就会分配你一个ip,一根网线就有2个ip地址,但是这得是ip富裕的时候才行。
至于dhcp导致ip冲突,不是大概率事件,但是也发生,他自己维护一个表,哪个分配出去了,然后倒计时,电脑得到ip地址也倒计时,小于一个值的时候就刷新一下,如果不刷新就表明这个设备不在了,ip空出来了。如果路由器的表里面一个ip已经空出来了,分配给了别人,但是电脑里面计时器还有时间,这时候2个设备就冲突了,需要清理一下你的电脑,重新申请ip地址。。。。
以上内容根据百度百科整理,注意看加粗的内容,相信你会明白它们各自的使命与作用。
ARP (IPv4)/ NDP (IPv6)
given the next-hop IP, give me the next-hop MAC address
ARP cache saves IP->MAC mappings for a few minutes unless refreshed
ARP broadcast request
mapping obtained by broadcasting a request
(in wireshark: Who has 1.2.3.4? tell 5.6.7.8)
unicast reply to the MAC in the request
responder caches mapping in request
DHCP
(Dynamic Host Configuration Protocol)
carried over UDP
each interface needs an IP address
broadcast request, unicast reply
IPv6 automatically gives us a valid link-local IP address
Router Advertisements tell us the routers on this network
SLAC
(Stateless Address Configuration)
way to obtain IPv6 addresses (in lecture slides)
IPv6 compared to IPv4
routing and address masks all work the same
one address per interface
unicast, multicast addresses are similar
ARP+DHCP replaced by IPv6 stateless autoconfiguration
IPv6 autoconfig
obtaining a valid IP address
64-bit network part of the address
64-bit host ID from MAC address
obtaining router information
IPv6-to-MAC address resolution: Neighbor Discovery Protocol, NDP (replaces ARP)
NAT is the _
reduction in the number of pubic IPs
How NAT works:
Due to scarcity of IPv4 addresses, better to use a single address for many clients
hosts "inside" use local IP addresses
packets going "out" are re-written to have as a source address the IP address of the NAT
● may need to change source port number too
packets coming "in" are re-written to have as destination address the internal IP address of the local device
● identified by destination port number
● must keep a table of such translations
NAT details
-a NAT may manage multiple public IP addresses
NAT timeouts can vary widely, esp. for UDP
local port need not be rewritten if unique
only works with protocols it understands!
A Firewall __
protects unmanaged hosts and by default, blocks incoming connections
NAT and Firewall
when combined, NAT only allows outgoing connections
NAT table has:
two local IPs and port numbers
one to use for packets inside the network and one to use for packets on the Internet
security
ARP and DHCP/SLAC responses may be sent by an impersonator
the MAC address of X is Y (really should be Z)
I am a default router on this network so use this IP address (which may be wrong or duplicate)
抱歉,之前的答案是错误的。正确的,请看他人的回答。