IPv6是一个好的设计的世界

2020-12-29 20:33:17

无论如何,IETF会议包含了很多有关IPv6的演示,这是应该取代IPv4的东西,这正是Internet运行的东西。 (有些人说IPv4已经被替换;有些人说它已经发生了。)除了那些有关IPv6的介绍外,还有很多人认为它很棒,有史以来最伟大的事情,他们非常确定它最终将在“ Any Day Now”中流行起来,而IPv4只是一大堆黑客,它们确实需要消亡,以便Internet可以再次变得优雅。

我认为这将是一个很好的机会,可以真正弄清楚正在发生的事情。为什么IPv6与IPv4相比如此复杂?如果它只是具有更多地址位的IPv4,那会更好

?但这不是,天哪,这是不是。所以我开始四处询问。这是我发现的东西。从前,有电话网络,它使用物理电路交换。从本质上讲,这意味着移动连接器,以便您的电话连接实际上只是一根很长的电线(" OSI层

1")。 A"租用线"是您从电话公司租用的很长的电线。您可以将导线放在导线的一端,然后将它们从另一端出来,固定的时间要长一些。您不需要地址,因为两端只有一台机器。最终,电话公司对此进行了优化。时分复用(TDM)和“虚拟电路交换”出生于。电话公司可以透明地以较低的比特率从多条线路中获取比特,将它们与多路复用器和多路解复用器组合在一起,然后让它们使用比以前更少的电线穿过电话系统的中间。进行这项工作有点复杂,但是就wemodem用户而言,您仍然将一端放在一边,而另一端伸出来。无需地址。

互联网(当时不称为互联网)建立在这些电路之上。您有一束电线,可以将比特放入其中,并将它们从另一端引出。如果一台计算机具有两个或三个接口,则在给出正确指令的情况下,它可以将一条线路的转发位转发到另一条线路,并且您所做的事情比每对计算机之间的一条单独的线路效率更高。这样就诞生了IP地址(第3层),子网和路由。即使那样,使用这些点对点链接,您也不需要MAC地址,因为一旦数据包进入网络,它就只能出现一个地方。您使用了IP地址来确定之后的位置。

同时,LAN被发明出来作为替代方案。如果要在本地站点将计算机(或终端机和大型机)连接在一起,则需要多个接口(每个星型计算机的每根导线分别一个星型配置)非常不便。为了节省电子设备,人们希望拥有一辆公共汽车。网络(也称为“广播域”,此名称稍后将变得很重要),在该网络中,可以将多个站点仅插入到一条电线中,并与插入同一条电线的任何其他站点进行对话。这些人与建立Internet的人不同,因此他们没有为此使用IP地址。他们都发明了自己的方案(第2层)。

早期的本地总线网络之一是arcnet,这在我心中很珍贵(写了第一个Linux arcnet驱动程序和arcnet诗集

在1990年代,Arcnet已过时很久了。 Arcnet第2层地址非常简单:仅8位,由网卡背面的跳线或DIP开关设置。作为网络所有者,配置地址并确保没有任何重复是您的工作,否则会引起麻烦。这有点痛苦,但是arcnet网络通常很小,所以这只是一种痛苦。几年后,以太网出现了,并通过在第2层地址中使用更多位(实际上是48个)来彻底解决了该问题。您可以为每个制造过的设备分配一个不同的(分片顺序)地址的足够位数,并且没有任何重叠。而这正是他们所做的!这样,以太网MAC地址就诞生了。

各种各样的LAN技术来了又去,包括我最喜欢的一种技术,即IPX(Internet分组交换,尽管它与&real和Internet无关)和Netware,只要所有客户端和服务器都能正常工作在单个总线网络上。您永远不必配置任何地址。它很漂亮,很可靠,而且可以正常工作。从根本上讲,网络的黄金时代。

当然,有人必须毁了它:大公司/大学网络。他们希望拥有如此多的计算机,以至于它们之间共享10 Mbps的单个总线网络都成为一个巨大的瓶颈,因此他们需要一种方法来拥有多个总线,然后互连-&internet,&internet;如果您愿意的话-这些巴士一起去。当然,您可能正在考虑!为此使用InternetProtocol,对吗?哈哈不。当时还不为人所知的Internet协议还不成熟或不流行,并且没人认真地考虑。 IPX上的Netware(以及当时的许多其他LAN协议)是一项严肃的业务,因此,正如严肃的业务一样,他们发明了自己的东西来扩展已经流行的以太网。以太网上的设备已经具有地址和MAC地址,这是人们可以同意的各种LAN协议中唯一的地址,因此他们决定将以太网地址用作其路由机制的密钥。 (实际上,他们称其为桥接和交换而不是路由。)

以太网地址的问题是它们在工厂顺序分配,因此它们不能分层。这意味着“桥接表”它不像现代IP路由表那样好,后者可以一次谈论整个子网的路由。为了进行有效的桥接,您必须记住可以在每个MAC地址上找到哪个网络总线。而且人类并不想手工配置它们,因此需要自动弄清楚。如果您有复杂的网桥网络,可能会有些复杂。据我了解,这就是导致生成树诗歌的原因,我认为我会留给它。诗歌在网络中非常重要。

无论如何,它通常都能正常工作,但是有点混乱,您时不时地泛滥成灾,而且路由并非总是最佳,而且调试起来几乎是不可能的。 (您绝对不能编写类似traceroute的方法来进行桥接,因为您不需要使它起作用的任何工具(例如,中间桥甚至具有地址的能力)都存在于普通以太网中。)

另一方面,所有这些桥接器均经过硬件优化。整个系统基本上是由硬件人员发明的,是一种愚弄软件的方法,它不了解多条总线以及它们之间的桥接,无法在大型网络上更好地工作。硬件桥接意味着桥接可以非常快速地进行-就像以太网可以进行的一样快。如今,这听起来并不很特别,但是在当时,这很重要。以太网速度为10 Mbps,因为您可以通过将一堆计算机同时放置在网络上来使其饱和,而不是因为任何一台计算机都可以达到10 Mbps。那是疯狂的谈话。

无论如何,关键是,桥接是一团糟,无法调试,但是速度很快。

在发生所有这些事情的同时,那些Internet人士正变得忙碌起来,并且当然对酷炫廉价LAN技术的发明并不盲目。我认为大概是在这个时候ARPANET实际上已重命名为Internet,但是我不确定。可以这么说,因为如果我有信心的话,故事会更好。

在某些时候,事情发展了,从通过点对点的长距离链路连接各个Internet计算机,到通过点对点的链路将整个LAN连接在一起的愿望。基本上,您需要沿距离的桥梁。

您可能会想,嘿,没什么大不了的,为什么不建一个长的距离桥并完成它呢?听起来不错,没用。我现在不会详细介绍,但是基本上问题是拥塞控制

。以太网桥接的一个深层的秘密是,它假定您的所有链接都具有相同的速度,并且/或者完全不拥塞,因为它们无法减慢速度。您只需以最快的速度爆炸数据,然后期望它会到达。但是,当您的以太网速度为10 Mbps,而点对点链接的速度为0.128 Mbps时,这是完全没有希望的。另外,通过泛洪所有链接以找出正确的路由来确定路由的想法(这是桥接通常有效的实际方式),对于慢速链接非常浪费。次优路由是低延迟和高吞吐量的局域网上的烦恼,它在速度慢,价格昂贵的长距离链路上令人讨厌。它只是无法扩展。幸运的是,那些互联网人(如果还被称为互联网)一直在解决一系列确切的问题。如果我们可以仅使用Internet的东西将以太网总线连接在一起,那么我们将处于良好状态。

因此,他们设计了"帧格式"用于通过以太网(和Arcnet,以及其他所有类型的LAN)的Internet数据包。

需要解决的第一个问题是,现在,当您将Internetpacket放在网络上时,就不再清楚应该听哪一台机器了。并可能继续前进。如果在同一以太网段上有多个Internet路由器,则无法让它们全都接起来并尝试转发。这样就存在数据包风暴和路由循环。不,您必须选择应该在以太网总线上选择哪个路由器。我们不能仅使用IP目标字段,因为我们已经将其用于最终目标,而不是路由器目标。相反,我们在以太网帧中使用其MAC地址来标识所需的路由器。

因此,基本上,要设置本地IP路由表,您希望能够说出类似的内容,即通过MAC地址为11:22:33:44:55:66的路由器将数据包发送到IP地址10.1.1.1。 "这就是您要表达的实际内容。这个很重要!您的目的地是IP地址,而您的路由器是MAC地址。但是,如果您曾经配置过路由表,则可能会注意到没有人这样写路由表。相反,由于操作系统的TCP / IP堆栈的编写者很顽固,您可以编写类似“通过IP地址192.168.1.1的路由器将数据包发送到IP地址10.1.1.1的东西”。

实际上,那实际上只是使事情复杂化了。现在,您的操作系统必须首先查找192.168.1.1的以太网地址,找到出口11:22:33:44:55:66,最后生成具有目标以太网地址11:22:33:44的数据包: 55:66和目标IP地址10.1.1.1。 192.168.1.1在数据包中无处显示;它只是人类层面的抽象。

要完成这一毫无意义的中间步骤,您需要添加ARP(地址解析协议),这是一种简单的非IP协议,其作用是将IP地址转换为以太网地址。它通过向本地以太网总线上的所有人广播,要求所有人都拥有特定的IP地址来回答问题。如果您有网桥,则它们都必须将所有ARP数据包转发到其所有接口,因为它们是以太网广播数据包,而这就是广播的含义。在拥有大量互连局域网的繁忙繁忙的以太网上,过多的广播开始成为您最大的噩梦之一。在wifi上尤其糟糕。随着时间的流逝,人们开始制造带有特殊黑客的网桥/交换机,以尽可能避免转发ARP,以尽力减少这一问题。某些设备(尤其是wifi接入点)只是伪造ARP答案来尝试提供帮助。但是,尽管有时这样做是必要的,但是做任何事情都是黑客。

时间飞逝。最终(实际上这花了相当长的时间),人们几乎完全停止了在以太网上使用非IP协议。因此,基本上所有网络都变成了一条物理线路(第1层),在abus上有多个站点(第2层),并通过网桥(gotcha!stilllayer 2!)连接了多个总线,而通过IP路由器(第3层)连接了这些总线间。

一段时间后,人们厌倦了手动配置IP地址(arcnetstyle),并希望他们自动配置以太网样式,除非从字面上讲是自动进行以太网样式的工具,因为a)设备已经用以太网地址制造,而不是IP地址,并且b)IP地址只有32位,不足以永远不重叠地永久制造它们; c)仅顺序分配IP地址而不是使用子网会使我们回到第一个平方:它将再次成为以太网,而且我们已经有了以太网。

