Linux和OpenStack中的网络知识【学习笔记】

该篇原文链接为https://www.aboutyun.com/forum.php?mod=viewthread&tid=9647&highlight=%BF%AA%B7%A2%C8%CB
本文只是学习记录,侵权即删。
 
1.网络基础
 
openstack中我们经常看到L2、L3那么,它的作用是什么?
L2其实是指七层网络协议中的第二层数据链路层,它的传输是以mac地址为基础
L3指网络层:是以ip地址为基础
网络层属于OSI中的较高层次了,从它的名字可以看出,它解决的是网络与网络之间,即网际的通信问题,而不是同一网段内部的事。网络层的主要功能即是提供路由,即选择到达目标主机的最佳路径,并沿该路径传送数据包。除此之外,网络层还要能够消除网络拥挤,具有流量控制和拥挤控制的能力。
个人总结:数据链路层数据传输在寻找mac地址,网络层数据传输则是寻找ip。
 
第二层,数据链路层 
这一层是和包结构和字段打交道的和事佬。一方面接收来自网络层(第三层)的数据帧并为物理层封装这些帧;另一方面数据链路层把来自物理层的原始数据比特封装到网络层的帧中。起着重要的中介作用。 
数据链路层由IEEE802规划改进为包含两个子层:介质访问控制(MAC)和逻辑链路控制(LLC)。 
智能集线器、网桥和网络接口卡(NIC)等就驻扎在这一层。但是网络接口卡它同样具有物理层的一些编码功能等。 
 
第三层,网络层 
这一层干的事就比较多了。它工作对象,概括的说就是:电路、数据包和信息交换。 
网络层确定把数据包传送到其目的地的路径。就是把逻辑网络地址转换为物理地址。如果数据包太大不能通过路径中的一条链路送到目的地,那么网络层的任务就是把这些包分成较小的包。
这些光荣的任务就派给了路由器、网桥路由器和网关。 
以后几层属于较高层,通常驻留在跨网络相互通信的计算机中,而不象以上几层可以独自为阵。设备中只有网关可跨越所有各层。 
七层协议与Windows结构的生产力映射如下:
 
7 应用层 7 应用程序(exe) 
6 表示层 6 Winsock API (dll) 
5 会话层 5 SPI(dll) 
4 传输层 4 TDI(vxd、sys) 
3 网络层 3 NDIS(vxd、sys) 
2 数据链路层 2 网卡驱动程序(vxd、sys) 
1 物理层 1 网卡
物理介质 
七层模型在Windows程序下的体现: 
 
物理层----就是我们看得见的网卡。网卡的作用就是把线路发送过来的高频电流转化数据包,然后传给网卡驱动程序,同是也把网卡驱动程序传送过来的数据包转化成电信号传送出去。定义通过网络设备发送数据的物理方式:是网络媒介和设备间的接口。 
 
数据链路层----是网卡驱动程序。定义控制通信连接的程序;封包;监测和改正包传输错误。 
 
网络层----即NDIS,NDIS提供网络接口。决定网络设备间如何传输数据;根据唯一的网络设备地址选择包;提供流和拥塞控制,以阻止同时网络资源的损耗。 
 
传输层----即TCP,TCP协议的封包处理是在这一层进行的。管理网络中首尾连接的信息传送;提供通过错误恢复和流控制装置传送可靠且有序的包;提供无连接面向包的传送。 
 
会话层----即SPI,SPI是服务提供者接口,管理用户间的会话和对话;控制用户间的连接和挂断连接;报告上层错误。 
 
表示层----API,它为应用程序提供接口。API负责SPI与应用程序之间的通信;定义不同体系间不同数据格式;具体说明独立结构的数据传输格式;编码和解码数据;加密和解密数据;压缩和解压缩数据。 
 
应用层----EXE,就是大家常见的应用程序。定义用于网络通信和数据传输的用户接口程序;提供标准服务。
 
2.  Dnsmasq、网络混杂模式
 
openstack概念中,我们会看到Dnsmasq,那么它的作用是什么?简单来讲,是为了提高dns性能的。
混杂模式又分为集线器模式,及交换机模式,这里不在细分,只是对这个模式有一个简单的感性认知即可。
 
