从物理层到数据链路层
也从上篇我们创造一个计算机网络,你会去怎么设计?,追溯到计算机网络互联的本质就是通信问题,所以从物理层解决使用何种信号来传输比特的问题。
再从物理设备中的集线器,聊到二层的交换机,二层所指的是数据链路层。
但为什么要使用数据链路层,数据链路层又是怎么构成的? 我们还没有聊过;所以我们深入数据链路层一探究竟。
什么是数据链路层?
什么是链路?
在聊数据链路层前,先知道什么是链路,然后什么才是数据链路层?
所以镜头拉回到上篇中我们所说的,在最初从一个计算机到另一个计算机的一段是一条物理线路,所以最初网络中的结点是计算机,而后来网络结点从集线器,交换机到路由器等等。
所以从计算机之间的互联到集线器,再从集线器到交换机 ,而后到路由器。你会发现网络的一个规律,网络通过不同的结点,将覆盖到更大的范围。 (网络像生物出于本能的演化一样,将触角伸向每个距离)
什么是数据链路层?
所以物理链路可以说是通过各种传输介质和相应通信形成的物理线路。
但数据链路则是在物理层之上,在通信双方在需要进行数据通信时,在设备和相应的通信作用下建立的逻辑链路(也可以说是一条虚拟链路)。
所以,通俗说物理链路是硬件,而数据链路是软件(如协议的实现)
那为什么要有数据链路层,数据链路层又是怎么构成的?为什么要有数据链路层?
数据链路层是怎么构成的其实只是果,为什么要有数据链路层才是因,所以我们直指,为什么要有数据链路层?
我们知道物理层解决了使用何种信号来传输比特的问题,也就是解决了设备之间的通信问题,但通信并不像想象中那么简单,物理层所做的只是接收一个原始比特流,并试图将它传递给目标机器,所以物理层没有解决比特传输出现错误的问题。
例如通信中的信道上存在干扰。“怎么知道一组数据开始和这组的结束呢?”
于是我们可以从数据链路层是怎么构成的?找到为什么要有数据链路层的答案。
数据链路层是怎么构成的?
帧
所以为了解决上面这个问题,数据链路层提出了将比特封装成一个新的数据链路层上的传输单位,帧。
只要在接收端收到物理层上交得比特流后,将前后分别添加首部和尾部做标记,那么就可以从收到的比特流中识别这一组的开始和结束。 如下图所示:
在上图中,还可以看到帧在链路层中都规定了所能发送的帧长度上限,最大传送单元MTU决定的。
当数据组成的文本文件时,是由可打印的ASCLL码所组成,所以帧定界可以使用特殊的帧定界符。
控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束
那么问题又来了,当数据中的某个字节的二进制代码恰好和SOH或EOT这种控制字符一样怎么办呢?
也就是说二进制中刚好夹杂着有00000100标识着EOT,将被接收端错误地解释为 “传输结束” 的控制字符,而在其后面的数据因找不到“SOH”被接收端当作无效帧而丢弃。
数据链路层就会错误地“找到帧的边界”,把部分帧收下(误认为是个完整的帧),而把剩下的那部分数据丢弃。
这种情景往往会严重干扰到帧的分界,所以,为了解决这个问题,发送方的数据链路层在数据中突然出现的每个标志字节的前面插入一个特殊的转义字节(ESC)。
因此,只要看它数据中标志字节的前面有没有转义字节,就可以把作为帧分界符的标志字节与数据中出现的标志字节区分开来。
差错检测
解决了上面如何标识每一帧的起始和结束位置之后,又面临新的问题。
接收到的比特的值可能已经发生变化,可能少于、等于或者多于发送的比特数量。发送端发送比特1,而接收端收到比特0,接收端无法知道接收的是否正确?
所以就有了误码率BER(Bit Error Rate),是传输错误的比特占所传输比特总数的比率。
而数据链路层广泛使用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。
这是差错检测中最基本的一种,比特差错,而另一种是我们知道在数据链路层,接收端会把接收到的数据以帧为单位。而帧也会出现差错,也就是帧丢失、帧重复或帧失序 的情况。
为了解决帧的差错,增加了帧编号、确认和重传机制。
在传输过程中,如果发送方收到了关于某一帧的确认,那么它就知道这顿已经安全地到达了。相反,如果是否定意味着传输过程中产生了错误,所以这帧必须重传。
但是重传也有明显的问题,如果有帧重传多次(也有发送多次的情况),那么接收端也会多次接收到同一帧。所以为了避免发生这样的问题,就给帧分配编号(序号),这样接收端就可以根据帧的编号来区分原始帧和重传帧。
到这里,你会发现数据链路层在做的事情是在物理层之上控制数据的传输,所以除了物理线路以外,在数据链路层还必须有通信协议来控制这些数据的传输。
什么是协议?
于是我们提出了协议, 其实协议在物理层早就有了,当你回过头你会发现在 物理层数据 与 电信号交换其实也是一种协议(彼此都遵守着一套规则)。
物理层的协议解决的是通信,但数据链路层的协议是因为物理层中的硬件来自各个不同的设备厂商,而各个不同的厂商你做你的设备,我做我设备,导致了各种不兼容的麻烦和错综复杂。
所以设备厂商按照协议来制作生产它的网络设备,那么这些不同的网络设备之间就可以形成互操作,就说我的网卡跟你这个网卡,虽然咱们出身不同,来自于不同的厂商,但是,只要遵守同样的标准,咱们就可以工作。
有了协议的出现,网络又可以进一步规模化。
PPP 协议
目前使用得最广泛的点对点的数据链路层协议中的PPP(Point-to-Point Protocol)协议,也就是一对一连接的计算机协议。
数据链路层是在物理层的上一层,所以本质上数据链路层就是物理链路+协议。
把实现控制数据运输的协议的硬件和软件加到链路上就构成了数据链路。
于是从数据链路层再到网络层
但是从数据链路层,到实际场景中的网络环节又新一轮的错综复杂,因为网络中间有各种各样的线路和分叉路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择。
IP地址的由来
在上一篇中,我们提到过为什么有了 MAC地址 还需要 IP地址? 也引聊过IP地址,即互联网协议地址,所以IP地址归根结底也是个协议。
(上篇文摘放在这儿,就不再赘述,感兴趣的朋友可以回顾或者没看过的伙伴可以也可以看看的。)
为什么有了 MAC地址 还需要 IP地址? 世界存在着各式各样的网络,它们使用着不同的硬件设备。而如果要是这些相互不同的网络要互相通信,那么就意味着要面对因为不同硬件设备而带来的硬件地址转换上的复杂工作。 所以由用户或设备主来完成这项工作几乎是不可能的事。但如果可以让所有用户或者设备主共同遵守一种统一的方式,那么就可以把这个复杂问题解决了。 —— 《如果把网络原理倒过来看,从无到有,一切都清晰了(上) 》
所以连接到互联网的各类主机只需拥有统一的IP地址,它们之间的通信就像连接在同一个网络(虚拟互连的网络)上那么简单方便。
IP地址正是网络层的基石。
那IP地址都是由什么构成的?
对于IP地址构成,其实你再熟悉不过,通过以点分隔的4组数字,例如:
10.16.x.x
你看,就可以标识一个服务器的IP地址。
而我们使用最广泛的是IPv4地址,也就是互联网通信协议第四版,由 32 位正整数表示,在计算机中就以二进制的方式处理。
不过,人们为了方便记忆采用了点分十进制的标记方式,也就是将 32 位的IP地址 以每 8 位为组,共分为 4 组,每组以 “.” 隔开,再将每组转换成 十进制。如下图所示。
而将二进制的32位做计算,也意味着 IP 地址最大值只允许 43亿 台计算机连接到网络。
232=42949672962^{^{32}} = 4294967296232=4294967296
但在如今不仅计算机有IP地址,手机等需要联网的电子设备都配了IP地址,那么就存在一个很明显的问题是IPv4在以比设计时预计更快的速度耗尽。
这也是从分类网络、划分子网,无类别IP和最终决定重新设计基于更长地址的互联网协议的诱因。
IP 地址的发展史
从分类IP地址->子网的划分->超网的诞生
分类IP地址
在互联网起初,IP 地址很充足,而为了便于管理,所以在起初的阶段使用了分类IP地址。
分类IP地址由 网络号(标识哪个网络) 和主机号(标明在哪台主机)组成。
IP地址 = {网络号,主机号}
网络号 用来负责标识该 IP 地址是属于哪个网络的。而 主机号 则负责标识不同的主机。
所以由网络号和主机号组成的IP地址也被称为两级IP地址。
通过网络号在最前面指明 IP 地址的类别。IP地址分为五类,分别 A类、B类、C类、D类、E类。可以根据IP地址中从 第1位 到 第5位 的比特来区分。如下图所示。
而被分类IP地址好处很明显,例如,你让剽悍的种子去你的小区找你玩,你告诉我你住8楼的88号房,但小区可不止一栋楼,且每栋楼层高的都有8楼;那你不就是忽悠剽悍的种子吗?所以如果你给小区的每栋楼标识A、B、C栋后,就能很快知道你所在位置。
所以IP分类后通过网络号和主机号,可以让路由器还是主机更好的解析到一个IP地址。例如,只要判断 IP 地址的第一位是否为 0,如果为 0 则是 A 类地址,第二位是 0,则是 B类地址,以此类推。如下图所示。
分类地址的简单明了、让交换机选路简单(通俗说就是更快的找到你)。
但 A、B、C类有个问题,就是IP地址空间的利用率很低,所以不能很好的与现实网络匹配。
而且分类地址,在不管哪一类地址,网络号和主机号所占的长度都是固定不变的,只要你确定了这个网络号,那就是固定长度的。 这样用起来就很不灵活,而且也直接导致了IP地址资源的浪费。
例如,如果企业或单位在选择 A 类地址使用时,网络可连接的主机数就超过千万规模,实在是太多。而就算 B 类地址,它包含的最大主机数量也超 6 万多台主机放在一个网络下面,多数企业也达不到这个规模。至于 C 类地址又实在太少,只有 254 个,考虑未来可能扩容,也不愿意使用。
而且我们也知道随着从PC端再到移动端,联网设备规模递增,IPv4在以比设计时预计更快的速度在耗尽。
所以我们不得不为此用新的方式来解决。
子网掩码
于是提出子网的划分,来解决IPv4地址的问题,但在说子网划分前,我们知道在分类IP地址后,IP让路由器选路更简单,所以新要解决IP地址的方式,既要能解决IPv4不够使用的问题,也要能兼顾分类IP地址让选路更简单的优势。
所以为了能更便于查找路由表选路,就先有了 子网掩码,掩码顾名思义是掩盖掉主机号,也只有网络号。
子网掩码 只要将 IP地址 按位计算 AND,就可得到网络号。
在还没划分子网时,同样也可以使用子网掩码。因此,默认子网掩码和某个不划分子网的IP地址AND,就应当能够得出该IP地址的网络地址来。这样就可以不用查找该地址的分类位也能知道这是哪一类的IP地址。
例如,A 类地址的默认子网掩码是255.0.0.0;B 类地址的默认子网掩码是255.255.0.0;C 类地址的默认子网掩码是255.255.255.0。
如下图所示(三类IP地址的网络地址和相应的默认子网掩码)。
现在互联网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。
划分子网
接着来到划分子网,划分子网是将所属的物理网络划分为若干个子网。所以可以看到,划分子网是一个单位内部的事情。在这单位以外的网络看不见这个网络内部是由多少个子网组成,所以对外仍是一个网络。
在上面我们知道可以通过子网掩码划分出网络号和主机号,而上子网掩码还有一个作用,那就是划分子网。
子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址。
没有子网划分的IP地址是这样的:
IP地址 = {网络号,主机号}
子网划分后的IP地址是这样的(从两级IP地址变为三级IP地址):
IP地址 = {网络号,网络,主机号}
如下图所示:
不过,划分子网虽然在一定程度上缓解了互联网在发展中遇到的困难,但IPv4的问题还任重而道远。
B类地址在1992年已分配了近一半,眼看很快就将全部分配完毕。
也就是说,随着时间的流逝,最终整个IPv4的地址空间将全部耗尽。
无类别地址 CIDR
接着来到了,无类别地址,全称是 Classless Inter-Domain Routing,简称 CIDR。从名称可以看出来,它就是用来解决分类地址的问题的。
无类别地址有着不同的表示形式,192.0.0.1/n,它的表示方法是在IP地址加上斜线,而N指的是它网络地址的范围。
如下图所示,比如 192.x.x.1/25,这种地址就是 CIDR表示形式,其中 /25 表示前 25 位是网络号,剩余的 8 位是主机号。
那么我们怎么判断无类别IP是不是同一个网络的IP地址呢?
如上图所示,只要比较前25位,就可以发现它是是不是同一个网络下。也就是说它的网络地址前25位我们把它转换为二进制以后看到前25位是这样的,那么就是同一个网络。
无分类的方式出现后,意味着不再有分类地址的概念。但我们知道 IPv4 的地址是 32 位的,可以提供约 42 亿个地址,但是早在 2011 年 IPv4 地址就已经被分配完了。
所以,最终决定重新设计基于更长地址的互联网协议。
IPv6
所以 要解决 IP 地址耗尽的问题,最(简单粗暴)根本的办法是采用基于更大地址空间的新版本 IP 协议,即IPv6。
IPv6 带来更大的地址空间,采用 128 位地址,让IP地址多如沙粒子,约340亿个。
2128=3402823669209384634633746074317682114562^{^{128}} = 3402823669209384634633746074317682114562128=340282366920938463463374607431768211456
IPv6 的地址是128位的,这可分配的地址数量是大的惊人,IPv6 号称可以保证地球上的每粒沙子都能被分配到一个 IP 地址。
IPv6 不仅仅只是可分配的地址变多了,它还有非常多的亮点。
但 IPv6 除了有更多的地址之外,还有更好的安全性和扩展性,说简单点就是 IPv6 相比于 IPv4 能带来更好的网络体验。
以及,IPv6 可自动配置,即可以实现自动分配IP地址,也就是即插即用。IPv6 去掉了包头校验,而且简化了首部结构,减轻了路由器负荷,提高了传输的性能。IPv6 还有应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能,也就提升了安全性。
ARP 协议 & RARP 协议:这粗活让我来
IP地址让网络层简单易用,它们之间通信就像连接在同一个网络(虚拟互连网络)上那么简单方便。
但是这些东西并不是提出一个IP地址的中间层就可以解决的,发送和接收所需的目标地址,也就是 MAC地址(硬件地址)到网络上需要解析的 IP地址(网络地址),或者 IP地址来到具体主机时需要解析成 MAC地址。这种粗活还是得有人来干,于是就来到 ARP协议 和 RARP协议。
ARP协议:地址解析协议
当在网络层中传输数据的时,需要确定源 IP 地址和目标 IP 地址后,就会通过主机的路由表确定下一跳。直到从网络层抵达具体主机时,下一层就是数据链路层,所以我们还要知道下一跳的 MAC 地址(硬件地址)。
所以, IP 地址 通过 ARP 协议 解析到具体主机MAC 地址的协议,被称为ARP(Address Resolution Protocol),地址解析协议。
ARP协议负责把 IP 地址解析为(MAC)硬件地址。
那 ARP 是怎么知道目标 MAC 地址的?
简单地说,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,请求和响应的两种类型包来确定 MAC 地址。
这个报文包含了发送方的 MAC地址 和 IP地址 以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询会在网络层中进行广播。
而当同个链路中的所有设备收到 ARP 请求时,就拆开 ARP 请求包中内容,如果 ARP 请求包中的目标 IP 地址与自己的 IP 地址一致就将自己的 MAC 地址加入 ARP 响应包返回给主机。
而调用ARP的复杂过程都是由计算机软件自动进行的,所以对用户来说是看不见这种调用过程。
有把 IP 地址解析为(MAC)硬件地址的协议,自然也需要把MAC地址解析为IP地址的协议。(说到底,网络通信是双向的过程,怎么来的,也是怎么回)
RARP 协议:反向地址解析协议
RARP 反向地址解析协议,全称(Reverse Address Resolution Protocol),顾名思义,ARP 协议是已知 IP地址求 MAC地址,那 RARP 协议则相反,它是已知 MAC 地址求 IP 地址。
那RARP又是怎么知道目标 IP 地址的?
当服务器上注册了设备的 MAC地址。会将这个设备接入到网络,于是:
该设备会发送我的MAC地址,等待响应我的IP地址请求消息。
RARP协议接到这个请求消息后会返回MAC地址和IP地址响应给这个设备。
最后,设备通过 RARP 就可以收到的应答信息,来设置自己的 IP地址。
ICMP:互联网控制报文协议
ICMP 全称是Internet Control Message Protocol,也就是互联网控制报文协议。
那即是控制报文协议,其控制是怎么体现的呢?
我们知道网络数据在复杂的网络中传输,难免就会遇到各种问题。
所以在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因可以 由 ICMP 负责通知。
所以ICMP协议可以在出现问题时做出消息来响应,以及报告遇到了什么问题后来调整传输策略,达到控制整个局面。
所以,ICMP 的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因,以及改善网络设置等。
ICMP 大致可以分为两类,一类 查询报文类型,用于诊断的查询消息。 另一类 差错报文类型,用于通知出错原因的错误消息。 如下图所示。
所以,ICMP协议用于在IP主机、路由器之间传递控制消息,实际上就是差错控制协议;可以说,弥补了IP协议没有差错纠正机制以及差错报告的缺憾。
与此同时,ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
到此,从物理网络到虚拟互联的网络
到此,从物理层到数据链路层,再到网络层;你会发现,从数据链路层起,到网络层,已构建起了所谓逻辑互联网络也就是虚拟互联网络。
虚拟互联网络让各种本来是客观存在的异同的物理网络,但是通过数据链路层,网络层,协议等就可以使这些不管形状,性能等各异的网络看起来好像是一个统一的网络。
也就是当你连接上网时,当和网上的主机进行通信时,就好像在一个单个网络上通信一样,你看不见它们互连各网络的具体异构细节。
所以随着网络触及每个角落时,你也能通过网络,跨越物理空间的限制,来到每个角落。
这让我想起了之前畅聊过的 《我从冯·诺依曼计算机体系,追溯到了JVM,一切原来如此!》 其中的一段话,操作系统的本质是将物理资源给虚拟化。
也就是如何将现实的物理资源(CPU、内存、磁盘)虚拟化成一台能被你通过盯着屏幕、敲着键盘、划着鼠标就能操控现实的物理资源。 ——《我从冯·诺依曼计算机体系,追溯到了JVM,一切原来如此!》
从那时起我在想,元宇宙是不是从操作系统的虚拟化开始的呢?
所以如果我们的计算机(手机、电脑等)是一个个的虚拟世界,那网络就是这个虚拟世界的路,而路的作用就是连接。
路既是现实世界能进行自由穿梭的地基,虚拟世界上的路也是如此。
不过,只有路作为连接还不够,世界这么大,你会出现找不到抵达所在目的地的路。所以在网络上如果有像现实中的寄快递还是打出租车,只要你说出你要抵达目的地,就可以将你或者你的物品送达你的目的地;
(寄快递和打出租车本质上一样的,只不过前者送的是物品,而后者送的是人)。
而路由器则是组成IP网络最主要的选路设备。
路由器的构成:快递站点
IP地址指出所在何处,路由则是如何到达该处。—— 《如果把网络原理倒过来看,从无到有,一切都清晰了(上) 》
我们知道,整个的路由器结构可划分为两大部分:转发和路由控制。
转发的设备从集线器、交换机,再到路由器。在上篇中我们知道路由器是三层设备(对应OSI网络模型在网络层)。
从计算机到计算机的连接,再到网络和网络之间的连接则是通过路由器,所以让连接的范围更广依靠的就是转发。
正如有了各层的各司其职,路由器可以只根据目的站的IP地址的网络号进行路由选择。所以负责IP数据的选路和转发都是路由器。
路由选择
也知道每台路由器中都维护着一张路由表,所以在路由表中最重要的是目的网络地址(也就是IP地址)和下一跳地址。
如下图所示,路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
在发送数据时,首先要确定数据首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将数据转发给相应的下一个路由器。
不过,转发和路由选择有着区别,转发是路由器把收到的IP数据从路由器的端口转发到另一个端口。所以,转发所涉及到的,只不过是一个路由器。但路由选择所涉及到很多路由器,因为路由表是许多路由器协同工作的结果。
路由选择协议:静态和动态路由选择
从上面我们知道,如果没有这些路由表就无法转发数据包,IP数据包就是无头苍蝇,不知道该到哪里去。
那么问题来了,路由器是如何生成路由表的呢?
其实方式不外乎两种,一种是 人工设置或者 另一种自动获取,前者是静态路由协议,而后者是动态路由协议。
静态路由是明确知道某个IP地址段的方向,然后人工设定该路由表。 而动态路由是采用动态路由协议获取路由信息。常用的动态路由协议有RIP、OSPF、BGP等。
静态路由也叫做非自适应路由,其特点是简单和开销较小,但不能及时适应网络状态的变化。 对于很简单的小网络,可以通过用人工配置路由。
动态路由也叫做自适应路由,其特点是能较好地适应网络状态的变化。因此,动态路由选择适用于较复杂的大网络,但资源开销也比较大。
所以静态路由在简单且特殊的场景才通过人工配置,更多且庞大的网络系统依靠的动态路由。
动态路由算法协议:怎么更低成本和更快的把快递送到?
所以当你打开一颗剽悍的种子的这篇文章时,到能看到文章里的文字,图片等信息,这期间就穿梭过了无数条路。
因为在网络上任何两台计算机之间的路径可不止一条。那么用什么方法来选择“成本更低,更快路径”呢?
对于路来说,平坦、最短且不拥挤、不收或者少收过路费的管理完善路是最佳路径。
而在路由协议中,也有对路径的衡量指标,如路由跳数、路由成本等,都是寻找最佳路由衡量标准。
不同的路由协议对“路由成本”定义不完全相同,它们都会定义自认为合理的“成本”。但它只会选择成本低的链路,不会选择成本高的链路。
路由协议可以分为内部路由协议和外部路由协议,其中内部路由协议有RIP、OSPF属于,外部路由协议有BGP。
RIP:距离向量协议
RIP(Routing Information Protocol)属于内部网关协议,也是较为简单的基于距离向量算法的路由协议(向量指既有大小又有方向的量)。
RIP 协议是以距离的单位是跳数。跳数是指所经过的路由器的个数。
而每经过一个路由器,跳数就加1。RIP协议认为好的路由就是它通过的路由器的数目少,即“距离短”。
RIP允许一条路径最多只能包含15个路由器。因此“距离”等于16时即相当于不可达。
所以,RIP协议希望尽可能少通过路由器将数据包转发到目标。
但RIP协议有着很明显的问题,如果当有两条路由跳数相同,也就是距离一样远,那么它只会选其中一条,这种会显得过于呆板;比如成本低的链路由于某些原因出现拥塞,路由器却始终对那条成本高的链路“视而不见”。哪怕这条链路正处于空闲状态。
当然这不是路由器的错,而是网络规划出了问题。
就像在现实世界中的城市交通里,也常遇这种情况,如交叉路口一方的车辆已经排起了长队,而另一方根本没有车辆却依然长时间绿灯,这是因为红绿灯设置的时长不符合该交叉路口的实际情况。
网络设计师们早就意识到这个问题了,于是就来到了一下路由算法协议OSPF。
OSPF:最短路径优先
OSPF(Open Shortest Path First)。也是内部网关协议。OSPF采用的算法称为最短路径优先算法。
这种算法,把每一台路由器都作为 “根(ROOT)” 来计算其到每一个目的地路由器的距离。
每一台路由器根据一个统一的数据库计算出网络的拓扑结构图,这个结构图类似于一棵树,也就是 “最短路径树”。如下图所示。
树结构让路由耗费的计算简化。根路由器能很快地把到任何目的地的路由上所遇到的路由器接口耗费加起来。
例如,从 路由器3 的角度。对于多于一跳的目的地,接口耗费相加在括号内。如下图所示(耗费汇总表)。
在上图中,还能看到有两条到网络IP地址为 193.1.6.0 的路由。其中一条路径含更少的跳数,却有高得多的耗费;因为 路由器2 和 路由器6 之间可能存在低速串行链路。
另一条路由有更多的跳数,但却有少得多的总耗费。在这种情况下,OSPF会抛弃高耗费的路由而使用低耗费的路由。
如果这两条路由具有相同的总耗费,OSPF则会在路由表中维护两条独立的表项,并在二者之间均衡负载。
RIP协议 & OSPF协议 的区别
所以,RIP协议要求途中所经过的路由器个数越少越好。 与之相比, OSPF协议可以给每条链路赋予一个权重(也可以叫做代价),并始终选择一个权重最小的路径作为最终路由。也就是说OSPF以每个链路上的代价为度量标准,始终选择一个总的代价最小的一条路径。
所以,RIP是选择路由器个数最少的路径,而OSPF是选择总的代价较小的路径。
AS:自治域
而当这些内部网络最后形成了规模非常大的网络时,如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间,协议都跑不过来。
而且很多不同的单位可能不愿意外界了解自身网络的布局细节和所采用的路由选择协议(这属于内部的事情),但同时还希望连接到互联网上。
就像在地球上也被划分成若干个不相同的“国家”一样。而每个国家里货币,语言,文化,政治(管理规范和路由策略)。而这些网络被称为自治域或自治系统 (autonomous system),简称为 AS。
也就是说,单一机构或组织管理的一系列IP网络及其设备所集合就是AS。
那怎么在整个互联网中任何两个不同AS(自治域)内的主机找到对方呢?
这个问题就需要通过外部路由协议BGP来解决。
BGP:边界网关协议
BGP(Border Gateway Protocol)不同于前面两个路由算法协议都是内部协议,而BGP属于外部协议。
BGP将不同的AS之间要想实现网络层的互通,就像世界上的通用货币都可以用黄金一样,将各自不同独立的内部域进行了统一,让任何两台不同内部自治域的主机都能找到对方。如下图所示。
最后
从上篇中,我们就把计算机网络原理倒过来设计了一个网络雏形。再到中篇,畅聊到网络是怎么连接更多人,容纳更多人的,以及网络是怎么彼此进行通信的。
所以可以想象一幅这样的图像 从物理网络所构建起来的虚拟网路,是怎么低成本,高效的连接所有人,以及打破物理空间限制,抵达到即使相距数万里之外的地方。