这就是bootpand DHCP的来源。顺便说一下,这些协议是特殊的,例如ARP是特殊的(除非从技术上讲是IPpackets,它们假装不是特殊的)。它们必须是特殊的,因为IP节点必须能够在拥有IP地址之前传输它们,这当然是不可能的,因此它只是在IP头中填充了无用的内容(尽管RFC指定了无用的内容),所以这些头可能也被排除在外。 (您知道这些IP头是胡说八道,因为DHCP服务器必须打开Rawsocket并用手将其填充;内核IP层无法做到这一点。)发明了一种不是IP的全新协议,于是他们假装是IP,然后他们感觉很好。好吧,当人们发明DHCP时会感觉很刺激。

无论如何,我离题了。这里的主要细节是,与真正的IP服务不同,bootp和DHCP需要知道以太网地址,因为毕竟,他们的工作是宣告以太网地址并为您分配IP地址。它们基本上是ARP的反向,但我们不能这么说,因为有一个协议叫RARP,实际上是ARP的反向。实际上,RARP可以很好地工作,并且与bootp和DHCP一样,但要简单得多,但是我们不谈论它。

所有这一切的关键是,以太网和IP越来越紧密地交织在一起。如今,它们几乎密不可分。很难想象没有48位MAC地址的网络接口(ppp0除外),也很难想象没有IP地址的网络接口可以工作。您使用IP地址编写了IProuting表,但是当您通过IP地址命名路由器时,您当然知道自己在说谎。您只是间接地说您要通过MAC地址进行路由。您将拥有ARP(可桥接但不是真的)和DHCP(DHCP是一个IP数据包,但实际上是一个以太网协议),依此类推。

