Networking

有关网络与网络虚拟化的一些资料

几天前看到的一片文章Resources for Networking and Network Virtualization,来自blog.scottlowe.org。文中提及作者给朋友推荐的一些网络和网络虚拟化有关的博客和Twitter帐号,其中networkstatic.net、networkheresy.com和blog.ipspace.net也是我一直以来由关注的博客,ICC13那篇论文中的工程实现部分参考了ipspace.net中的一些内容,networkheresy.com中对与网络虚拟化的思考一直都能给人带来启发,然后在networkstatic.net那里学到不少关于Open vSwitch和OpenFlow Controller的知识,当然内容远远不止这些。所以至少上面这三个博客的质量是非常不错的。

至于文中提到的其他博客的质量还有待检验,貌似www.jedelman.com在国内无法访问,大概需要一些特殊的手段才行。然后因为blog.scottlowe.org在国内的访问也不是很稳定,所以顺便转载一下这片文章。

======================================================================

Good friend (and now colleague) John Troyer asked me via e-mail if I had a “reading list” for networking and network virtualization. I didn’t have a formally-prepared “reading list,” so I just shared with John some of the resources that I personally use. John’s response was: “You should blog this.” So, here it is—a list of resources for networking and network virtualization.

  • Brent Salisbury, aka @networkstatic, has plenty of good material on his site.
  • Jason Edelman (@jedelman8 on Twitter) is also worth reading.
  • Network Heresy is a great site. In the spirit of transparency, note that Network Heresy is maintained by folks from VMware/Nicira, such as Dr. Bruce Davie, Martin Casado, and others.
  • Brad Hedlund (@bradhedlund if you’d like to follow him on Twitter) is another great networking and network virtualization resource. Since Brad works with me at VMware, the focus of most of his material is on network virtualization.
  • Ivan Pepelnjak (@ioshints) is a legend among networking folk—I’ve learned a ton from reading his stuff.
  • Greg Ferro (@etherealmind) also shares tons of great networking material on his site.
  • I’ve also found some useful material at Nick Buraglio’s site.
  • Finally, we’re hoping to make VMware’s new Network Virtualization blog a useful destination for networking and network virtualization material. There are also some additional sites on the blogroll there.

Naturally, any list like this is incomplete (my apologies if you weren’t included, I’m sure it was an oversight not an intentional omission!), so I invite readers to share resources they’ve found useful in the comments below. Courteous comments are always welcome, although I do ask for disclosure of vendor affiliations where applicable.

======================================================================

最后,必须说明一下blog.scottlowe.org也是一个很优秀的博客,之前学到了很多关于VXLAN和STT两个Tunnel技术的相关知识。

Learning

Reading Note: Outliers

过去的两个星期,花每天上下班的时间,把之前 Outliers 剩下的部分读完了。大二的时候读过中文版,当时觉得《异类》这本书的精髓在 10,000-hour rule 上面,等价的来说,3年每天大约十个小或者10年每天三个小时的积累。如果你尝试过去按每天三个小时的标准去坚持一件事情,那么,除非是对这件事情本身非常喜欢,抑或是在某种强大的压力之下,否则能坚持的时间不会超过两个星期。所以要做到优秀在某种程度上是一件很残酷的事情,特别是如果一个人同时还处于第一章中提到的不利条件下。

不过,这种章节上的安排,正是我觉得这本书做的不好的地方。第一章中马太效应的引出很巧妙,第二种对对于 10,000-hour rule 的提炼让人信服,但是后续的第三章和第四章,又回归到了智商和情商的对比上,而且连续两章都在重复一个已经被大家普遍接受的观点,从阅读体验的角度上来说,惊艳的表现之后迅速归于平淡,不免有些失望,同时继续阅读下去的兴趣大减。

也许按照畅销书的思路,一开始就需要能抓住读者眼球的东西,也正因为如此,前面几章必须写得出彩,之后的部分表现的相对乏力也在情理之中。作为整本书两个部分的第一部分——Opportunity——本以为会就此在平淡中结束,但是最后一章——’The Three Lessons of Joe Flom’——在相对平淡的两章之后,真的让人好好地上了一课。

Lesson One: The importance of being Jewish

Lesson Two: Demographic luck

Lesson Three: The garment industry and meaningful work

可以这样说,第一部分前面的章节都在给出一些必要的条件,其中的举例其实总是从这个条件的角度去分析例子,但是这一章当你慢慢读下来的时候,会发现作者在从之前给出的条件之外的角度,去看待这些条件的影响,同时更多地背景引入,阐述之前的条件法则在这些但是背景之下对一个人的影响。这也是为什么这三个标题都和个人的出身、时代背景相关。

