假设有如下设置:
------
-INTERNET-
------
|
|
|
|
___(ETH1)___
| |
(SUBNET 1)---------------(ETH0)| ROUTER |(ETH2)---------------(SUBNET 2)
|____________|
(ETH3)
|
|
|
|
[SWITCH]
/ | \
/ | \
/ | \
/ | \
PC#1 PC#2 PC#3
我的第一个问题与路由器有关。我的印象是每个路由器接口都有自己的 IP 地址和子网掩码,这两者都是由 ISP 提供的。例如,ETH3 的 IP 可以是:192.168.1.20/24。这意味着网络 ID(子网 ID)是 192.168.1,因此子网中连接到 ETH3 接口的所有服务器的 IP 形式都是 192.168.1.XX。这些都正确吗?
接下来,我不太清楚数据包是如何从互联网路由到 PC #3 的。假设 PC#3 的 IP 为 192.168.1.45,并向 www.facebook.com 发出请求。以下说法正确吗?PC#3 属于 192.168.1 子网(连接到 192.168.1.20 ETH3 接口)。因此,www.facebook.com 看到请求来自 192.168.1.20(ETH3 接口)。它发送对此请求的响应,该响应最终路由到 ETH1,然后路由到 ETH3。最后,当响应到达交换机时,交换机会读取响应数据包头中的 MAC 地址,并看到 PC#3 发出了请求。因此,它将数据包发送到 PC#3。
如果这是正确的,我有点困惑,为什么 PC#3 首先需要有自己的 IP 地址,如果用于将数据包从 www.facebook.com 传输到 PC#3 的唯一信息是 PC 连接到的路由器接口的 IP 地址 + PC 的 MAC 地址。
最后,我有一个关于以太网接口的问题。ETH0、ETH1 等只是以太网端口的通用名称吗?那么,如果我的笔记本电脑有一个以太网端口,它也经常被称为 ETHO 吗?同样,交换机以太网端口是否也以相同的方式枚举(ETH0、ETH1、ETH2)。
如能对此作出任何澄清,我们将不胜感激。谢谢!
答案1
我的印象是每个路由器接口都有自己的 IP 地址和子网掩码,这两者都是由 ISP 提供的。
如果接口连接到您的 ISP 控制的某个设备,则您需要使用 ISP 分配的 IP。如果接口连接到您控制的某个设备,则您需要自行分配 IP 地址。
从技术上讲,您可以拥有一个“仅供内部使用”的路由器,该路由器仅连接 2 个或更多私有子网,并且无法访问其他子网。没有严格要求路由器将不匹配其路由表中任何已知路由的流量移交给默认网关。
ETH3 的 IP 可以是:192.168.1.20/24。这意味着网络 ID(子网 ID)是 192.168.1,因此子网中连接到 ETH3 接口的所有服务器的 IP 格式都是 192.168.1.XX。这些都正确吗?
这也意味着您可以获得基于 IP/子网掩码分配的“免费”直接连接路由 - 路由器知道它可以通过 ETH3 到达 192.168.1.XX,因此仅仅由于这个事实,就会在路由表中放置一个条目。
接下来,我有点不确定数据包是如何从互联网路由到 PC #3 的。
- PC#3 想要与 facebook.com 对话
- PC#3 发出 DNS 查找并找到 facebook.com 的地址
- PC#3 使用本地 TCP/IP 堆栈与 facebook.com 通信。
- TCP/IP 堆栈查询本地路由表,查看 facebook.com 的 IP 地址是否与任何路由匹配。
- 由于 PC#3 是一台标准 PC,它的路由表可能非常简单,看起来像这样(简化):
- 127.0.0.1/8 通过虚拟本地主机接口
- 192.168.3.0/24 通过本地 NIC。
- 默认网关应该是路由器的 IP(必须是与 PC#3 位于同一子网的 192.168.3.XXX/24 地址)。
- TCP/IP 堆栈将尝试查找匹配的路由,如果未找到,则会将流量发送到默认网关(如果存在)。由于 facebook.com 的 IP 与任何路由都不匹配,因此 PC#3 会将流量发送到默认网关。
- 路由器接收流量
eth3
。 - 路由器的 TCP/IP 堆栈将查询路由表,看看是否可以找到匹配的目的地。它与 PC 执行相同的操作。不过,路由器的路由表看起来会像这样(我为其他接口编造了地址作为示例):
- 192.168.0.0/24 通过
eth0
- 192.168.2.0/24 通过
eth2
- 192.168.3.0/24 通过
eth3
- 默认网关通过
eth1
- 192.168.0.0/24 通过
- 路由器的 TCP/IP 堆栈查询其路由表,查看 facebook.com 的 IP 地址是否与任何路由匹配,如果未找到,则将流量发送到默认网关(如果存在)。由于 facebook.com 的 IP 与任何路由都不匹配,因此 PC#3 会将流量发送到默认网关。
eth1
必须配置 NAT,因此在此时,NAT 会将源地址更改为看起来像是来自的地址eth1
,并在收到响应时记住这一事实。
等等。相同的过程发生在您的 ISP 处,然后是您的 ISP 上游提供商处,依此类推,直到到达目的地。
...我有点困惑,为什么 PC#3 首先需要有自己的 IP 地址
当流量穿过路由器时,它会离开一个网络并进入另一个网络。一旦流量穿过路由器,原始 MAC 地址就会丢失。IP 代表网际网络协议- 它是一种地址方案,旨在允许任何计算机在全球范围内访问任何其他计算机 - 如果目标计算机不在同一个网络上,则路由器层次结构应该来回转发流量。
最后,我有一个关于以太网接口的问题。ETH0、ETH1 等只是以太网端口的通用名称吗?
该ethX
方案只是一种约定 - 默认情况下,Linux 会将其看到的第一个命名为eth0
,下一个命名eth1
为 ,依此类推。名称由udev
或分配systemd
,并由 MAC 地址保留。名称可以更改为您想要的任何内容。
答案2
您的 ISP 会为您提供 1 个 IP 地址(无论是静态还是动态)。这通常分配给您的路由器。您的其余设备通常只会获得该 IP 地址的 NAT 版本。您可以在 Ciscos 网站上阅读有关 NAT 的更多信息 - 他们对其工作原理进行了很好的解释:http://www.cisco.com/c/en/us/support/docs/ip/network-address-translation-nat/26704-nat-faq-00.html
基本上,PC3 没有自己的全局 IP 地址,它只有在自己的网络内才有唯一的 IP 地址。
关于您的以太网端口问题 - 名称由适配器的接口给出,这完全取决于制造商和驱动程序。通常它们被称为“本地连接”
答案3
我的印象是每个路由器接口都有自己的 IP 地址和子网掩码,这两者都是由 ISP 提供的。
只有面向 WAN 的接口(本例中为 ETH1)会具有由 ISP 分配的(外部/公共)IP 地址。其他接口会具有手动配置的(内部/私有)IP 地址(在本例中)。
例如,ETH3 的 IP 可以是:192.168.1.20/24。这意味着网络 ID(子网 ID)是 192.168.1,因此子网中连接到 ETH3 接口的所有服务器的 IP 形式都是 192.168.1.XX。这些都正确吗?
正确,即使子网 ID 准确地说是 192.168.1.0。 http://www.cisco.com/c/en/us/support/docs/ip/routing-information-protocol-rip/13788-3.html
PC#3 是 192.168.1 子网的一部分(连接到 192.168.1.20 ETH3 接口)。因此,www.facebook.com 看到请求来自 192.168.1.20(ETH3 接口)。它发送对此请求的响应,该响应最终路由到 ETH1,然后路由到 ETH3。最后,当响应到达交换机时,交换机读取响应数据包头中的 MAC 地址,并看到 PC#3 发出了请求。因此,它将数据包发送给 PC#3。
不会,facebook.com 会看到来自您的外部 IP 地址(ETH1 接口上的 IP 地址)的请求。由于私有 IP 地址在公共互联网上不可路由,因此 PC 的私有 IP 地址(192.168.1.x)会通过称为网络地址转换 (NAT) 的过程“转换”为公共/外部 IP 地址。路由器会在所谓的 NAT 表中跟踪这些转换,因此它知道请求来自何处,以及将服务器的回复发送到何处。 http://www.cisco.com/c/en/us/support/docs/ip/network-address-translation-nat/26704-nat-faq-00.html
如果这是正确的,我有点困惑,为什么 PC#3 首先需要有自己的 IP 地址,如果用于将数据包从 www.facebook.com 传输到 PC#3 的唯一信息是 PC 连接到的路由器接口的 IP 地址 + PC 的 MAC 地址。
因为路由器不使用 MAC 地址(OSI 模型的第 2 层),而是使用 IP 地址(第 3 层)。路由器知道数据包是发往哪个 IP 地址的,因此它会将数据包转发到交换机,交换机会在 ARP 表中查找 IP 地址,以找到相应的 MAC 地址,然后在适当的接口/端口上发送帧。
https://en.wikipedia.org/wiki/OSI_model
https://en.wikipedia.org/wiki/Address_Resolution_Protocol
答案4
我的第一个问题是关于路由器的。
如果它是一个路由器;-)
因为请记住,很多作为路由器销售的设备,它们里面都有路由器和交换机,它们进行路由和交换,并且这些设备上的许多外部 LAN 端口都是交换机端口而不是路由器接口。
但是对于您的图表,由于您在路由器和交换机之间做出了区分,因此我们可以假设路由器是路由器,而交换机是交换机。
我的印象是每个路由器接口都有自己的 IP 地址和子网掩码,
是的。
两个[路由器接口]...都是 ISP 提供给他们的。
你在说什么
您说的是“两者”,但您的图片显示的是四个。
并且这 4 个中只有一个具有来自 ISP 的 IP,尽管也可以静态设置,例如,如果 ISP 为您提供静态 IP,您可以通过 DHCP 从 ISP 获取它,或者自行设置。
例如,ETH3 的 IP 可以是:192.168.1.20/24。这意味着网络 ID(子网 ID)是 192.168.1,因此子网中连接到 ETH3 接口的所有服务器的 IP 形式都是 192.168.1.XX。这些都正确吗?
我认为那里的术语是正确的或大致正确的......(令人惊讶)。但你为什么说“所有服务器”。你为什么要关心连接到该接口的计算机是否是“服务器”。(无论你所说的“服务器”是什么意思 - 因为这是一个模棱两可的术语)
从我读过的书中得知,一般路由器接口往往是 .1 或 .2 等,一般子网地址是 .0,并且该子网上的路由器接口是 +1 或 +2,例如 .1 或 .2。例如,一个子网上可能有两个路由器接口。
接下来,我不太清楚数据包是如何从互联网路由到 PC #3 的。假设 PC#3 的 IP 为 192.168.1.45,并向 www.facebook.com 发出请求。以下说法正确吗?PC#3 属于 192.168.1 子网(连接到 192.168.1.20 ETH3 接口)。因此,www.facebook.com 看到请求来自 192.168.1.20(ETH3 接口)。它发送对此请求的响应,该响应最终路由到 ETH1,然后路由到 ETH3。最后,当响应到达交换机时,交换机会读取响应数据包头中的 MAC 地址,并看到 PC#3 发出了请求。因此,它将数据包发送到 PC#3。
决不。
首先,有 NAPT。又名 NAT/PAT,是 NAT 的一种形式。即使没有 PAT,以下内容也是正确的。如果您访问 www.whatismyip.com,您会发现互联网上永远不会看到像 192.168 这样的 IP 地址
你应该在知道路由器是什么之前就知道这一点!甚至在知道子网是什么之前就应该知道这一点
您是否注意到许多人的计算机都有像 192.168 这样的 IP 地址?您是否意识到如果它们全部出现在互联网上,就会发生冲突。
如果这是正确的,
事实并非如此
我有点困惑,如果将数据包从 www.facebook.com 传输到 PC#3 所用的唯一信息是 PC 所连接的路由器接口的 IP 地址 + PC 的 MAC 地址,那么为什么 PC#3 首先需要有自己的 IP 地址。
路由器的工作方式是,一个接口上或接口之外的计算机不知道另一个接口上计算机的 MAC 地址。
问题是,从技术上讲,你可以使用一个有两个端口的路由器,一个是互联网端口,一个是 LAN 端口,还有一个交换机,大多数人的“路由器”就是这样的。在这种情况下,从技术上讲,从理论上讲,它们不是这样构建的,但从技术上讲……如果 TCP/IP 有很大不同,你可以取消 LAN 上的 IP 地址。只是在大型 LAN 上效率会降低。因为 IP 地址是分层的,而 MAC 地址是平面的。分层意味着,例如,你可以将计算机缩小到子网,就像在发送信件时将一个人缩小到国家/地区一样。你可以更快地将信寄给他们。
最后,我有一个关于以太网接口的问题。ETH0、ETH1 等只是以太网端口的通用名称吗?那么,如果我的笔记本电脑有一个以太网端口,它也经常被称为 ETHO 吗?同样,交换机以太网端口是否也以相同的方式枚举(ETH0、ETH1、ETH2)。
我不知道你所说的“通用名称”是什么意思,
但无论如何,我不知道...我知道它的意思,而且我在 Windows 中使用过它,但我不知道这个名字的性质 - 特别是在 Windows 中,几乎从未在 Windows 中看到过这样的名字,但我认为也许是一个名为 tcpdump 的程序(最初是一个 *nix 程序)但有一个 Windows 版本,因此可以在 Windows 上运行,并这样称呼它们..所以也许它至少在某种程度上是有点基本的,(例如,至少可能一个接口是 0,一个是 1,等等,即使 eth0 和 eth1 等更多的是 *nix 术语和 cisco ios 术语,或非 Windows 术语放在 Windows 上。