IP多播
· IP多播(IP Multicasting),曾被译为组播,用于实现一对多通信。
· 多播可以大大节约网络资源:
如果一台视频服务器需要给90个主机传送数据帧,使用单播的话每帧画面就要发送90个单播
而使用多播的话,就只需要发送1个多播,多播路由器会自动复制分组
· IP多播报文的目的地址肯定不能填写某一个目的主机的单播地址,需要填写多播组的标识符(D类IP地址)。因此,需要接收多播的主机在配置IP地址的时候需要和多播组的标识符建立关联。
· IP多播地址:
IP多播地址使用的是D类IP地址,它的范围是224.0.0.0~239.255.255.255,它们的前4位都是1110,所以,共可以表示2^28个多播组。
每一个多播地址代表的是一整个多播组,而不是某一台主机。
多播地址只能用于目的地址,不能用于源地址。
· IP多播数据报:
在局域网上进行硬件多播
· D类IP地址与以太网多播地址(MAC)映射关系:
· 多播IP地址与以太网多播地址的映射关系有可能不唯一:
因此,收到多播数据报的主机,还要在网络层利用软件进行过滤。
网际组管理协议IGMP和多播路由选择协议
· 实现多播需要用到网际组管理协议和多播路由选择协议。
· 网际组管理协议(Internet Group Management Protocol,IGMP)用于管理进入和退出多播组的主机,使路由器知道多播组成员的信息。
· 多播路由选择协议用于协调多播路由器之间的工作,以便把多播数据报以最小代价传递给所有组成员。
· 与ICMP相似,IGMP使用IP数据报传递报文,即IGMP报文加上IP首部构成IP数据报。
· 我们不把IGMP看成一个单独的协议,而是看成整个网际协议(IP)的一个组成部分。
· IGMP协议的使用范围是本地网络,让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出某个多播组。IGMP并非是在整个互联网的范围内对多播组成员进行管理!
· IGMP工作流程:
· 多播路由选择协议(看看就好,差不多得了):
· 多播路由选择协议实质上就是要找出以源主机为根节点的多播转发树:
不同的多播组对同一个源点会有不同的多播转发树。
同一个多播组对不同的源点也会有不同的多播转发树。
· 多播路由转发协议在转发多播数据报的时候的3中方法:
泛洪与剪除:
可以看到,RPB保证了多播数据报不会往回传。
隧道技术(Tunneling)
隧道技术本质上其实就是一个协议封装另一个协议,这个思想很常见,我们后面会再见到。
可以看到,Net1和Net2都支持多播,但是它们之间隔了一个不支持多播的网络(可能是没有多播路由器),为了让Net1的多播数据报发送到Net2上,Net1对多播数据报进行封装,按单播进行传输,Net2接收到之后,把单播数据报解封,恢复多播数据报并转发。
基于核心的发现技术
虚拟专用网络VPN和网络地址转换NAT
虚拟专用网络VPN
· VPN的定义:
· 使用隧道技术实现VPN:
具体使用什么协议来封装内部数据报,这个我们不做过多讨论。
· 内联网和外联网:
网络地址转换NAT
· NAT主要用于解决公网地址不够的问题,它可以实现给主机分配私有地址的同时与公网上的主机进行通信。
· NAT在1994年被提出,它通过装有NAT软件的路由器(NAT路由器)实现,至少有一个有效的外部全球IP地址。
· NAT工作原理如下:
出去的时候把源IP地址改变了,回来的时候把目的IP地址改变了。
但是,内网的主机是轮流使用NAT路由器上的公网地址的,这其实还是不够好。
· 网络地址与端口转换(Network Address and Port Translation,NAPT):使用IP地址+端口号的方式转换,这样,多台主机就可以同时共用一个NAT公网地址。
多协议标记交换MPLS
· 多协议标记交换(Multi- Protocol Label Switching,MPLS)技术是一种提高数据传输效率的技术。多协议表示在MPLS上层可以采用多种协议,如IP、IPX。标记指的是给每个分组打上一个标记(INT),然后根据该标记进行转发。
· 值得注意的是,MPLS并没有取代IP协议,而是作为一种IP增强技术。
· MPLS协议具有以下特点:
· MPLS的基本思想如下:
· MPLS的工作原理基本如下,可以发现,我们在中间构建了一个MPLS域,里面所有的路由器都是标记交换路由器,当分组进入MPLS域的时候,会在入口节点处被打上标记,然后这个分组在MPLS域内的转发就依靠标记进行转发,而不再是IP,这会快非常多,然后在MPLS出口节点的地方移除标记并交还给普通路由器进行正常转发。
· MPLS的首部位于数据链路层和网络层之间。
· 给数据报打上标记其实就在以太网帧首部和IP数据报首部之间插入一个4字节的MPLS首部。
软件定义网络SDN
SDN与协议OpenFlow
· 传统的网络存在一定的局限性:
· SDN的兴起:
· 软件定义网络(Software Defined Network,SDN)是一个框架,是一个体系结构,是一种设计、构建和管理网络的新方法。它把数据层面和控制层面进行分离,在控制层面上,利用软件去控制数据层面中的许多设备,管理员可以通过SDN去随心所欲地控制转发行为等。
· 控制层面和数据层面:
每个路由器有控制层面和数据层面,路由选择算法就是控制层面的内容,而IP协议就是数据层面的内容:
而在SDN中,控制层面都由一个远程控制器进行接管,它实际上是一个运行在服务器上的软件,如下图例子,远程控制器能掌控整个网络的状态,因此可以为每个路由器计算一个最佳转发表或为分组计算最佳路由。
· OpenFlow协议:它是SDN体系结构中控制层面和数据层面的通信接口,它可以使控制层面的控制器对数据层面中的物理或虚拟设备进行直接访问和控制。
值得注意的是,SDN并不规定一定要使用OpenFlow作为接口,只是用的比较多而已。
· OpenFlow数据层面:
数据层面就是转发层面,它要完成的工作是"匹配+动作",称为广义转发。
完成广义转发的设备称为分组交换机或OpenFlow交换机,不称为路由器。
匹配:传统网络的匹配是通过IP进行寻址,而OpenFlow里面可以对不同层次(链路层、网络层、运输层)首部中的字段进行匹配。
动作:传统网络的动作就只有转发和丢弃,而OpenFlow里面的动作可以有转发、重写、丢弃等。
· OpenFlow流表:
流表规定了"匹配+动作"。
其中关键字段有:
- 匹配字段(Match Fields):这些字段定义了流表项应该匹配的数据包的特征,如源MAC地址、目的MAC地址、IP地址、端口号、协议类型等。
- 优先级(Priority):每个流表项都有一个优先级,用于确定在多个流表项匹配同一数据包时,哪个流表项应该被优先执行。
- 计数器(Counters):每个流表项都有一个计数器,用于记录匹配该流表项的数据包的数量和字节数。
- 指令(Instructions):这些指令定义了当数据包匹配流表项时应该执行的操作,如转发、丢弃、修改数据包头部信息等。
- 超时时间(Timeouts):定义了流表项在多长时间内没有匹配到数据包后会被删除。
· 具体来说,流表中的结构如下:
可以看到,首部匹配字段里面包含了链路层、网络层和运输层三个协议的匹配处理。
在动作里面,我们可以规定把分组转发到某个端口;丢弃该分组;复制分组并转发到多个端口;重写分组首部字段等。
· 以下是使用流表进行简单匹配转发的例子:
可以看到,在S3的流表中只要符合IP源地址和目的地址匹配的项,都会执行转发到3端口的操作;而S1的流表只要符合入端口=1,IP源地址和目的地址匹配,就会执行转发4端口的操作;最后S2的流表只要匹配到IP源地址对应上就会进行特定的端口转发,从而实现我们需要的转发规则。
· 以下是使用流表进行负载均衡的例子:
H3和H4都要给主机10.1.*.*发送分组,都必须经过S2,我们就可以通过流表把分组分别转发到S3和S1去,这样,就不会让所有分组都挤占在S2->S1上,从而实现负载均衡。
· 以下是使用流表设置防火墙的例子:
可以看到,为了实现给S2设置防火墙,只接收来自10.3.*.*的分组,我们设置了一个匹配转发的规则,但其实这里的流表设计的不太好,更好的应该是设计为"匹配到来自非S3主机的IP就丢弃"。
· SDN体系结构的一些特征: