假设有一家公司需要组建一个网络,申请IPv4地址,但是由于C类地址的可分IP数量太少,所以申请了B类地址145.13.0.0,并给每台主机分配了一个IP,但是有很多的剩余IP未分配,如下图所示。
随着公司的发展,又新增了一些主机,且这些主机需要划分成三个子网络,假设子网1任然使用原来申请到的B类地址,那么子网2和子网3需要额外申请网络地址,但是有一下弊端:
所以,如果可以从主机号中借用部分作为子网号,那么就不用申请新的网络地址。
可是计算机如何知道划分地址中主机号有多少比特被用作子网号了呢?这就用到了子网掩码。
如下图是32位比特的分类IPv4地址,由网络号和主机号构成,现在从主机号中借用一部分来作为子网号,使其变成了32比特的划分子网的IPv4地址。
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号。
默认路由:如果有大量的目的网络对应的下一跳相同,则可以设置默认路由,只要目的网络为其他网络(即不在路由表中设置过的),就一律选择默认路由,默认路由条目中的目的网络地址为0.0.0.0/0,网络前缀最短,路由最模糊。
特定主机路由: 对特定的目的主机指明一个路由,这种路由就叫做特定主机路由,采用特定主机路由可以使得网络管理人员更方便地控制和测试网络,同时也可以在需要考虑某种安全问题时采用这种特定的主机路由。在对网络的连接或路由表进行排错时,指明到某一台主机的特殊路由就十分有用。其目的网络地址的CIDR形式的末尾为“/32”,网络前缀最长,路由最具体。
如下图,R2路由表的目的网络为192.168.1.0/24的下一跳应该为路由器R1的接口1对应的IP地址10.0.0.1,但是错误地配置成了10.0.1.2,于是路由器将数据报转发给了路由器R3,路由器R3查找路由表,又将数据报转发给了R2,R2再次查找数据报,又将数据报转发给了R3,出现了环路问题。为防止IP数据报在路由器环路中永久兜圈,在IP数据报首部设有生存时间TTL字段。IP数据报进入路由器后,TTL字段的值减1。若TTL的值不等于0,则被路由器转发,否则被丢弃。
如下图所示,R2的路由表中的192.168.0.0/22聚合了192.168.1.0/24和192.168.2.0/24这两个子网络,聚合方法就是寻找两个网络的共同前缀,然后将剩余部分清0,得到对应的聚合网络:192.168.0.0/22。
如下图,R2要转发IP数据报到网络192.168.2.0/24,则查看路由表找到目的网络192.168.0.0/22,下一跳转发到10.0.0.1,数据报转发到路由器R1,路由器R1查表,发现目的网络192.168.2.0/24的下一跳为接口2,于是直接交付到目的网络,完成转发。
但是聚合路由192.168.0.0/22实际包含了四个网络,但是部分网络不存在当前网络拓扑中,具体情况如下:
当路由器R2要转发IP数据报到192.168.3.0/24这个不存在的网络中,首先查看R2的路由表,找到对应的聚合网络192.168.0.0/22,于是转发到10.0.0.1进入路由器R1,R1查看路由表找不到该目的网络,于是使用默认路由,转发到10.0.0.2,数据报又回到了路由器R2,形成路由环路,如下图。
对此,可以在路由表中添加黑洞路由,如下图所示,下一跳null0是路由器内部的虚拟接口,IP数据报进入后就丢弃了。
如下图,如果与192.168.1.0/24相连的线路出现故障,则在R1的路由表中删去相关的路由记录,当R2要给192.168.1.0/24发送数据报时,先转发给R1,R1通过默认路由又转发给了R2,形成路由环路。针对这种情况,对192.168.1.0/24设置一个黑洞路由就可以解决问题。
首先路由器C向路由器D发送自己的路由表,路由器D接收路由表后进行改造,即将下一跳都变为C,并且距离都+1,表示可以通过下一跳到C,然后再从C到达各个目的网络。然后根据改造后的路由表,更新D的路由表,具体如下:
如下图所示,线路发生故障,R1修改自己的路由表,将其与N1的距离改为16,表示不可达,并等待将路由进行转发。此时R2路由表中记录与N1的距离还是2,如果R2先转发路由信息,则R1会被误导,认为可以通过R2到达N1,距离为3,然后传播路由信息,此时R2接受路由信息并被误导,以为最新的消息为到达N1的距离为4,然后形成数分钟的路由环路后直到距离变为16,才知道N1不可达。
标识、标志、片偏移用于IP数据报分片,当IPv4的数据报过长时,就需要进行分片。
分组网间探测PING:
跟踪路由traceroute:
私有地址只能用于一个机构的内部通信,不能用于和因特网上的主机通信,所以部门A和部门B之间如果分配了私有地址, 则不能通过因特网相连,需要通过可以与因特网相连的IP才能完成通信,如下图所示。