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:提供实例间的二层或三层连接,处理物理和虚拟网络之间的转换,处理元数据

OpenStack Network --- introduction部分 阅读笔记的更多相关文章

  1. “Triplet network”三元组网络阅读笔记

    记录<DEEP METRIC LEARNING USING TRIPLET NETWORK>阅读笔记 文章总体内容: 作者在前人提出的多个特征提取方法的基础上提出Triplet netwo ...

  2. 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification

    Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...

  3. [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximati

    [论文阅读笔记] Fast Network Embedding Enhancement via High Order Proximity Approximation 本文结构 解决问题 主要贡献 主要 ...

  4. [论文阅读笔记] Community aware random walk for network embedding

    [论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...

  5. [论文阅读笔记] LouvainNE Hierarchical Louvain Method for High Quality and Scalable Network Embedding

    [论文阅读笔记] LouvainNE: Hierarchical Louvain Method for High Quality and Scalable Network Embedding 本文结构 ...

  6. [论文阅读笔记] Structural Deep Network Embedding

    [论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...

  7. [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion

    [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...

  8. [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding

    [论文阅读笔记] Adversarial Mutual Information Learning for Network Embedding 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 ...

  9. Mina源码阅读笔记(一)-整体解读

    今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者类的方法.我倒是想从mina源码的结构和功能上对这个框架进行剖析.源码的阅 ...

随机推荐

  1. 安装gstreamer开发环境

    ubuntu中安装gstreamer开发环境: * 安装gstreamer基本库,工具,以及插件 sudo apt--dev gstreamer-tools gstreamer0.-tools gst ...

  2. iOS开发多线程篇 05 —GCD介绍

    iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...

  3. 消除^M

    在Linux和windows之间移动文件时,总是会出现在windows下编辑的文件在Linux打开时每一行都显示一个^M,虽然不影响使用,但是却影响美观,于是就想自己实现个小程序来进行转换. 要实现转 ...

  4. continue和pass測试

    >>> for i in range(1,10): print i try:int('sdfa') except:pass 1 2 3 4 5 6 7 8 9 >>> ...

  5. JS——简单的正则表达式验证

    <!-- 用户注册:结构层:html;表现层:css;行为层:javascript; html利用ul,li来构造: 注意事项:1.每个Input都要有相应的id,这是在js中去调用的. 2.& ...

  6. 磁盘 & 文件系统

    1. dumpe2fs –h /dev/sda1 查询整个磁盘情况( 其中后边的设备名可以换 ) 2. df –h , du –h 查询磁盘容量情况 3. 实体链接和符号链接 实体链接: ln mk. ...

  7. Collection 和 Collections的区别?

    Collection 和 Collections的区别? 解答:Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List:Collections是 ...

  8. 【python】pyqt练习

    import sys from PyQt4.QtCore import * from PyQt4.QtGui import * import ui_price class PriceDlg(QDial ...

  9. 边缘检测sobel算子

    sobel算子 - sophia_hxw - 博客园http://www.cnblogs.com/sophia-hxw/p/6088035.html #1,个人理解 网上查了很多资料,都说sobel算 ...

  10. servlet各版本区别以及dynamic web module 版本之间的区别

    java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要喝对应的服务器搭配好了才能跑,今天 ...