当计算机 A(例如在巴黎)想要向服务器 B(例如在柏林)发送 HTTP 请求时,据我了解,(在所有上层之后)计算机 A 必须向允许访问 Internet 的默认网关(即路由器)发送以太网帧。
但是路由器(例如,这个花 30 美元购买的家用简单路由器)如何知道将 HTTP 请求引导至适当机器的所有适当跳数?
我知道静态和动态路由,但我们仍然需要一些“初始路由”(据我所知)。那么,创建“初始路由数据”的魔法是什么呢?如果不同网络的不同机器之间发送数据包的整个过程仅取决于路由,那么我们为什么要使用 ISP?路由器如何知道到下一跳的所有适当路由(以及它如何知道下一跳是合适的),数据不是太多了吗?
答案1
但是路由器(例如,这个花 30 美元购买的家用简单路由器)如何知道将 HTTP 请求引导至适当机器的所有适当跳数?
就你的情况而言,作为住宅用户,它不会。你的 30 美元路由器只知道非常最少的路由:一条到你的局域网,另一条到“世界其他地方”(默认路由),与你的电脑的路由没有太大区别。(你可以看看路由器自己的状态页面;通常它会有一个“路由表”部分某处。)
相反,你通常依赖下一个路由器,即 ISP 的路由器,了解完整的 Internet 路由表。(通常 ISP 的网络足够大,因此工作会被拆分;第二跳处理到 ISP 其他客户的内部路由,而第三跳处理外部连接和完整的 Internet 路由表,大致如此。)
然而,较大的客户,例如中型/大型机构,做如果他们想要并且拥有硬件,则可以从其 ISP 接收完整的 BGP 反馈 - 尤其是如果他们使用多个 ISP,以便他们可以从每个 ISP 中选择“最佳”路由。(也就是说,它不限于“ISP”,任何人都可以访问它。)
最后,在互联网上,路由器不知道全部适当的跳跃;他们只知道紧接下一个任何给定目的地的下一跳。即使发送者想要指定完整路径,他们也无法指定1。这意味着你的 30 美元路由器只需要知道一个可以处理所有事情的“下一跳”,而不需要关心之后会发生什么。
1(这并不适用于所有路由,例如路由器之内ISP 可能会使用 MPLS 预先计算整个 ISP 网络的精确路径,但对于路径之间互联网上的网络。
我知道静态和动态路由,但我们仍然需要一些“初始路由”(据我所知)。那么,创建“初始路由数据”的魔法叫什么名字?
最基本的“初始”路由来自直接连接 - 当两个网络将其路由器物理连接在一起时,互连最终会成为一个独立的微型子网,其中每个路由器都会自动知道如何通过位于同一子网中的其他路由器来到达对方(与常规 LAN 子网的工作方式完全相同,只是更小;对于 IPv4 通常为 /30 或 /31)。
+-- ISP 1 --+ +-- ISP 2 --+
| | | |
| Router1 ~~~{192.0.2.64/30}~~~ Router2 |
| | | |
+-----------+ +-----------+
一旦存在这样的连接,路由器就可以互相使用 IP – 并且如果配置了其他路由,它们可以互相用作“下一跳”或“网关”。
当连接独立网络(在 ISP 之间或类似网络)时,运营商通常会在路由器之间设置 BGP,以自动进行路由交换。(每个路由器都将设置为通告运营商的整个网络,例如,Router2 将通过 <Router1> 了解“<ISP1network>/16”。)这些 BGP 通告会传播到世界各地所有运行 BGP 的其他路由器,从而建立“全局路由表”。
同一网络内的路由器之间的连接工作方式相同 - 在直接连接的子网上建立初始通信,这可用于静态路由或 Babel 或 OSPF 等动态协议。机构可能使用 OSPF 在其网络中分发精确的子网路由,然后使用 BGP 将聚合路由通告到互联网。
以及路由器如何知道到下一跳的所有适当路由(以及如何知道下一跳是否合适),
如上所示,到“下一跳”的直接路由是自动知道的,而到更远目的地的路由是通过动态路由协议(网络之间的 BGP、网络内部的 OSPF 或 Babel 或 iBGP 或 IS-IS)接收的。
选择“最佳”路由是该路由协议的主要工作。根据协议的不同,它可能仅基于跳数(最短路由 = 首选),也可能考虑每条路径的相对“成本”,或者可能根据操作员设置的策略首选某条路径。
数据是不是太多了?
可以。即使有聚合,IPv4 路由表实际上也长大的它非常大,已经多次达到旧路由器的限制(例如,当它达到 512k 条路由,然后是 1M 条路由时 - 只需搜索“ 512k bgp
”天)。
IPv6 路由表要小得多——30 美元的路由器无法处理它,但 200 美元的路由器可能可以。
(部分原因是 IPv4 地址稀缺;运营商无法再获得足够大的 IPv4 地址块,而被迫收集大量微小的地址块,有时会导致同一运营商有数百条路由。而在 IPv6 中,他们可以轻松获得一个大块。)
如果不同网络的不同机器之间发送数据包的整个过程仅取决于路由,那么我们为什么要使用 ISP?
ISP 还负责处理物理互连——不仅为客户,还为(如今 100+ Gbps)链路之间ISP。他们还处理大量路由表,这样你的 30 美元路由器就不必处理这些路由表,而且通常负责使网络比随机的链接网更高效地运行。这和你使用电话接线员而不是直接给每个朋友接线的原因大致相同。
你能在没有“ISP”的情况下建立自己的小型网络——例如,存在几个通过无线电链路建立的“社区网络”(Freifunk 和类似网络),并且如前所述,许多大型机构确实自行运行 BGP,并且与 ISP 不相上下。(毕竟,最初没有任何ISP,只是一群大学和研究实验室。)
最终,这实际上只是建立物理链路和分配路由的问题。然而,一旦网络规模足够大和/或变得足够复杂,一些更有能力的参与者将不可避免地成为那些无法再直接参与的参与者的“ISP”。
然后据我了解,(在所有上层之后)计算机 A 必须将以太网帧发送到可以访问互联网的默认网关(即路由器)。
最后说明一下;在讨论互联网时,重点不是以太网帧而是 IP 数据包,因为这是需要传递的端到端消息,而以太网帧仅通过特定链路传递该消息。
相同的 IP 数据包最终可以通过以太网链路进行路由,然后通过 ATM 电路(ADSL 最初是 IP-over-ATM)、通过 X.25 呼叫(早期)、通过 SDH/SONET(曾经是大型运营商网络的最常见选择)、通过 RS-232 串行(拨号调制解调器和早期形式的手机“网络共享”)、通过信鸽等进行路由,并且其帧在每次跳跃时都会重建。
(尽管有是处理以太网 L2 寻址的路由协议和路由及转发整个以太网帧的系统,它们仅在单个网络内部使用,并且对 IP 和整个互联网是不可见的;这样的路由以太网连接仍然会显示为到 IP 的单跳。)
答案2
因此,正如所述,您的问题非常广泛,所以我只能触及表面,但我认为您忽略的是路由不是预先决定的(事实上,连接中的多个数据包从源到目的地可能会采用截然不同的路径),并且没有任何一方能够看到所采用的整个路径(他们只能看到他们所占据的路径的片段)。
相反,路径上的每一跳都是由跳转路由器和跳转路由器之间专门确定的。考虑从 192.168.0.7 到 10.1.2.3 的路径:
Router1(192.168.0.1) doesn't know 10.0.0.0/8. uses default route via gateway 192.168.5.1.
Router2(192.168.5.1) knows that 10.0.0.0/8 is available on gateway 10.0.0.1.
Router3(10.0.0.1) knows that 10.1.0.0/16 is available on gateway 10.1.0.1.
Router4(10.1.0.1) knows that 10.1.2.0/24 is available on gateway 10.1.2.1.
Router5(10.1.2.1) delivers the packet to 10.1.2.3/32.
这是一个非常简单和通用的例子,但实际上它会变得非常复杂,但请注意,你越接近目的地,你拥有的关于如何到达目的地的信息就越具体。
所以在您的例子中,英国的系统只需要知道如何到达其 ISP 互连。ISP 只需要知道如何到达欧洲大陆的连接合作伙伴。该合作伙伴只需要知道如何到达德国合作伙伴网络。它会不断穿过地区、ISP 等,直到到达远程目的地。
一般来说这被称为路由聚合,并允许互联网核心的巨型路由器到达任何目的地,而无需托管和维护数百万条路由。
至于为什么需要 ISP,这或多或少与您需要电力供应商为您的 PC 供电的原因相同。如果您的房屋未连接到电力公司的配电网络,则不会有电进入房屋,因此如果您插入电灯,它不会亮。ISP 具有与较大网络或主干网本身的上游互连,因此如果没有 ISP,您就没有人可以发送/接收流量。
答案3
30 美元的家用路由器的功能比你想象的要少得多。将它削减到最低要求,它需要
能够读取以太网帧并识别流量的目标 IP(如果进行的是 NAT,则识别源 IP、源和目标,这很可能是这样的)
了解其 LAN 端口上可访问哪些设备/IP - 这时网络掩码就派上用场了
知道哪个路由器知道所有其他流量去往何处以及如何到达它 - 即默认路由 重要的是,除了直接与之对话的路由器之外,它不需要了解任何有关动态路由或路由器的信息。
您可以通过查看其路由表(类似于计算机上的路由表,但默认路由的接口 - 0.0.0.0/0 - 与不同的接口相关联)来查看 3 中的信息。它因路由器而异,但如果您可以在其上访问控制台 - “route -n”或“ip route show”通常会显示该表。
对于处理 NAT 的路由器(大多数小型路由器),它们还需要维护一个查找表,其中包含至少 4 条信息 - 源 IP、目标 IP 和端口。然后,它会查看从局域网到广域网或从广域网到局域网的每个数据包,并用 IP 重写源 IP 或目标 IP,以便它可以在多台计算机之间共享单个“真实”IP。它只需要了解最近的连接 - 而不是整个互联网。
(值得指出的是,真正便宜的路由器有时会出现缺陷,因为它们无法维护足够大的路由表来容纳局域网客户端的数量。