划分子网
分类的IP地址也称为两级IP地址(网络号,主机号)。这样的分类有几点不好的地方:
- IP地址空间利用率低。试想A类地址能表示(2^31)个网络地址,全球的主机数远不止如此。
- 每个物理网络都分配一个网络号,会使得路由表过大。
- 二级地址不够灵活。
划分子网就是为了解决这些问题的。具体的思路如下:
- 一个拥有许多物理网络的单位,可以将所属的物理网络划分成子网,这样的子网只对单位内可见,对外仍然表现为一个网络。
- 方法是,从IP地址的主机号中借用部分来作为子网号。于是变成3级地址:
- 发送到本网络的数据报,仍是将此数据报交付给本单位的对外的路由器,路由器再根据子网号找到对应的网络,然后把数据交付给主机。
注意:划分子网是在原来的IP地址的主机号进行划分,而不改变IP地址原有的网络号。
子网掩码
那么数据到了本网络的路由器,路由器又是怎么把数据交付到对应的子网的呢?这就要使用到子网掩码了。子网掩码的原理很简单:子网掩码中用1来代替原IP地址中的网络号和子网号,用0来代替主机号。将子网掩码与数据报的目的IP地址相与,便可以得出目的IP所在的子网号。 如下图的网络地址的计算
不管网络有没有划分子网,只要把子网掩码与IP地址相与,就可以立即得出网络地址,这样在路由器处理分组的时候就可以采取同样的算法。即使网络没有划分子网,使用子网掩码也可以方便的查找出路由表,一般这种网络使用默认的子网掩码。子网掩码是牺牲主机号来扩展网络号的,也就是说,划分子网虽然增加了灵活性,但是减少了能在网络上连接的主机数。
子网内的分组转发中,路由表相比之前的二级地址的路由表多了一项子网掩码,下图就是一个示例:
- 从数据报首部提出目的主机的IP地址D。
- 对路由器直接相连的网络,用子网掩码与目的网络地址D相与,得出网络地址,再看是否存在相应的网络地址,存在则直接交付,否则间接交付
- 如果路由表中有到目的地址为D的特定主机路由,则将数据交付给该条目的下一跳地址。否则转4
- 对路由表中的每一个子网掩码,都与D相与,如果得出的网络号N与该行的目的地址网络相同,则将数据交付给下一跳路由。否则转5.
- 如果路由表中有设置默认路由,那么将数据交付给指明的默认路由器地址。否则转6
- 分组转发出错。
实际上,对子网的分组转发,就是在之前IP的分组互转发的基础上,多了跟子网掩码计算的步骤。
CIDR构成超网
为了使得32位的网络地址能物尽其用,IEFT提出了无分类编址的方式。它消除了传统的分类IP地址跟划分子网的概念,改用网络前缀来标识网络号。并且把网络前缀都相同的IP地址,组成一个CIDR地址块。CIDR在IP地址后面加上斜杠,表示网络前缀所占的位数。这样三级分类地址又回到了二级分类:
将主机号全部置0或者置1,可以得出该地址块的地址范围:
同样的,CIDR也可以使用主机号来构成子网,且其掩码的规则跟之前的一样。一个CIDR中有很多地址块,所以路由表中可以用地址块来查找目的网络,这样的地址称为路由聚合。通常我们在网络前缀后面加一个星号用来表示CIDR的地址:
当网络前缀不是8的倍数的时候,就需要将数值转换成二进制数,来找到对应的网路前缀。将划分的子网的网络前缀以二进制数写出表示,可以很清楚的看出路由聚合的概念:
一系到四系的路由可以聚合成ISP的路由,而一系的所有主机可以聚合成206.0.68.0/23这个路由。
ICMP协议(网际控制报文协议)
为了有效转发IP数据报和提高交付成功的机会,在网络层使用ICMP协议。该协议允许主机或者路由器报告差错情况以及提供异常情况的报告。ICMP报文主要分为差错报告,询问报文。
ICMP差错报告报文共有4种:
- 终点不可达,当主机或者路由器不能交付数据的时候,发送此报文。
- 时间超过,当路由器收到TTL = 0的报文时。报此错误
- 参数问题,略
- 路由重定向,略
常用的ICMP询问报文为:
- 回送请求回答
- 时间戳请求和回答
应用:ping命令。