作为犹太人的出身没有给当时的Joe带去在顶尖律师事务所工作的机会,但是却给了Joe在当时主流事务所不愿意去接触的案件领域开拓的机会,而这个领域在若干年之后成为一个十分热门的领域,早期的开拓使得Joe积累属于他的10,000 hours。Joe出生在一个人口出生率很低的时代,这意味着在他事业开始的时候更多的机会和可能的经济复苏。这个章节中有一句话很好的总结了什么是meaningful work:

Those three things – autonomy, complexity, and a connection between effort and reward – are, most people agree, the three qualities that work has to have if it is to be satisfying.

这也可以作为一个找工作的标准,一个能让自己满意的工作至少应该首先满足上述的三个特点。

整本书的第二部分有关Legacy。

1999年大韩航空因为之前的一系列航空事故陷入底谷,法航和达美航空相继中止了与其的合作伙伴关系,美国联邦航空管理局调低了对其的安全评级,同时加拿大官方开 始考虑取消大韩航空的过境和降落权利。回顾之前的那些事故,机械上的原因很少,主要的问题集中在人的身上,不过不是因为飞行员的能力不行,而是文化体系的 不同,而文化传统带来的影响是身处其中的人难以感受到的。所以,驾驶舱内的副驾驶员和工程师并不是没有意识到可能发生的危险,但是他们难以去用正确的方式 表达出他们的观点,直到灾难发生。

这部分在阅读过程中可以感受到作者文字上的控制能力,事件分析依次展开,层层深入,一口气读完非常舒服。之后的部分可能因为文化背景上的差异,没有空难这部分令人印象深刻。

最后,中文版也许因为是翻译的问题,总觉得没有英文版那样有说服力。

Networking

A brief introduction to VXLAN

VXLAN从IETF草案上的声明——“This document describes Virtual extensible Local Area Network(VXLAN), which is used to address the need for overlay networks within virtualized data centers accommodating multiple tenants. The scheme and the related protocols can be used in cloud service provider and enterprise data center networks.”——可以看出,它所主要是用来满足数据中心中对网络overlay的需求。因此VXLAN所要解决的问题,来自数据中心中应用STP和VLAN带来的限制问题(STP对与端口和网络链路的浪费和VLAN的数量限制)以及对于多用户组环境的需要和ToR交换机上的流表数量不足的问题(估计VM的数量很大的情况下才会有次问题)。

VXLAN使用MAC in UDP的方法进行封装,并在中间添加了一层VXLAN Header。VLXAN的封装结构如下图所示,

VXLAN Format

        VXLAN Header:
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |R|R|R|R|I|R|R|R|            Reserved                           |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |                VXLAN Network Identifier (VNI) |   Reserved    |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1. VXLAN Header:
    共计8个字节,目前被使用的是Flags中的一个标识位和24bit的VXLAN Network Identifier,其余的部分没有定义,但是在使用的时候必须设置为0x0000。
2. 外层的UDP报头:
    目的端口使用4789,但是可以根据需要进行修改。同时UDP的校验和必须设置成全0
3. IP报文头:
    目的IP地址可以是单播地址,也可以是多播地址。
    单播情况下,目的IP地址是VXLAN Tunnel End Point(VTEP)的IP地址。
    在多播情况下引入VXLAN管理层,利用VNI和IP多播组的映射来确定VTEPs。
从封装的结构上来看,VXLAN提供了将二层网络overlay在三层网络上的能力,VXLAN Header中的VNI有24个bit,数量远远大于4096,并且UDP的封装可以穿越三层网络,因此比的VLAN更好的可扩展性。
VM之间的通信模型
transition
单播(VM <—> VETP <——-> VETP <—> VM)
  1. VTEP首先会去检查发送报文的VM所对应的VNI,
  2. 查看报文的MAC地址是不是和某个已知的VTEP存在对应关系
    2.1. 如果存在,则在报文外部添加VXLAN所需要的外层报文,
    2.2. 如果不存在,则会去多播这个报文,这里需要引入VXLAN的VNI和IP多播组的管理层概念
  3. VTEP接收到VXLAN报文之后,会通过类似网桥自学习的方式建立VTEP和内层MAC的映射。
多播或者广播
  1. 在支持多播的情况下,VTEP可以通过IGMP来加入或者离开VXLAN多播组
  2. 可以通过PIM-SM或者PIM-bidir来建立多播树
  3. 在不支持多播的情况下,VTEP需要通过广播的方式封装,不过可以预见的是网络的性能会显著下降
  这里存在一个问题:在外层网络支持多播的情况下,VXLAN中的VNI数量可能大于多播地址。
一些需要关注的问题:
  1. 需要改变外层网络的MTU,因为对内层网络的添加了外层的报文头,因此需要增加MTU的值。
  2. 外层网络的组播支持