我知道这是一个相当基本的问题,但我正在努力寻找在线资源来澄清它。
据我了解,在 NAT 中,将专用网络连接到公共互联网的路由器有一个 IP 地址,专用网络的所有流量都指向该地址;然后路由器使用端口号来确定流量是针对专用网络上的哪个设备。相比之下,使用 DHCP 时,网络上的每个设备都被分配了自己的公共 IP 地址,它的流量被定向到该地址。
我的困惑源于听说两者可以同时使用,这似乎与使用 NAT 的想法相矛盾,整个专用网络只有一个 IP 地址,而使用 DHCP,网络上的每个设备都有一个 IP 地址。如果它们是互斥的,那么它们通常在哪里使用?
如果您认为这会有所帮助,请随时撕开上述陈述:)。
编辑:下面的答案解释得非常好——我很愚蠢,没有意识到 DHCP 可以分配任何“类型”的 IP 地址,它只是设备加入网络的协议?
NAT 是一种以多种方式转换流量的方法。家用路由器中最简单的是让一切看起来都在同一个 IP 地址后面。这意味着来自本地网络的任何出站连接都会被接收,其源地址设置为路由器的公共地址,分配一个新端口并转发修改后的数据包。当有数据包返回时,同样的事情以相反的方式进行,数据包被发送到原始设备。
NAT 不需要位于私有网络和公共网络之间。它也可以在两个公共网络或两个私有网络之间。它只是分流,对公私一无所知。
DHCP 与此完全无关。这是设备向本地网络请求 IP 地址和其他相关信息(如网关地址、名称服务器等)的一种方式。同样,家庭路由器通常有一个服务器来为本地网络中的客户端提供服务。如果没有 DHCP 服务器,您需要手动为每台设备设置所有 IP 地址(或者使用 Windows 中的自动 IP 系统,例如,但这仅适用于本地网络,不适用于网络互连)。除非设备具有 IP 地址,否则它们无法使用 IP 进行通信,并且由于实际上所有通信都是通过 IP 进行的,因此这是必需的。
给定的 IP 地址不一定是公开的。也许这会让你感到困惑。它是在 DHCP 池中定义的任何地址,甚至可能是该特定设备的静态地址。
因此,您可以让 DHCP 分配 IP 地址,而不使用 NAT。它只是从池中提供 IP,仅此而已。您也可以在没有 DHCP 的情况下使用 NAT。您可以设置固定 IP,或者您可以使用 NAT 将流量通过防火墙转移到其他机器等。它不需要任何来自 DHCP 的东西。
在家庭网络中,两者都很有用,因为几乎总是只有一个外部 IP,并且用户不想手动设置固定 IP 地址。因此,DHCP 为它们提供本地私有 IP,NAT 转换连接,使它们看起来像是来自同一地址。
DHCP 是一种用于配置主机的协议,它会定期运行以保持其地址和其他配置为最新。NAT a进程用于在数据包通过路由器转发时重写数据包。更具体地说,它确实会翻译地址,有时还会翻译端口。
DHCP 采用 IP 池并根据请求分配它们。可以是公共的或私人的
NAT(通常)获取可路由的 IP 数据并将其发送到不可路由的 IP(如无处不在的 192.168.0.0 块)
换句话说,它们不是一回事。这就像引擎和轮胎:它们都属于汽车并帮助汽车行驶,但它们的作用却截然不同。
可能让您感到困惑的是大多数 Internet 都运行在 NAT 上(通常是 IPv4 NAT)。如果您使用的是 NAT,则默认配置是您采用公共 IP,然后将您的非路由块通过 DHCP 连接到路由器后面连接的任何设备。诀窍是您不必使用 DHCP NAT。实际上,您可以为所有设备分配一个本地非路由 IP。事实上,大多数住宅路由器都有一些块,因此它们没有 DHCP,因此您可以为网络打印机分配一个固定 IP。
如果有人来你家问“你的 Wifi 密码是多少?”,那会很痛苦。只是让你回答“等等,让我给你的设备分配一个 IP。你的 MAC 地址是什么?” 你不仅会得到一个茫然的眼神(而且你的父母会因为你要求他们做技术而与你断绝关系),而且这对你来说也是一个巨大的痛苦。因此,没有人像这样运行他们的网络,因为 DHCP真的很方便。我的意思是来自 Chef(DevOps 公司)的 Adam Jacobs讲述了一个关于一家公司认为他们不能使用 DHCP 的故事。这立即引起了技术专业人士的关注。
所有 TCP/IP 连接都有 4 个数字。假设它在 Alice 和 Bob 之间。
我们有 Alice_IP 和 Alice_Port,还有 Bob_IP 和 Bob_Port。
当它们之间存在 NAT(例如,转换 Alice 端请求)时,获取 Alice_IP 和 Alice_Port 并将它们替换为 NAT_IP 和 NAT_Port。
所以对于 Bob 以及 NAT 和 Bob 之间的所有网络,连接是在 NAT_IP 和 NAT_Port 以及 Bob_IP 和 Bob_Port 之间。
NAT 保留一张表,上面写着“来自 Bob_IP 和 Bob_Port 的以 NAT_IP 和 NAT_Port 为目标的数据包被转换为 Alice_IP 和 Alice_Port”。
虽然这通常用于 Alice 和她的朋友可以使用私有 IP 地址,并且 NAT 拥有一个 NAT_IP,它是在整个互联网上有效的公共 IP。
但是你也可以在 Alice 和 Bob 之间有 NAT 层,一些面向 Alice,一些面向 Bob。它甚至可以用于转换为真实公共互联网地址的地址(但我认为没有多大意义)。
DHCP 解决了一个不同的问题。当您连接到网络时,您可能没有 IP 地址。DHCP 是您的计算机可以广播“你好,这是我 [以太网硬件 ID],我需要一个 IP 地址,谁能帮帮我?”的方式。
通常,路由器会被配置为响应“当然,这是一个 IP 地址”,并且路由器会记住 (a) 您的 mac 地址具有该 IP 地址,以及 (b) 该 IP 地址位于该特定子网上。
从哪里获得这些 IP 地址不是 DHCP 关心的事情。在典型的消费者路由器上,它从保留供私人使用的 IP 地址池 10.xx.xx.xx 或 192.168.xx.xx 中获取它们。
问题是互联网的其余部分无法路由到这些地址。事实上,互联网上的许多路由器都配置为只丢弃具有这些地址的数据包。
您的消费者路由器连接到您的 ISP 的路由器(或等效路由器),后者又为其分配一个 IP 地址。您的路由器通常执行 NAT,将家用计算机的 DHCP-from-private-IP 地址连接转换为它自己的 DHCP-from-ISP 提供的 IP 地址。可能您的 ISP 然后使用另一层 NAT将您路由器的IP 地址转换为真实的互联网 IP 地址;或者,也许您的 ISP 拥有足够的 IP 地址,他们可以为您的路由器提供一个“真实的互联网”IP 地址。
此 NAT 的缺点是您的计算机没有唯一标识。因此,当有人想要连接到您的计算机时,如果他们发送的数据包看起来是您计算机的 IP 地址,他们就会将其发送到路由器。
并且路由器在其 NAT 表中可能没有用于此新的、未经请求的连接的条目,因此它会丢弃该连接作为废话。
有一些技巧可以解决这个不同效果的问题。
Nat用于将网络内的公共IP地址转换为私有IP地址,DHCP用于自动给网络中的主机一个IP,以便它们可以与路由器和外界进行通信。
您对 DHCP 感到困惑。这是简单的事情:
路由器是连接两个网络的设备,提供它们与其相邻网络之间的通信。这意味着路由器有两个 IP 地址,一个用于它所在的每个网络。“纯”路由器只有两个网络连接器,一个用于每个网络。你的有更多的专用侧连接器,因为它有一个集成开关(即智能网络分离器)。
NAT 是指网络 1 中的设备地址在不同地址下暴露给网络 2。当路由器接收到发往网络 2 中该地址的数据时,它会将其转发到网络 1,从而更改接收者的地址。家庭网络使用一对多 NAT,其中所有设备在 Internet 中似乎都有一个公共地址,但该地址上的端口映射到专用网络中的多个设备。
DHCP 是一种分配 IP 地址的协议。当设备连接到网络时,它会大喊“嘿,附近有没有 DHCP 服务器可以给我一个 IP 地址?” 并且 DHCP 服务器以免费 IP 响应。
DHCP 不是 NAT 的替代品。它有一个完全不同的目的。它不跨越网络边界。事实上,您的路由器正在运行一个 DHCP 服务器来分发专用网络中的地址,但它也从您的 ISP 的 DHCP 服务器获取自己的公共 IP。两个网络中都在运行 DHCP!