Re: 跟我一起学TCP/IP
发表于 : 2023-03-11 8:26
CIDR(Classless Interdomain Routing)
本书的重点不是路由协议,作者对OSPF和BGP只进行了简单概述,我们也不进行深入研究了
互联网一开始设计的路由架构是基于网络的,将网络分为3类,分别是Class A、Class B、Class C
每个网络要求一个路由表项
回忆一下地址分类
A类IP地址的netid有7位,共2^7=128个网络,因此要求128个路由表项
B类IP地址的netid有14位,共2^14=16384个网络,要求16384个路由表项
C类IP地址的netid有21位,共2^21=2097152个网络,要求2097152个路由表项
对于A类和B类网络,路由表项的规模尚可接受,但是对于C类网络,这个路由表项的数目过大,无论从维护还是性能考虑都是不可接受的
CIDR是一种新的路由技术,他不基于网络,而是基于域(domain),也就是说他没有网络的概念了,无论物理网络的拓扑结构是什么样,都可以使用这种新的路由技术
CIDR虽然基于域而不是网络,但是他的思想是一样的,类似进程使用多级页表来索引虚拟地址空间的思想
页表思想介绍:
对于4GB的虚拟地址空间:
如果采用一级页表,那么对于4KB大小的页,就需要2^20=1048576个页表项
如果采用两级页表,那么第一级页表项只需要2^10=1024个(第一级页表索引10位,第二级页表索引10位,页内偏移12位)
我们可以看出采用二级页表节省的是第一级页表项的个数
对于路由表项来说,节省的是Internet Routing table entries
Internet router 大概是指连接各自治系统的路由器
IP地址分类就类似只采用一级页表,特别是对于C类网络(hostid占8位,可以理解为页大小,netid占21位(可以理解为页表索引)),最初引入CIDR就是为了减少索引C类网络的路由表项数目
CIDR也是采用多级页表思想,且级数不固定
任意连续的IP地址范围都可以组成一个域,以书上的例子194.0.0.0-195.255.255.255这个地址范围,为了方便观察,我们转换成32位的二进制
11000010 00000000 00000000 00000000
11000011 11111111 11111111 11111111
我们观察到这个地址范围内所有的地址的前7位都相同,因此所有以1100001开头的IP地址都在这个域内,所以只需要一个路由表项就可以将IP数据报转发到这个域内,剩下的25位还可以继续划分成不同的子域,比如继续使用额外的7位组成一个子域,那么第一个子域的范围如下
11000010 00000000 00000000 00000000 (194.0.0.0)
11000010 00000011 11111111 11111111 (194.3.255.255)
子域还可以继续划分子子域,划分的级数没有限制
标识域的范围也是使用一个32位的mask,称为domain mask
要识别一个IP地址属于哪个域,只需要将IP地址和domain mask进行与操作就得到了域号
通往某个域的路由表项类似: domain-number gateway domain-mask
在IP模块执行IP routing时,会选择最长匹配(longest match),也就是选择mask_one_bit_count(mask)最大的那条route
假如将路由表里所有路由条目按mask_one_bit_count(mask)从大到小排序,那么第一个匹配的条目就是最佳匹配(best match)的route
兼容性:
CIDR路由条目与先前的host-route、net-route、default-route是兼容的,因为host-route对应的mask是全1(这个域中只有一台主机),default-route对应的mask全0,所以匹配顺序是按host-route、net-route、default-route的顺序进行的
本书的重点不是路由协议,作者对OSPF和BGP只进行了简单概述,我们也不进行深入研究了
互联网一开始设计的路由架构是基于网络的,将网络分为3类,分别是Class A、Class B、Class C
每个网络要求一个路由表项
回忆一下地址分类
A类IP地址的netid有7位,共2^7=128个网络,因此要求128个路由表项
B类IP地址的netid有14位,共2^14=16384个网络,要求16384个路由表项
C类IP地址的netid有21位,共2^21=2097152个网络,要求2097152个路由表项
对于A类和B类网络,路由表项的规模尚可接受,但是对于C类网络,这个路由表项的数目过大,无论从维护还是性能考虑都是不可接受的
CIDR是一种新的路由技术,他不基于网络,而是基于域(domain),也就是说他没有网络的概念了,无论物理网络的拓扑结构是什么样,都可以使用这种新的路由技术
CIDR虽然基于域而不是网络,但是他的思想是一样的,类似进程使用多级页表来索引虚拟地址空间的思想
页表思想介绍:
对于4GB的虚拟地址空间:
如果采用一级页表,那么对于4KB大小的页,就需要2^20=1048576个页表项
如果采用两级页表,那么第一级页表项只需要2^10=1024个(第一级页表索引10位,第二级页表索引10位,页内偏移12位)
我们可以看出采用二级页表节省的是第一级页表项的个数
对于路由表项来说,节省的是Internet Routing table entries
Internet router 大概是指连接各自治系统的路由器
IP地址分类就类似只采用一级页表,特别是对于C类网络(hostid占8位,可以理解为页大小,netid占21位(可以理解为页表索引)),最初引入CIDR就是为了减少索引C类网络的路由表项数目
CIDR也是采用多级页表思想,且级数不固定
任意连续的IP地址范围都可以组成一个域,以书上的例子194.0.0.0-195.255.255.255这个地址范围,为了方便观察,我们转换成32位的二进制
11000010 00000000 00000000 00000000
11000011 11111111 11111111 11111111
我们观察到这个地址范围内所有的地址的前7位都相同,因此所有以1100001开头的IP地址都在这个域内,所以只需要一个路由表项就可以将IP数据报转发到这个域内,剩下的25位还可以继续划分成不同的子域,比如继续使用额外的7位组成一个子域,那么第一个子域的范围如下
11000010 00000000 00000000 00000000 (194.0.0.0)
11000010 00000011 11111111 11111111 (194.3.255.255)
子域还可以继续划分子子域,划分的级数没有限制
标识域的范围也是使用一个32位的mask,称为domain mask
要识别一个IP地址属于哪个域,只需要将IP地址和domain mask进行与操作就得到了域号
通往某个域的路由表项类似: domain-number gateway domain-mask
在IP模块执行IP routing时,会选择最长匹配(longest match),也就是选择mask_one_bit_count(mask)最大的那条route
假如将路由表里所有路由条目按mask_one_bit_count(mask)从大到小排序,那么第一个匹配的条目就是最佳匹配(best match)的route
兼容性:
CIDR路由条目与先前的host-route、net-route、default-route是兼容的,因为host-route对应的mask是全1(这个域中只有一台主机),default-route对应的mask全0,所以匹配顺序是按host-route、net-route、default-route的顺序进行的