Dnsmasq 
提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。
混杂模式(Promiscuous Mode)
是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是他。是相对于通常模式(又称“非混杂模式”)而言的。这被网络管理员使用来诊断网络问题,但是也被无认证的想偷听网络通信(其可能包括密码和其它敏感的信息)的人利用。一个非路由选择节点在混杂模式下一般仅能够在相同的冲突域(对以太网和无线局域网)内监控通信到和来自其它节点或环(对令牌环或FDDI),其是为什么网络交换被用于对抗恶意的混杂模式。
 
 

3. 什么是叠加网络
1.一个数据包(或帧)封装在另一个数据包内;被封装的包转发到隧道端点后再被拆装。
2.叠加网络就是使用这种所谓“包内之包”的技术安全地将一个网络隐藏在另一个 网络中,然后将网络区段进行迁移。
 
 
 
一、VLAN介绍
 
 
VLAN,是英文Virtual Local Area Network的缩写,中文名为"虚拟局域网", VLAN是 
一种将局域网(LAN)设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者 
说是更小的局域网LAN),从而实现虚拟工作组(单元)的数据交换技术。 
VLAN这一新兴技术主要应用于交换机和路由器中,但目前主流应用还是在交换机之中 
。不过不是所有交换机都具有此功能,只有三层以上交换机才具有此功能,这一点可以查 
看相应交换机的说明书即可得知。
 
VLAN的好处主要有三个: 
(1)端口的分隔。即便在同一个交换机上,处于不同VLAN的端口也是不能通信的。这 
样一个物理的交换机可以当作多个逻辑的交换机使用。 
(2)网络的安全。不同VLAN不能直接通信,杜绝了广播信息的不安全性。 
(3)灵活的管理。更改用户所属的网络不必换端口和连线,只更改软件配置就可以了。 
 
 
二、VXLAN介绍
 
什么是VXLAN
VXLAN全称Virtual eXtensible LAN,是一种覆盖网络技术或隧道技术。VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为outer-header进行封装,然后在物理IP网上传输,到达目的地后由隧道终结点解封并将数据发送给目标虚拟机。
 
为什么需要Vxlan
 
1. vlan的数量限制
   4096个vlan远不能满足大规模云计算数据中心的需求
 
2. 物理网络基础设施的限制
   基于IP子网的区域划分限制了需要二层网络连通性的应用负载的部署
 
3. TOR交换机MAC表耗尽
    虚拟化以及东西向流量导致更多的MAC表项
 
4. 多租户场景
    IP地址重叠?
 
 
什么是隧道技术
 
隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
    这里所说的隧道类似于点到点的连接,这种方式能够使来自许多信息源的网络业务在同一个基础设施中通过不同的隧道进行传输。隧道技术使用点对点通信协议代替了交换连接,通过路由网络来连接数据地址。隧道技术允许授权移动用户或已授权的用户在任何时间、任何地点访问企业网络。
    通过隧道的建立,可实现:* 将数据流强制送到特定的地址* 隐藏私有的网络地址* 在IP网上传递非IP数据包* 提供数据安全支持
 
 
隧道技术好处
隧道协议有很多好处,例如在拨号网络中,用户大都接受ISP分配的动态IP地址,而企业网一般均采用防火墙、NAT等安全措施来保护自己的网络,企业员工通过ISP拨号上网时就不能穿过防火墙访问企业内部网资源。采用隧道协议后,企业拨号用户就可以得到企业内部网IP地址,通过对PPP帧进行封装,用户数据包可以穿过防火墙到达企业内部网。
 
隧道的应用
VPN具体实现是采用隧道技术,将企业网的数据封装在隧道中进行传输。隧道协议可分为第二层隧道协议PPTP、L2F、L2TP和第三层隧道协议GRE、IPsec。它们的本质区别在于用户的数据包是被封装在哪种数据包中在隧道中传输的。 
 
三、GRE介绍
 
GRE特点
1.跨不同网络实现二次IP通信
2.L3上面包装L3
3.封装在IP报文中
4.点对点隧道
 
 
GRE好处
不用变更底层网络架构重建L2、L3通信
实现不同host之间网络guest 互通
方便guest 迁移
支持网络数量扩大
 
 
对于GRE遂道,缺点主要是
 
一是增加了GRE表头会导致本应由交换机硬件来分片的变成由软件来分片(STT技术可以弥补这一点);
二是GRE广播,且遂道将虚拟二层打通了,广播风暴更厉害。但对于虚机来说,因为虚拟交换机是完全能够知道虚机的IP和MAC地址的映射关系的,根本不需要通过ARP广播来根据IP找MAC地址,目前Neutron中有这类似的blueprint可以禁止广播。所以个人比较看好STT技术,因为目前openvswitch与linux kernel还未实现STT,所以Neutron目前没有STT插件(但有VXLAN和GRE插件)。
 
 
 
