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. 从A页面带参数跳转到B页面;进行解析,并显示数据,进行编辑

    A页面跳转时候的地址: parent.layer.open({ type: 2, title:'新建草稿', shadeClose: true, shade: 0.8, scrollbar: fals ...

  2. JS的面向对象编程

    一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做&qu ...

  3. redis数据类型[string 、list 、 set 、sorted set 、hash]

    1. Keys  redis本质上一个key-value db,所以我们首先来看看他的key.  首先key也是字符串类型,但是key中不能包括边界字符:由于key不是binary safe的字符串, ...

  4. ORA-01036: 非法的变量名/编号

    今天写程序时,往Oracle中插入二进制数据,出现错误ORA-01036:非法的变量名/编号,代码如下: strSql = "INSERT INTO KA99 (KA991,KA992,KA ...

  5. java模拟http请求上传文件,基于Apache的httpclient

    1.依赖 模拟http端的请求需要依赖Apache的httpclient,需要第三方JSON支持,项目中添加 <dependency> <groupId>org.apache& ...

  6. Pyspider学习

    简介 国人编写的强大的网络爬虫系统并自带强大的WebUI,采用Python语言编写吗,分布式架构.支持多种数据库后端 pyspider中文网站:http://www.pyspider.cn/ 源码网址 ...

  7. Flume示例

    建议参考官方文档:http://flume.apache.org/FlumeUserGuide.html 示例一:用tail命令获取数据,下沉到hdfs 类似场景: 创建目录: mkdir /home ...

  8. EasyUI获取DataGrid中某一列的所有值

    function count() { var rows = $('#dg'').datagrid('getRows')//获取当前页的数据行 var total = 0; for (var i = 0 ...

  9. 第一百四十六节,JavaScript,百度分享保持居中--下拉菜单

    JavaScript,百度分享保持居中--下拉菜单 百度分享保持居中 效果图 html代码 <div id="share"> <h2>分享到</h2& ...

  10. 设置EntityFramework中decimal类型数据精度

    EF中默认的decimal数据精度为两位数,当我们数据库设置的精度大于2时,EF将只会保留到2为精度. e.g. 2.1999将会被保存为2.20 网上找到常见的方法为重写DbContext的OnMo ...