上例子:
这里要好好理解一下聚合路由的概念和求取过程。
- 聚合路由:多个网络归(聚合)到一个大类,在查表的时候,查找到这个大类,就相当于查找到了具体的目的网络,因为他们的下一跳是相同的。你只要转发给下一跳,下一跳就能根据目的网络转发给具体的主机。
- 在查表的时候,这些具体的目的网络可以匹配聚合网络,原理是最长前缀匹配。
注意:发送数据包的时候目的地址 还是具体的目的网络,只是你在查找转发的时候走了聚合路由的路子,数据报的目的网络并不是聚合网络。
好了,回到例子中,当R2转发IP数据报到绿色网络以及橙色网络时可以正常转发,就不赘述了。下面讲解会产生路由回路的情况。
实际上聚合路由‘192.168.0.0/22’中,包含了四个网络,如下图所示:
其中,绿色网络 和 橙色网络是实际存在的。而两个黑色网络在本例中是不存在的。
当R2给黑色网络发送IP数据报时,查表转发,走聚合路由,发送给R1,然后R1查表转发,由于黑色网络不存在,所以只能走默认路由,而默认路由的下一跳又是R2,这就又套娃了。如下图所示:
针对这种路由环路,使用黑洞路由来解决他:
黑洞路由:IP数据报进入黑洞路由则会被路由器直接丢弃,而不转发。
有了黑洞路由后,当R2再次尝试给黑色网络发送数据报时,能找到两条可选的路由条目,但是根据最长前缀匹配,选择了走黑洞路由。数据报被丢弃,这样就解决了路由环路问题。
上例子:
这里要好好理解一下聚合路由的概念和求取过程。
- 聚合路由:多个网络归(聚合)到一个大类,在查表的时候,查找到这个大类,就相当于查找到了具体的目的网络,因为他们的下一跳是相同的。你只要转发给下一跳,下一跳就能根据目的网络转发给具体的主机。
- 在查表的时候,这些具体的目的网络可以匹配聚合网络,原理是最长前缀匹配。
注意:发送数据包的时候目的地址 还是具体的目的网络,只是你在查找转发的时候走了聚合路由的路子,数据报的目的网络并不是聚合网络。
好了,回到例子中,当R2转发IP数据报到绿色网络以及橙色网络时可以正常转发,就不赘述了。下面讲解会产生路由回路的情况。
实际上聚合路由‘192.168.0.0/22’中,包含了四个网络,如下图所示:
其中,绿色网络 和 橙色网络是实际存在的。而两个黑色网络在本例中是不存在的。
当R2给黑色网络发送IP数据报时,查表转发,走聚合路由,发送给R1,然后R1查表转发,由于黑色网络不存在,所以只能走默认路由,而默认路由的下一跳又是R2,这就又套娃了。如下图所示:
针对这种路由环路,使用黑洞路由来解决他:
黑洞路由:IP数据报进入黑洞路由则会被路由器直接丢弃,而不转发。
有了黑洞路由后,当R2再次尝试给黑色网络发送数据报时,能找到两条可选的路由条目,但是根据最长前缀匹配,选择了走黑洞路由。数据报被丢弃,这样就解决了路由环路问题。
上例子,其中橙色网络出现故障,如下图所示:
R1能够检测到其接口0所连接的橙色网络出现故障,并自动在路由表中删除该目的网络。
此时R2要给橘色网络发送数据报,查表转发,发给了R1的接口1,然后R1继续查表转发,找不到目的网络的路由记录,所以走默认路由的下一跳,又转发给了R2,这就又套娃了。如下图所示:
仍然可以人工配置黑洞路由来解决这种环路,当路由表中某个路由记录的目的网络故障时,人工添加针对该网络的黑洞路由,R2再发送数据报给R1时,R1就会直接丢弃,如下图所示:
若橙色网络又恢复正常,R1能自动得到其路由记录并写入路由表,之前针对橙色网络的黑洞路由自动失效,假设橙色网络又出了故障,R1能自动删除其路由条目,并自动生效之前的黑洞路由。也就是说只要第一次配置好黑洞路由,以后路由器就能自动管理针对某个网络的黑洞路由和普通路由。
6、路由选择协议
-
6.1 概述
-
- 6.1.1 静态 和 动态 路由选择
路由选择协议分为 静态路由选择 和 动态路由选择两种:(如图)
- 6.1.1 静态 和 动态 路由选择
-
- 6.1.2 因特网采用的路由选择协议特点分层次举例:一个因特网供应商就可划为一个自治系统,系统内部和外部采用不同的路由选择协议,分别进行路由选择。如下图所示:
注:
- 这里的网关和路由器是一个东西,早期的因特网RFC文档用的网关,而新的RFC改成了路由器。因此两个协议类型缩写也可以改成IRP 和 ERP。
- 某个自治系统使用的IGP和因特网其他自治系统用的IGP互不相干,可以随意使用合适的协议。
-
- 6.1.3 常见的路由选择协议
- 6.1.3 常见的路由选择协议
-
- 6.1.4 路由器的基本结构
路由器:有多个输入输出端口的 用于转发分组的 专用计算机。
路由器可分为两大部分(如下图所示):
其中核心(大脑)部分是路由选择部分,功能是:根据使用的路由选择协议,周期性的 与其他路由器进行信息交互,从而更新路由表。
分组转发部分也可以划分为两个部分:交换结构 和 输入输出端口。其实路由器的端口都具有输入和输出功能,上图中分开是以便理解接收 转发分组的过程。
路由器工作过程:
- 物理成接收识别电信号,转换成01比特,送交链路层
- 数据链路层识别帧,去掉帧头帧尾,送交网络层
- 网络层收到的分组——
- 如果是数据分组,则根据转发表查表转发。找不到则丢弃。找到则按照匹配条目指示的端口转发,同样经过网络层(需要更新数据分组首部某些字段的值,如:生存时间-1),链路层,和物理层。
- 如果是路由器间交换信息的 路由报文,则先送交路由选择处理机,路由选择处理机根据 分组内容 更新路由表。(路由表 和 转发表 有如下几个细节):
上一篇将静态路由配置的,没区分 路由表和转发表 ,后面也不会区分,主要是便于理解。注:
- 路由选择处理机还会周期性 给其他路由器 发送自己知道的路由信息。
- 路由器有 输入输出缓冲区 ,可以暂存 收不过来或发不过来 的分组。
RIP的一些特性:
这里说的路由表并不是严格意义上的路由表,理解其意思即可。
那么交换信息用来做什么呢?
用于更新‘路由条目’。发送方发送RIP更新报文,更新接收方的‘路由表’。以下图为例:来讲解C如何发送RIP更新报文(可以理解为C的‘路由表’)来更新D的‘路由表’。
RIP更新报文并不包含C‘路由表’中下一跳的信息,因为用C来更新D的话,顶多是把D的下一跳改成C,和C的下一跳无关。
D拿到C的‘路由表’后,先对所有目的网络的距离+1,因为D和这些目的网络已经隔了C这一层厚障壁,然后把下一跳全改成C,因为现在是打算用C来更新D,然后就可以更新自己的‘路由表’了。更新原则如下图所示:
了解以上知识,就能理解一个网络从刚建立,到完成RIP协议的完成过程,如下图所示:
RIP的坏消息传得慢的问题:
上例子,在下图所示的一个网络中:
假设网络N1突然出故障了,这时R1‘路由表’中对N1的记录应该为16,并等待RIP更新周期到时候,发送RIP更新报文提醒R2 网络N1连不上了,如下图所示:
但是嘞,由于坏消息传得慢,R2先来更新R1了,如下图所示:
然后网络N1不可怜的信息就被覆盖了,R1就被这个RIP更新报文误导:认为可以通过R2到达N1。就这样R1的‘路由表’错误的被更新成了“N1 3 R2”,如下图所示:
然后就又是相互套娃的过程,直到他们到N1的距离增加到16(也就是收敛),如下图所示:
在套娃的过程中,R1和R2 也算是一个路由环路了,这个环路长达数分钟。
针对坏消息传得慢问题,有以下几种措施来防范:
但即便有了这些措施,还是不能完全解决坏消息传得慢带来的影响。
注:若某路由器检测到某网络发生故障,则该路由器必与该网络直连。
这个OSPF协议乱得很,总的来说 这个协议用大量操作使得每个路由器内 都有他所在的那个自治系统的网络拓扑图,因此每个路由器都能结合这个图 + Dijkstra算法 求出到目的网络的‘最短路’,然后就能构建出效率最高的路由表了。下面的这些概念你都可以把他们往这个大的思路上去靠,就会稍微清晰一点了。
这个代价是不是很像权值?但他不完全是,因为要考虑的因素有很多,可以把它看成全职的一部分。拿上面的带宽来说的话,带宽越大代表权值越小。
泛洪转发就是向所有路由器转发。
每个路由器都把 周围链路的状态 收集起来,四处发送,尽快让所有路由器都生成 整个网络的拓扑图,存在路由器各自的数据库里面,然后每个路由器就都能用Dijkstra算法了。
如下图所示:
OSPF的实际工作过程:
就是一个 通过发送上述五个分组,不断 完善 更新 链路状态数据库的过程。
7、IPv4数据报的首部格式
IPv4数据报首部的格式,如下图所示:
每个小格子称为字段 或 域,下面介绍每个字段的功能。
首部长度字段的单位是4字节,也就是说首部的长度只能是4字节的整数倍。因此才有了填充字段,用于补0使长度满足4字节整数倍。
标识,标志,片偏移字段:这三个字段共同用于IP数据报分片。
为什么要分片呢?
数据链路层对MAC帧的长度有要求,若IP数据报太长则需要分片。如下图所示:
这三个字段的功能如下:
上个例子,如下图:
假设分片2还需要进行分片,如下图:
例题:
若片偏移量是小数,则需要向下取整,重新计算。
关键在于给出的是以太网数据帧的16进制,并不是IP数据报。所以还需要考虑MAC帧的首部长度。
不要忘记这个首部校验和,很容易漏,TTL字段变了,他肯定要变。
7、网际控制报文协议ICMP
差错报告报文 和 询问报文 有着不同的功能,下面主要围绕这两种功能来讲解。
差错报告报文共有五大类,下面逐一讲解。
终点不可达:
R1中没有网络N3的路由记录,默认路由,以及H2的特定主机路由,那只能丢弃,并向源主机发送报告。
源点抑制:
注:ICMP协议的使用范围是网络层,并不局限于路由器,主机也可以发送ICMP差错报告报文。
时间超过:
另外,对于分片数据报,终点在规定时间内收不到整个数据报的所有分片时,会把已收到的数据报片全丢掉。
参数问题:
改变路由:
注:
这与差错报告报文的类型无关。
共有两大类。
也就是Windows命令行中的命令 ping
关于PING:
- 原理是使用 ICMP回送请求和回答报文
- 它用来测试主机或路由器间的连通性
- 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
ping一下我们学校官网:
-
- 7.4.2 路由跟踪 traceroute
关于traceroute:
traceroute的实现原理:
源主机发送一个IP数据报,里面封装有ICMP回送请求和回答,关键点在于他首部的的TTL字段,该字段的初值为1,也就是说源主机发送的的第一个数据报只能到达一个路由器,然后在这个路由器TTL=0,这个路由器发送时间超过ICMP差错报告报文,好了,已经跟踪到了源主机到目的主机途径的第一个路由器了,下一步,只要将TTL字段的值改成2就能跟踪到第二个路由器,以此类推,还没完,直到源主机发送的数据报成功到达目的主机,目的主机拆开一看,是个ICMP回送请求和回答报文,那他必须得回应,源主机收到回答报文,就知道已经跟踪到了路径中的最后一站。(部分过程如下图所示)
8、虚拟专用网VPN 和 网络地址转换NAT
引例:
所以只能使用无需申请的可*分配的专用地址(Private-Use,下图中标粉的IP):
汇总一下就是下面这些IP:
但是使用私有地址又有一个问题,私有地址只能用于公司内部通信,他无法用于和因特网上的主机通信。换句话说:私有地址只能用作本地地址,而不能用于全球地址。
在因特网中,所有路由器对目的地址是私有地址的IP数据报一律不转发。
所以引例中的两个部门还是不能通信。怎么着每个部门也得至少有一个全球IP地址,然后私有地址才有可能通过全球IP访问因特网。如下图中两个橙色IP地质所示:
那么私有地址如何通过全球IP访问因特网呢?这就是VPN解决的问题。
既然R1,R2有全球IP,那A、B间的数据报必要经过这两个路由器。
部门内:
跨部门通信的主机仍然正常组装IP数据报,源地址目的地址都使用部门内的私有IP。然后数据报给到R1、R2。
部门外:
R1,R2要改装通过的数据报:给整个数据报打包,并加密,作为新的数据载荷,然后加上新的首部,改装后的数据报就能在因特网中传输了。如下图所示:
简单来说就是:NAT能让使用私有地址的主机访问因特网。
我们平时家里用的网就是NAT。
-
- 8.2.2 NAT的原理
私有IP主机分时共享使用全球IP
路由器上必须装NAT软件。路由器把发过来的数据报中的私有地址替换成全球IP,并记录下两个IP的映射关系,在接收因特网传回数据报时通过这个映射,把数据报顺利给到目的主机。
多个私有IP要访问因特网:
那…因特网要是主动想给专用网发数据报呢?
可以到是可以,但是需要通过一些特殊手段,这里不赘述。