什么是Tap/Tun
 
在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。
服务器如果拥有TUN/TAP模块,就可以开启VPN代理功能。
虚拟网卡TUN/TAP 驱动程序设计原理:

 

什么是网桥
网桥工作在数据链路层,将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。它可以有效地联接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于联接数量不多的、同一类型的网段。 
  
讲了网桥,这里再次阐述,当是进一步加深理解网桥。不过本文重点讲的是Open vSwitch
网桥
Bridge(桥)是Linux上用来做TCP/IP二层协议交换的设备,与现实世界中的交换机功能相似。Bridge设备实例可以和Linux上其他网络设备实例连接,既attach一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge会根据报文中的MAC信息进行广播、转发、丢弃处理。

图1.Bridge设备工作过程
如图所示,Bridge的功能主要在内核里实现。当一个从设备被attach到Bridge上时,相当于现实世界里交换机的端口被插入了一根连有终端的网线。
 
Open vSwitch
 
什么是Open vSwitch
Open vSwitch的目标,是做一个具有产品级质量的多层虚拟交换机。通过可编程扩展,可以实现大规模网络的自动化(配置、管理、维护)。它支持现有标准管理接口和协议(比如netFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.1ag等,熟悉物理网络维护的管理员可以毫不费力地通过Open vSwitch转向虚拟网络管理)。总的来说,它被设计为支持分布在多个物理服务器,例如VMware的vNetwork分布式vSwitch或思科的Nexus1000V。
 
 
那么什么是虚拟交换?虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。跟传统的物理交换机相比,虚拟交换机同样具备众多优点,一是配置更加灵活。一台普通的服务器可以配置出数十台甚至上百台虚拟交换机,且端口数目可以灵活选择。例如,VMware的ESX一台服务器可以仿真出248台虚拟交换机,且每台交换机预设虚拟端口即可达56个;二是成本更加低廉,通过虚拟交换往往可以获得昂贵的普通交换机才能达到的性能,例如微软的Hyper-V平台,虚拟机与虚拟交换机之间的联机速度轻易可达10Gbps
 
通俗来讲,Open vSwitch是一个由Nicira Networks主导的开源项目,通过运行在虚拟化平台上的虚拟交换机,为本台物理机上的VM提供二层网络接入, 跟云中的其它物理交换机一样工作在Layer 2层。Open vSwitch充分考虑了在不同虚拟化平台间的移植性,采用平台无关的C语言开发。
 
Open vSwitch的作用
 
你可能会问,我为什么有必要在自己的云架构中使用它呢?它能给我的云带来什么?
OK。需求决定一切,如果你只是自己搞一台Host,在上面虚拟几台VM做实验。或者小型创业公司,通过在五台十台机器上的虚拟化,创建一些VM给公司内部开发测试团队使用。那么对你而言,网络虚拟化的迫切性并不强烈。也许你更多考虑的,是VM的可靠接入:和物理机一样有效获取网络连接,能够RDP访问。Linux Kernel自带的桥接模块就可以很好的解决这一问题。原理上讲,正确配置桥接,并把VM的virtual nic连接在桥接器上就OK啦。很多虚拟化平台的早期解决方案也是如此,自动配置并以向用户透明的方式提供虚拟机接入。如果你是OpenStack的fans,那Nova就更好地帮你完成了一系列网络接入设置。Open vSwitch在WHY-OVS这篇文章中,第一句话就高度赞扬了Linux bridge:
“We love the existing network stack in Linux.  It is robust, flexible, and feature rich.  Linux already contains an in-kernel L2 switch (the Linux bridge) which can be used by VMs for inter-VM communication.  So, it is reasonable to ask why there is a need for a new network switch.”
 
但是,如果你是大型数据中心的网络管理员,一朵没有网络虚拟化支持的云,将是无尽的噩梦。
在传统数据中心中,网络管理员习惯了每台物理机的网络接入均可见并且可配置。通过在交换机某端口的策略配置,可以很好控制指定物理机的网络接入,访问策略,网络隔离,流量监控,数据包分析,Qos配置,流量优化等。
 
