IPv4编址方式
本文的知识都可以到B站up湖科大教书匠的视频里去看具体讲解。
分类地址
IPv4地址被分为网络号和主机号,可分为A类地址、B类地址、C类地址、D类地址、E类地址。其中,只有A类、B类、C类地址的可用于给网络中的主机编址。
A类地址的网络号为8位,8位编码默认以0开头,可使用的网络号从1到126,主机号从1到 2 24 − 2 2^{24}-2 224−2。
B类地址的网络号为16位,16位编码默认以10开头,可使用的网络号从128.0到191.255,主机号从1到 2 16 − 2 2^{16}-2 216−2。
C类地址的网络号为24位,24位编码默认以110开头,可使用的网络号从192.0.0到223.255.255,主机号从1到 2 8 − 2 2^{8}-2 28−2。
值得注意的是:
- 当一个设备尚未配置IP地址时(例如,一个新设备或者一个重新启动的设备),它可能会使用0.0.0.0作为源IP地址。这通常发生在动态主机配置协议(DHCP)过程的初期阶段,当设备请求分配一个IP地址时。
- 网络号为127的所有主机号,也就是127.0.0.0/8 都用于本地软件环回测试。环回测试通常用于检查本地主机的网络栈是否正常工作。当你发送数据到一个环回地址时,数据包不会在任何网络上发送,而是直接由本机处理。
- 主机号为“全0”,表示主机所在的网络。
- 主机号为“全1”,表示对主机所在的网络上所有的主机发送信息,也就是广播通信。
路由器的作用:
IP地址配置在不同的网络中,直接连发送数据是不能成功的,譬如A类直接给B类直接发送数据是不能成功的。如果想要发送到不同网络类型的主机,只能将数据交给某个路由器进行转发才可以让属于两个不同网络的主机互联起来。
一台路由器有多个端口,譬如它有两个端口,一个端口专门收发A类数据,另一个端口专门收发B类数据,那么前一个端口就会有个A类的IP地址,后一个端口就会有个B类的IP地址,两个地址皆可在仿真软件中人为设置。
在A类主机和B类主机的IP配置中设置默认路由器或默认网关,也就是选择从哪一台路由器来收发数据。那A类主机选择自己的联系方为路由器的A端口,B类主机选择自己的联系方为路由器的B端口,具体的不同类型的网络信息的转换就可在路由器内部进行了。
缺陷总结:IP地址的空间利用率有时很低。给每个物理网络分配一个网络号会使路由表变得太大。两级IP地址不够灵活。
划分子网
将网络号+主机号构成的两级网络地址升级成由网络号+子网号+主机号构成的三级IP地址。由于不能改变IPV4的长度,因此从主机号借用一些位数来充当子网号。
那么如何找出一个网络地址,例如145.13.3.10哪些位是网络号,哪些是子网号,哪些是主机号呢? 解决这个问题的办法是引入一个叫子网掩码的概念。
它是一个32比特的IP地址,其中以连续1来代表网络号和子网号,以连续0来代表主机号。
将32比特的IP地址和32比特的子网掩码逐比特相与,就会得到32比特的子网地址,(主机号被清零的IP地址)。
IPv4未划分子网的情况下子网掩码如下图所示。
A类IP地址会从24比特的主机号中选取0-22位来作为子网,之所以不会选其中的23位作为子网,是因为这样就只会有1位表示主机号,即主机号只会有两种可能0和1,只能够表示网络号和广播号。
以此类推,B类和C类IP地址的子网掩码如下图:
已知IP地址和子网掩码,该如何求网络地址呢?
只要将IP地址和子网掩码逐个想与即可,但是同样的IP地址和不同的子网掩码可以得出相同的网络地址,但其代表的含义却是不同的。
下图中以子网掩码是255.255.255.192时为例,此时主机号中分出了两位用来表示子网号。
每个子网可分配的主机IP地址数量是255-192=64。
每个子网的网络地址是子网号拼接“全0”的主机号。
每个子网的网络地址是子网号拼接“全1”的主机号。
每个子网上可分配的最小的主机IP地址比子网的网络地址大1。
每个子网上可分配的最大的主机IP地址比子网的广播地址小1。
那如何快速划分子网呢?
以C类网络为例:C类网络只有第4字节与子网地址相关,若子网掩码为128,则每个子网包含的主机号数量为256-128=128。示例2中若子网掩码为192,则每个子网包含的主机号数量为256-192=64。每一段子网的变化实际上对应了当子网位数为2时,子网号从00,到01,到10,再到11的变化。
以B类网络为例:B类网络的第3,4字节与子网地址相关,若子网掩码为128.0,每个子网的主机号为256.0-128.0=128.0。若子网掩码为192.0,则每个子网的主机号为256.0-192.0=64.0。
如果B类网络为255.128,那子网号在第3字节的增量为256-255=1,在第4字节的增量为256-128=128。第四字节的增量就是说,子网掩码是128,10000000,剩余能变化的量就在0-127之间,最开始子网地址从0.0开始,0.1,0.2,0.3增加到0.127,之后第四字节的子网号从0变成1,那子网地址就从0.128开头了,变成0.129,0.130,0.131,一直到0.255。 如果只是第四字节作为子网号+主机号,那这里变化就结束了,但是第三字节在B类网络也是作为子网+主机号的一部分的,它会将子网的地址分布切成更分散的小块。第三字节的子网掩码为255,意味着第三字节没有把任何位给分为主机号,全都作为子网,所以子网号会自然地从0,到1,到2,再到填满了的255,这中间,第三字节就没有额外的主机号位的细致划分了。
再以A类网络为例,这里是一个最复杂的子网结构。第二字节和第三字节的增量为1,也就是每次的变化都是前进1个字节,因为它们都没有把任何位留给主机号,只是子网号的逐1增加。
构造超网
无分类域间路由选择CIDR
CIDR使用“斜线记法”,即在IPv4地址后面加上斜线"/",在斜线后面写上网络前缀所占的比特数量。
例如128.14.35.7/20 网络前缀占用的比特数量:20,主机编号所占用的比特数量:32-20=12。
CIDR实际上是将网络前缀都相同的连续IP地址组成一个"CIDR地址块”。
如下图所示,将多个子网的共同前缀找出来,就可以合成一个聚合地址块。
首先将128.14.35.7/20转化为32比特的网络地址。然后将后12位比特全部置为0,作为最小地址,将后12位比特全部置为1,作为最大地址。
上图的CIDR地址块,相当于聚合了 2 4 2^4 24个C类网。
路由聚合减少了对路由器存储的占用,并减少了路由器查找的时间。
下图列出了一些常用的CIDR地址块,前缀从13位到27位变化。
下图是三类网络的主机互相通信的一个过程描述。192.168.16.0/25是一个CIDR地址块,我们为方便不妨称呼它为紫块,它的最小地址是192.168.16.00000000,最大地址是192.168.16.01111111,其中首尾两个地址可以作为网络地址和广播地址,可分配给主机或路由器的地址是192.168.16.1到192.168.16.126。我们不妨将192.168.16.1和168.16.2分配给该网络的两个主机。以此类推,我们也可以得到绿块的CIDR网络块地址,并分配地址给其中的主机。而和紫块通信的路由器的IP地址也得设置成紫块中的IP地址,不妨分配192.168.16.126,路由器和绿块的通信IP地址类似。
注意:两个路由器之间的链路也要看成一个子网。
蓝色块的CIDR地址为192.168.16.192/30,最小地址为192.168.16.192,最大地址为192.168.16.195,则可分配给主机或路由器的地址只有两个,刚好用来作为图中两个路由器之间的通信IP地址。橙色块类似,它也只有两个主机地址可以分配,一个分配给路由器端口,一个分配给最右端的主机。
下图中显示的是路由器的路由表,如果是直接连接的CIDR网络块,就直接连接,如果需要经过其他路由器才可以连接,就在下一跳中填入途径路由器的相应IP地址。
划分子网的两种方法
下图是一个定长的子网掩码的案例,C类网络有8位比特可以分给子网号和主机号。需要分配出5个子网,那就要借用3个比特作为子网号,那每个子网拥有的主机号就可以用5个比特表达,所以每个子网有32个主机号,有30个可分配的主机号。
可见使用定长子网掩码划分子网的缺点是:1.子网划分方式不灵活,只能划分 2 n 2^n 2n个子网。2.每个子网所包含的IP地址数量相同,容易造成IP地址浪费。
变长的子网掩码可以在同一个地址块中为各个网络分配不同大小的空间。
分配原则见下图。如网络1,218.75.230.32/28,前28位都是网络号+子网号,后4位是主机号,所以主机地址所占总共是 2 4 2^4 24=16bit,于是无论网络1在所有网络中按什么顺序分配,它的网络起点位置只能选在0,16,32,48这些位,即块整数倍的大小作为起点。
网络2,218.75.230.0/27,即为5个bit用来存储主机号,则主机号总共有32个,网络2起点可选为0,32,64,128。
如何判断两个IP地址在不在同一个网络呢?比如有两个网络地址A和B,将网络地址B的IP地址和A的地址掩码做AND操作,看所得是否与A的CIDR块地址相同。如下图,所得结果192.168.16.128不等于192.168.16.0,所以不在一个网路中。
或者,有两个IP地址和一个地址掩码,将两个IP地址都与该地址掩码相AND,所得一致则在一个网络块中,不一致则不在同一个网络。