看到一段感觉写得不错的分层小述,手敲一遍:
当网卡接收到数据后,硬件网卡会给CPU发硬中断,CPU在指令周期内指示操作系统软件从网卡缓冲区取走数据,然后操作系统将数据交给TCP/IP栈(内核态的一个进程)来处理,在处理过程中,通过解析二层网络数据帧头中的MAC地址来决定在二层网络中的转发,如需三层网络转发就继续由TCP/IP栈来解析三层网络数据包头中的IP地址来决定三层网络中的转发,以此类推;二层网络主要通过MAC地址进行帧转发,主机只接受和它的MAC地址相同的数据帧;二层网络层没有控制平面,即没有一个全局的地方记录IP和MAC的映射关系,于是需要通过地址协议解析ARP广播来为IP找到对应的MAC;在云环境下,一台物理机上有可能存在上百个容器,整个云环境大二层的规模是相当巨大的,所以容易产生广播风暴
VLAN网络将同时结合MAC地址和VLAN号进行帧转发,主机只接受和它的MAC地址与VLAN ID都匹配的数据帧,这样,缩小了广播域,有可能避免广播风暴,但标准的TCP/IP二层帧头仅支持最多4096个VLAN,这样,在云环境中可能不够用;另外,VLAN网络需要人工地去为每一个物理交换机的相关端口配置VLAN号;这些限制了VLAN的使用,对于大二层的网络技术,如VxLAN,GRE,Neutron实现了L2 population的特性,在网络上的端口发生变化时,根据Neutron所存储的网络拓扑,自动增加广播地址学习的记录;这样对于目的MAC未知的单播请求,只将其发送到所需要的L2代理商,从而避免未知单播发送给所有隧道引起的广播风暴;三层网络主要通过IP地址进行数据包转发,控制分组传送系统的操作,选择路由等等,它能够通过路由学习简历控制平面
Neutron作为OpenStack的网络服务,提供了插件结构用于支持各种网络设备和服务
二层网络:提供ML2 Plugin加上L2 Agent支持二层网络设备
三层网络:Plugin结构由高级服务中的L3 Router服务提供,目前仅Linux平台使用L3-Agent/dvr-agent提供三层路由功能,今后也许会有ML3插件
四层到七层网络:由高级服务框架提供对四层到七层网络设备和服务的支持
最后:如果和SDN产品做集成,依据SDN产品的能力,可以提供从二层到七层的一体化网络服务支持