NAT和DHCP 的区别是什么?

DHCP 有一个 IP地址池 ,能够为接入 DHCP服务器 的机器分配 IP地址。NAT 能够将 私有 IP 地址转换为 公有 IP 地址,以便能够访…
关注者
339
被浏览
189,114

30 个回答

TCP/IP协议之所以最终打败对手,傲视群雄,一个不得不提的协议就是DHCP

如果没有DHCP,TCP/IP协议在初始化过程中,需要用户提供IP地址、网络掩码、默认网关、DNS服务器,以此来完成各个协议模块的初始化工作,对于广大用户来说,这绝对是一种很糟糕的体验,那个掩码是啥?

而有了DHCP,TCP/IP协议在初始化时,会自动调用DHCP模块,DHCP通过广播的方式去发现(Discover)DHCP服务器,如果本广播域没有服务器,通常会在网关上配置一个DHCP Relay + DHCP 服务器IP,一句话,肯定可以找到一个可以分配IP(Offer)的服务器。

通过四次消息交互,最后电脑获得了所有上网的的IP参数,IP地址、网络掩码、默认网关、DNS服务器,TCP/IP所有模块完成初始化,比如IP模块、DNS模块。用户无需任何配置即可上网,这是TCP/IP对用户友好的一面。

但一般企业网、家庭网络,DHCP服务器分配给电脑的都是私有IP,诸如 10/8、172.16/12、192.168/16,这些私有IP在企业网内部还可以混混,但不能到Internet上去浪

这就好比国人持有身份证(私有IP)只能国内旅游,但要出国必须使用护照,护照(公网IP)是国际通用的身份标识。

所以必须在企业网与Internet的边界网关(海关),做私有IP与公网IP的转换(NAT),由于公网IP可能只有一个或几个,需要使用NAT网关的端口号来识别一个个用户session,如果这个地方看不懂,可以参考数据库的组合键。zhihu.com/question/6655

需要指出的是,NAT的存在使得网络变的更复杂,使得一些多通道应用(比如FTP)、应用层嵌入私有IP的协议(比如SIP)无法正常工作,需要引起足够的重视。

这些我的电子书都有,甚至更详细,

zhihu.com/publications/

为何要舍近求远…

DHCP是用来分配IP地址的。

NAT是用来转换IP地址的。

NAT的类型很多,但很多时候,NAT就是为了让N台手机/电脑/平板能共享同一个公网IP来上网,如果你用过Linux,可以试试iptables的MASQUERADE、SNAT,实现的就是这个效果。


你把电脑/手机/平板插上网线/连上WiFi,操作系统的DHCP客户端就会开始工作,尝试联系网络里的DHCP服务器,然后从那里“租”一个IP地址。

DHCP服务器维护了一个地址池,它只会从这个池子里分配地址,一个MAC对应一个地址,如果不用了就放回池子,这样就可以避免搞出重复的IP地址——当然,你也可以给电脑/手机/平板直接填一个IP,这样就可能重复了,DHCP服务器管不着你,但你这样用也可能碰到冲突、动不动断网。

然后,很多时候,我们手里的设备从DHCP服务器那里拿到的是私有IP,192.168.X.X这种。

(直接拿到公网IP的也有,有些地方的ChinaNet就有机会拿到)


但是,私有IP在互联网上是不用的。如果你把IP包头的“目标地址”字段填入私有地址,再把这个数据包发到互联网上,一般过不了几跳就会被丢弃,因为没人在用这种地址。

然后,家用路由器/NAT网关等设备就开始发挥作用了。


比如你用手机打开知乎首页,数据包从手机发出去时,经过家里的路由器,它就把数据包头部的源IP改成自己在用的公网IP,这样数据包就可以正常发到目的地了。

在互联网上的路由器,和知乎的服务器看来,就像是你的家用路由器在进行访问知乎的动作。

等对方回复时,家用路由器再把数据包头的目标IP改成对应的私有IP,然后这个回复包就可以正确发到你的手机上。

其实只改IP头还不够,很多时候TCP/UDP/ICMP的头部也需要改——总之,路由器要建立一个对应关系(NAT表),就像A单位(路由器拿到的公网IP)的张三(手机拿到的私有IP)给某时尚杂志(网站服务器的公网IP)写信,对方回信了,路由器可不能搞混,要把回信给张三才对,给了李四就搞笑了。维护“对应规则”的方法也有很多,具体来说有Cone NAT、Symmetry NAT等很多种。

PS:可想而知,这也造成外网不能主动访问内网的设备,所以P2P应用,比如迅雷/电驴/XX影音之类的,就要开始嚷嚷端口映射、UPnP之类的了。UPnP也很简单,就是应用跟路由器商量一下,自动建立端口映射,不用你手动打开浏览器192.168.1.1、输入管理密码、添加端口映射那么麻烦。对于P2P应用来说,还有UDP打洞等技术来克服NAT带来的阻碍。

PPS:这样一来,内网就不会暴露在外了,获得安全性加成,可以让你躲过445端口的WannaCry勒索蠕虫病毒(然而,内网有猪队友的话,还是会团灭的,嘿嘿)……


NAT除了像上面的例子那样,在“内网的设备连出去”时修改源IP/源端口,还可以在“外网的主机连进来”的时候,修改目标IP/目标端口,比如路由器的端口映射功能,相当于iptables的DNAT,就可以把目标端口改掉(其实连进来/连出去的时候都能用,具体看你想干啥……)。


网上的资料似乎也很多了,比如这个:

NAT的特殊处理 - 目录 - 技术甜甜圈 - 华三通信

推荐看一看。