有了云,网络管理员仍然期望能以per OS/per port的方式管理。如果没有网络虚拟化技术的支持,管理员只能看到被桥接的物理网卡,其上川流不息地跑着n台VM的数据包。仅凭物理交换机支持,管理员无法区分这些包属于哪个OS哪个用户,只能望云兴叹乎?简单列举常见的几种需求,Open vSwitch现有版本很好地解决了这些需求。
 
   需求一:网络隔离。物理网络管理员早已习惯了把不同的用户组放在不同的VLAN中,例如研发部门、销售部门、财务部门,做到二层网络隔离。Open vSwitch通过在host上虚拟出一个软件交换机,等于在物理交换机上级联了一台新的交换机,所有VM通过级联交换机接入,让管理员能够像配置物理交换机一样把同一台host上的众多VM分配到不同VLAN中去;
 
   需求二:QoS配置。在共享同一个物理网卡的众多VM中,我们期望给每台VM配置不同的速度和带宽,以保证核心业务VM的网络性能。通过在Open vSwitch端口上,给各个VM配置QoS,可以实现物理交换机的traffic queuing和traffic shaping功能。
 
   需求三:流量监控,Netflow,sFlow。物理交换机通过xxFlow技术对数据包采样,记录关键域,发往Analyzer处理。进而实现包括网络监控、应用软件监控、用户监控、网络规划、安全分析、会计和结算、以及网络流量数据库分析和挖掘在内的各项操作。例如,NetFlow流量统计可以采集的数据非常丰富,包括:数据流时戳、源IP地址和目的IP地址、 源端口号和目的端口号、输入接口号和输出接口号、下一跳IP地址、信息流中的总字节数、信息流中的数据包数量、信息流中的第一个和最后一个数据包时戳、源AS和目的AS,及前置掩码序号等。
 
xxFlow因其方便、快捷、动态、高效的特点,为越来越多的网管人员所接受,成为互联网安全管理的重要手段,特别是在较大网络的管理中,更能体现出其独特优势。
没错,有了Open vSwitch,作为网管的你,可以把xxFlow的强大淋漓尽致地应用在VM上!
 
   需求四:数据包分析,Packet Mirror。物理交换机的一大卖点,当对某一端口的数据包感兴趣时(for trouble shooting , etc),可以配置各种span(SPAN, RSPAN, ERSPAN),把该端口的数据包复制转发到指定端口,通过抓包工具进行分析。Open vSwitch官网列出了对SPAN, RSPAN, and GRE-tunneled mirrors的支持。
 
关于具体功能,就不一一赘述了,感兴趣的童鞋可以参考官网功能列表:http://openvswitch.org/features/
 
只是在Open vSwitch上实现物理交换机的现有功能?那绝对不是Nicira的风格。
 
云中的网络,绝不仅仅需要传统物理交换机已有的功能。云对网络的需求,推动了Software Defined Network越来越火。而在各种SDN解决方案中,OpenFlow无疑是最引人瞩目的。Flow Table + Controller的架构,为新服务新协议提供了绝佳的开放性平台。Nicira把对Openflow的支持引入了Open vSwitch。引入以下模块:
 
·         ovs-openflowd  ---  OpenFlow交换机;
·         ovs-controller  --- OpenFlow控制器;
·         ovs-ofctl  --- Open Flow 的命令行配置接口;
·         ovs-pki  --- 创建和管理公钥框架;
·         tcpdump的补丁 --- 解析OpenFlow的消息;
 
不再展开,大家感兴趣的话可以Google之。
 

图2 :Open Flow示意图 -- 摘自Open Flow白皮书
需求决定产品,正是由于在企业级云中,需要各种丰富的网络功能,VMware才于n年前就推出了vSwitch、vDS等虚拟交换机。正是看到了云中的网络是一块大市场,Cisco才与VMware紧密合作,以partner的形式基于VMware kernel API开发出了自己的分布式虚拟交换机Nexus 1000V(功能对应于VMware的vDS)。可惜的是,这两款产品都是收费的。Citrix倒是基于Open vSwitch快速追赶,推出了自己的Distributed Virtual Switch解决方案。但是不好意思,也是收费的。开源云的标杆OpenStack去年下半年推出了一项宏大的计划,启动了Quantum项目,志在通过引入Open vSwitch,为Open Stack Network模块勾勒出“Connectivity as a service”的动人前景。有时间的话,会再单独开一篇文章讨论。
感谢开源,Open vSwitch是坐公交车的成本,进口跑车的体验!还等什么,在你的大型开源云架构中,使用Open vSwitch吧!
原文地址:https://www.cnblogs.com/shanghai1918/p/12843340.html