① IP协议的多播
向多台主机发送数据的方法有两种:广播和多播。在早期的多播实现方法主要是利用广播技术,接收端根据是否需要数据来判断数据是否丢弃。这样会造成网络流量的浪费。另外广播无法穿透路由,因此需要往不同的网段发送数据时,就需要采用其他技术。
多播和地址:
多播使用D类地址,前四位为1110,就可以认为是多播地址,剩下的28位为多播编号。从224.0.0.0到239.255.255.255都是多播地址,而224.0.0.0和224.0.0.255范围内不需要路由控制。在这个范围之外的多播地址会给全网组内成员的发送多播地址。
对于多播,所有的主机,必须属于224.0.0.1的组。路由器必须属于224.0.0.2的组。多播地址有众多已知地址。多播的技术实现还需要IGMP的协议的支持。
② 子网掩码
网络标识相同的计算机必须属于同一个链路。例如B类IP网段允许接入6.5K个计算机,而实际情况同一个数据链路不会同时接入如此多的计算机,因此这类网络结构不存在。
因而,直接使用A类或者B类的地址,有些浪费。并且网络地址也越来越不足以应对需求,直接用A、B、C类IP地址更会导致资源浪费,因此使用组合方式可以减少这种浪费。
现在的方法是,一个IP地址的网络标识和主机标识不再受限于地址类别,而是用一个子网掩码的识别码通过子网网络地址细分出比A、B、C类网络粒度更小的网络,实际上即将原来的ABC类的主机地址部分用作子网地址,将原网络划分为多个物理子网的一种机制。
子网掩码工32bit,他对应IP地址网络标识的部分全部为1,对应IP地址主机标识的部分全部为0,因此,一个IP地址可以借助子网掩码自由的定位自己的网络标识长度。
例如:
IP地址:172.20.100.52
子网掩码:255.255.255.192(11111111.11111111.11111111.11000000)
网络地址:172.20.100.0
因此如果要得出网络标识地址,将IP地址与子网掩码进行与即可。
③ CIDR和VLSM
90年代,一般大型的网络,会分配一个A类地址,小架构的网络中,会分配C类网络地址。总之网络IP资源有限,无法满足日益成长的网络需求。
因此,人们放弃了IP地址的分类,采用了IP地址任意分割的网络标识和主机标识。这种方式成为CIDR(classinter-domain Routing),无类型域间路由。而边界网关协议(BGR)对应了CIDR,因此不受IP地址分类而自由分配。CIDR技术可以更好的利用网络地址资源。
在CIDR初期,子网掩码的长度是固定的,即如果子网掩码的长度设置为24,那么域内所有的子网掩码都得为24,但是这些固定的机制无法适应实际变化多样的环境。即有一个矛盾:如果全部采用统一的标准,就难以架构出一个高效的网络结构。
VLSM(可变长度子网掩码)就是为了这种问题而但是的技术,其可以通过域间的路由器转换,这样,当网段内设备为500个时,则将子网掩码长度设置为23位,当主机数量为50时,子网掩码长度设置为26位。从而理论上将IP地址的利用率提高了50%。
但这个只是缓解的办法,根本矛盾是IP地址资源不足,因此才出现了后续的IPv6。
④ 全局地址和私有地址
初期,IP地址是不允许重复的,但IP资源不够的问题明显了以后,就提出了新技术,不要求对每个主机或者路由器分配一个固定的IP地址,而是在必要的时候,为一定数量的设备分配IP地址。
比如在那些没有接入互联网,而只是在独立网络中的设备,只要保证这个网络内的地址唯一即可。因此提出了私有IP地址,分布如下:
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类:192.168.0.0-192.168.255.255
这类IP地址称为私有IP,除此以外的称为公网IP或者全局IP
私有IP如果需要接入互联网,需要使用NAT技术,将私有IP转为公网IP。现代的家庭路由器,一般都具有NAT功能,即为设备分配的是私有IP,路由器或者服务器上配置全局IP。全局IP一般在互联网上是唯一的,但私有地址不需要,不同网段内的私有IP相同互不影响。
因此,现代互联网的主要解决IP地址冲突的方案就是NAT+私有IP,但也存在一些限制,比如不同网段内的机器不能直接使用互相的私有IP进行通信。IPv6目前尚未普及。
⑤ 路由控制
路由的重要概念是路由表,这个表有两种方式生成,一个是管理员配置的,一个是路由器彼此之间交互生成的。前者叫做静态路由,后者叫做动态路由。
IP协议适中认为路由表是正确的,而IP协议并没有定义生成路由表的协议。该表是由一个称为路由协议的协议生成的。
路由控制表,记录的是网络地址,和下一步发送路由的地址。发送IP包时:
1. 确定IP包首部的目标地址
2. 找到路由控制表中的记录,该记录与目标地址的网络地址相同
3. 转发数据包
如果出现了多个对应的情况,则选择最长匹配。例如,172.20.100.52的网络地址与172.20/16和172.20.100/24都对应的情况下,选择后者作为匹配。
默认路由一般标记为0.0.0.0/32,主要作用是任何一个网络地址都可与其匹配。防止出现路由表要记录所有网络和子网信息。
主机路由是全部为网络地址的情况,例如192.168.153.15/32,即整个IP地址都参与路由,它主要被用于不希望通过网络地址进行路由的情况。但是缺点很明显,很容易导致路由表的膨胀,引起网络负荷增加。
环回地址是一台计算机上程序互相通信的一个默认地址,其采用特殊IP:127.0.0.1,称作local host,使用这个IP时,数据包不会流向到网络
路由表的聚合是指路由表中记录了如192.168.2.0/24和192.168.3.0/24这类的网络地址,那么路由器会将这两条记录合并成为:192.168.2.0/23的记录,来缩减路由表,提高转发效率。并且对路由器管理的设备进行公示。(即能互相通信的设备中,告诉他们,如果发现了192.168.2.0/23网段的包,就往我这里发送,我负责进行转发),如下所示:
⑥ IP数据的分割和再构
前面说过数据链路层重要区别就是MTU大小,而IP协议要做到能屏蔽这一点。因此主要问题是在数据的分割上面。路由器通常会对数据量较大的IP包进行分割,而随着数据链路的速率变快,这种分割所造成的性能消耗比较严重。为了使得数据传输时路由器尽可能的少分割数据,提出了一个路径MTU发现机制:
1. IP协议对上层发下来的数据,依照自己机器所接的数据链路进行数据分割,然后发给路由器
2. 路由器收到数据以后如果超出路由器所接链路的MTU大小,那么则丢掉这个包,并通过ICMP发送一个目标不可到达消息。
3. 发送主机收到这个消息,重新组装一个测试包,一直测试到不在收到ICMP的错误消息为止,并记录下此时的MTU大小
4. 这个MTU大小约维持10分钟,10分钟内则按照这个MTU进行对上层的数据分割。