而且,我们仍然同时具有桥接和路由功能,并且随着LAN和Internet分别变得越来越复杂,它们都变得越来越复杂。桥接仍然主要是由控制以太网标准的人基于IEEE定义的硬件。路由仍然主要是由IETF(控制Internet标准的人)基于和定义的软件。这两个团体仍试图假装另一个团体不存在。网络运营商基本上是根据桥接器和路由的选择来选择桥接器和路由,这是他们非常讨厌的,这实际上是他们非常讨厌的,这意味着他们尽可能多地使用桥接和路由。

实际上,桥接已完全失控,人们决定将第2层桥接决策完全提取到更高的层次(当然,使用在IP上分层的协议在网桥之间交换配置!),因此可以对其进行集中管理。这就是所谓的软件定义网络(SDN)。与让您的交换机和网桥做他们想做的事情相比,它很有帮助,但是从根本上来说,这也很愚蠢,因为您知道什么是软件定义的网络? IP。从字面上看,它一直是您用于互连的网络的软件定义网络,但网络太大了。但是问题是,IPv4最初太难了,无法进行硬件加速,无论如何,它并没有得到硬件加速,而配置DHCP确实是一个巨大的痛苦,所以网络运营商刚刚学会了如何桥接越来越大的事情。如今,大数据中心基本上仅是SDN,而您也可能根本不使用数据中心中的IP,因为没有人路由数据包。它只是一个大型的虚拟总线网络。

