zoukankan      html  css  js  c++  java
  • OpenStack Network --- introduction部分 阅读笔记

    Basic Networking

    1、混杂模式(promiscuous mode):当网卡被配置为混杂模式时,它们会将所有的frame传递给操作系统,即使MAC地址不匹配。

    2、交换机(switch)是一种拥有多个端口的网络硬件,能将frame从连接的一个主机转发到另一个主机。它会维护一张叫做forwarding table或者交forwarding information base(FIB)的表,用于记录MAC地址和端口的关系,该表由交换机转发frame的过程中学习获得。交换机还可以级联在一起,这些连接在一起的交换机和主机可以看成是单个网络。

    3、VLAN可以让单个交换机看起来像多个独立的交换机一样,即连接在同一个交换机上的主机,如果它们不属于同一个VLAN就看不见对方。每一个VLAN有一个编号从1到4095的ID。

    当多个交换机连接在一起时,连接的端口(即trunck port)必须能够转发来自任何VLAN的Ethernet frames,而且发送frame的交换机必须给frame加上VLAN ID,这样接收的交换机才能保证合适的主机收到该frame。

    4、如果两个主机的IP地址的网络号相同,那么它们属于同一个subnet,而以太网中位于同一个local network的两台主机之间可以互相通信。ARP协议假设,同一个subnet中的主机都位于同一个local network。

    5、有两种方式来表示一个子网:

    dotted quad: 255.255.255.0

    classless inter-domain routing(CIDR): 192.168.1.5/24

    6、DHCP(Dynamic Host Configuration Protocol)用于在主机启动时自动为其分配IP。

    DHCP client由端口67向地址255.255.255.255的端口68发送一个UDP包,DHCP server会从端口68向client的端口67发送响应。具体交互过程如下:

    1. client发送一个discover(我是MAC地址为08:00:27:b9:88:74的client,需要一个IP地址)
    2. server发送一个offer(好的,08:00:27:b9:88:74,我给你一个IP地址10.10.0.112)
    3. client发送一个request(Server 10.10.0.113,我愿意接受IP 10.10.0.112)
    4. server返回一个acknowledgement(好的,08:00:27:b9:88:74, IP 10.10.0.112是你的了)

    DHCP server通常会在发送给DHCP client IP地址和子网掩码的同时,还会发送default gateway的IP地址。OpenStack用dnsmasq来实现DHCP server。

    7、因为TCP能够检测(detect)和重传(retransmit)丢失的包,因此它被称为reliable protocol。

    8、应用可以用多播(IP multicast)技术将UDP数据包发送到指定的主机集合。接收的应用必须首先通过给UDP socket绑定一个合法的multicast group address来加入一个multicast group。接收主机和发送主机不需要在同一个local network,但是中间经过的路由器必须被配置成支持IP多播的。VXLAN就是一种使用IP多播基于UDP的协议。

    Network Components

    1、防火墙(Firewalls) 用于对流量进行管理。防火墙可以是用来连接两个网络的定制的设备,也可以是在操作系统中基于软件的过滤规则。它可以基于源IP地址,目标IP地址,端口号以及连接状态等条件对包进行过滤。主要用来让主机避免未经授权的登陆以及恶意的攻击。Linux系统一般使用iptables来实现防火墙。

    Overlay(tunnel)protocols

    使用隧道的原因是在不兼容的网络上传输数据,或者在不安全的网络上提供一个安全的路径。通常被传输的数据都会进行加密,从而让那些私密的数据也能公开进行传输。

    1、GRE(Generic routing encapsulation)

    2、VXLAN(Virtual extensible local area network)是为了提供可扩展的网络隔离。它运行在多个三层网络之上构建一个二层的overlay网络。每个overlay都被称为一个VXLAN segment。只有处于同一个VXLAN segment中的虚拟机才能互相通信。

    Network Namespace

    1、Linux启动时存在一个default namespace,所有的网络设备都存在其中。但是我们也可以新建network namespace,并且在其中创建新的设备,或者将已有的设备从一个namespace转移到另一个namespace。

    2、每个network namespace都有它自己的路由表,这是network namespace存在的主要原因。路由表的关键是目标IP地址,而如果想要同样的目标IP地址在不同的时候代表不同的含义,network namespace正是我们需要的。而这对OpenStack Networking对于不同的虚拟网络提供有重复的IP地址的特性是非常重要的。

    3、VRF(Virtual routing and forwarding)是一种能够让多个路由表实例存在于同一个路由器的IP技术。

    Network Address Translation

    1、NAT可以在IP包传输的过程中改变其头部的源地址或目标地址。通常IP包的发送者和接收者通常都不会意识到包被修改过了。在OpenStack中,通常是Linux服务器用iptables软件包来实现NAT的。

    2、RFC 1918保留了以下三个子网作为私有地址:

    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16

    3、SNAT(Source Network Address Translation)在数据包进入公网之前,NAT路由器会将IP数据包头部的源地址改成它自己的公网IP,并且修改源TCP或者UDP端口,同时路由器会维护一个表,用于记录源IP地址以及端口到修改后的IP地址和端口的映射关系。这种既改变端口也改变IP地址的SNAT方式称为PAT(Port Address Translation)或者NAT overload。

    4、DNAT(Destination Network Address Translation)显然就是用于修改IP数据包头部的目标IP地址。OpenStack使用DNAT将实例的数据包转发到OpenStack metadata service。通常,OpenStack实例中的应用都是通过发送一个HTTP GET请求给IP地址为169.254.169.254的web server来访问OpenStack metadata service。不过事实上OpenStack中并没有主机有这么一个地址。所以OpenStack使用DNAT用于转换这些包中的目标IP,从而让它们能访问metadata service的网络接口。

    5、One-to-one NAT,在这种NAT路由器中维护了私有IP和公网IP之间的一对一映射关系。OpenStack通常使用one-to-one NAT来实现floating IP address。

    OpenStack Networking

    Networking service,又称neutron,提供了能够让我们在云中定义网络的连接性和寻址的API。同时,它也提供了能够配置和管理各种网络服务,包括L3 forwarding, NAT到负载均衡,外围防火墙和VPN等等。它主要包括了以下三个组件:

    • API server: OpenStack的Networking API支持二层网络,IPAM以及一个三层路由结构的扩展,用于二层网络,网关到外部网络的路由。
    • OpenStack Networking plug-in and agents:用于plug或者unplug端口,创建网络或子网,提供IP寻址。需要注意的是,一次只能使用一个plug-in
    • Message queue:用于在agents之间接收并且路由RPC请求。

    在OpenStack中有project network和provider network两种类型的网络。

    Provider networks

    Provider networks提供虚拟机实例之间的二层连通性,同时对于DHCP和metadata services提供可选的支持。这些网络会连接或者映射到数据中心的二层网络上,通常用VLAN tag来标识和划分它们。Provider networks在牺牲灵活性的情况下,能够提供简单性,性能和可靠性。默认只有管理员能够创建和更新provider network,因为它需要对基础物理网络的设置。

    Routed provider networks

    Routed provider networks提供了虚拟机实例之间的三层连通性。这些网络通常映射到数据中心已有的三层网络。事实上,它们会映射到多个layer-2 segments,每一个segment其实就是一个provider network。每一个网络都有一个router gateway与它相连,用于在它们之间以及外部路由流量。Networking service是不提供路由的。

     Self-service networks

    Self-service network 是完全虚拟化的并且需要虚拟路由器来连接provider network和external network。通常它们还给虚拟机实例提供DHCP和metadata service。一般情况下,self-service network使用overlay network例如VXLAN和GRE,因为它们相比于使用VLAN tag的layer-2 segmentation可以支持更多的网络。而且,VLAN一般需要对基础物理网络进行设置。

    IPv4 self-service network一般使用私有IP地址段并且通过虚拟交换机的SNAT和provider进行交互。而Floating IP能够让provider network通过虚拟路由器的DNAT访问虚拟机实例。IPv6 self-network通常使用公网IP地址段并且通过虚拟路由器的静态路由和provider network进行交互。

    Networking service使用在之上一个Network node中的layer-3 agent来实现router。与provider Network直接将实例连接到物理网络中不同的是,self-service network必须经过一个layer-3 agent。因此layer-3 agent或者network node的故障都会对self-service network和使用它们的实例产生巨大的影响。

    OpenStack主要支持Flat,VLAN,GRE和VXLAN这四种网络拓扑结构

    Subnets

    Subnets用于新的ports在一个network中创建时,为其分配IP地址。

    Subnet pools

    Subnet pools是一个预先定义的地址池,从而让规定了可以使用的IP地址的范围,让所有子网都在给定的地址池内。以此来避免同一个地址池内地址的重用以及子网之间地址的重合。

    Ports

    port是设备和虚拟网络的连接点,同时,port描述了相关的网络配置,例如该port使用的MAC和IP地址

    Routers

    路由器用于在self-service和provider network之间,或者属于同一个project的self-service network之间提供layer-3 services,例如路由和NAT。Networking service通常使用layer-3 agent,通过namespace,来管理路由。

    Security groups

    每个project都包含一个default security group,它允许所有的出口流量并且拒绝所有的入口流量。

    Service and component hierarchy

    • Server:提供API,管理数据库等等
    • Plugin-ins:管理agents
    • Agents:提供实例间的二层或三层连接,处理物理和虚拟网络之间的转换,处理元数据
  • 相关阅读:
    认证功能装饰器
    装饰器升级版
    装饰器
    闭包函数
    名称空间与作用域
    嵌套函数
    函数对象
    命名关键字参数
    函数单数的使用
    函数的定义与调用
  • 原文地址:https://www.cnblogs.com/YaoDD/p/6397517.html
Copyright © 2011-2022 走看看