好故事吧?对。现在假装这一切都没有发生,我们回到了1990年代初,当时实际上大多数事已经发生了,但是IETF的人们反正假装那件事没有发生,而IETF却在假装。即将到来的灾难是可以避免的。这是好部分!

在上面那段长篇故事中,我忘了提到一件事:在整个事件链中的某个地方,我们完全停止使用总线网络。以太网实际上不再是总线。它只是假装是公共汽车。基本上,我们无法获得以太网著名的CSMA / CD

为了保持速度的增长而工作,所以我们回到了古老的古生物学。我们使用交换机捆绑的电缆,以便我们可以将每个工作站的电缆一直延伸到中心点。墙壁,天花板和地板上都装满了大而厚的昂贵的以太网捆绑,因为我们无法弄清楚如何使公交车正常工作……第一层。当您想到这一点时,实际上有点好笑。如果发现不好的事情。实际上,即使是wifi,这也是疯狂的额外奖励,它是终极的巴士网络,而实际上,每个人都共享同一个露天" bus" -最普遍地以一种称为“基础结构模式”的模式使用wifi。模拟一个巨大的星形拓扑。如果您有两个连接到同一接入点的wifi站,即使它们可以很好地听到对方的声音,它们也不会直接相互通信。他们将数据包发送到接入点,但寻址到另一个节点的MAC地址。然后,接入点将其反弹回目的地节点。

让马让我为您审查一下。有一个小小的陷阱。当节点X想要通过IP路由器Y,WiFi接入点A发送到Internet节点Z时,数据包是什么样的?只是为了画一幅画,这就是我们想要发生的事情:

Z是IP目的地,因此显然IP目的地字段必须是Z。Y是路由器,我们在上面了解到,我们通过在以太网目的地字段中使用其以太网MAC地址来指定路由器。但是在wifi中,由于各种原因,X不能只是向Y发送一个数据包(包括他们不知道彼此的WPA2加密密钥)。我们必须发送给A。您可能会问我们将A的地址放在哪里?

没问题! 802.11有一个叫做三地址模式的东西。 他们在每个帧中添加一个第三以太网MAC地址,因此他们可以讨论真实以太网目标和中间以太网目标。 最重要的是,还有一些位域称为" -to-AP"。 和" from-AP," 分别告诉您数据包是从站到AP还是从AP到站。 但是实际上它们同时可以同时适用,因为这就是您制作wifi中继器(AP向AP发送数据包)的方式。 说到无线中继器! 如果A是转发器,则它必须一路发送回基站B,如下所示: X-> [wifi]-> A-> [wifi-中继器]-> B-> [wifi]-> Y-> [互联网]-> ž X-> A使用三地址模式,但是A-> B有一个问题:以太网源地址是X,以太网目的地址是Y,但是空中的数据包实际上是从A发送到B的; X和 ......