概念

Open vSwitch中许多网络上的概念与平时接触到的不同,这里介绍一下Open vSwitch中用到的一些名词及概念。

Packet (数据包)

网络转发的最小数据单元,每个包都来自某个端口,最终会被发往一个或多个目标端口,转发数据包的过程就是网络的唯一功能。

Bridge (网桥)

Open vSwitch中的网桥对应物理交换机,其功能是根据一定流规则,把从端口收到的数据包转发到另一个或多个端口。

Port (端口)

端口是收发数据包的单元。Open vSwitch中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去。Open vSwitch支持的端口有以下几种:

  • Normal Port: 用户可以把操作系统中的网卡绑定到Open vSwitch上,Open vSwitch会生成一个普通端口处理这块网卡进出的数据包。

  • Internal Port: 当设置端口类型为internal,Open vSwitch会创建一快虚拟网卡,此端口收到的所有数据包都会交给这块网卡,网卡发出的包会通过这个端口交给Open vSwitch。

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAJhUlEQVRoge2ZWWycVxXHf+fce7/vm/GaGCde4pI0aQlJC0kRtE1L00JbLIjY4QkeUB9YHhAIJFCExAsKUkE8IAFFPIDUIqhBRSDRBUqCCimFFBCBpCWx02IaZ3G2SdyxPZ7vHh6+mcnSZnFjKIge6Wj8zYzvPf9z/me5d8TM+F8WfbkNuFx5BcDLLf/fAEZGRmx4eNh6enqsp6fHhoeHbWRk5D9aFeSlVqHNmzfb6H33sHnT7ZQmD5GfOMax6Sm+Pl5h1Yc+xpYtW2SBbX1ReUkRGBkZsdH77mHLW95EOv4Ms3ueJh6YYPHUFF9aljJ63z3cf//9/5FIvKQIDA8P293L2yhVjjH7t51ocDiviFecF46n7XzBreChhx4qNhH5t0XjJUVgx44ddGUZ9b/vIpQDoRQIWSDJAiFL6B9axo4dO4gxAmANWVDLG+Ln82URMRGhVCqRHxonlAPqFXWKC4r6IhI6OMjMzBN4/4LlTUQQEZxzZ32QJAlpmrb+p16vU6vVOHXq1AWjN18AnDj0F971vrs4OnmYJVkoDA4FCPUO172ICgnt7SV++4vvsGhRJx3tJbIsRVVpsUnOBBABBVFEClKYwbKr7sTM7EIUnBcA7z21k7t49x1X8JXvbOWra7rw5QRtcN8PLCfvvZJvb9vJycpJpg4/hp/N0I4SMQs4Jw0A5zBXHGiCaIZIKABgpGlKjPEF0TpT5pUDRXiVt99+Le03r+WzuytM1gO6pB/3+o0cbxvk8yOPMjW6i2iR2lxOjJDHSDMFogmGwzQ7rRJAUpAENAGXIZq2AFzQpvkACCEQcahP+cRH3sKHn9zHXU+MM7rtGeD33NDXzaZynZU9gcezpUw9X6OzIyOakkfF4QEpPG6nDRNNEA2FSgKimETSNCXPc0II57VpXhEolUqoOrxPSLOMT330Dv5SqfKDNR388Y2L+caQsjITNv3pMBs3rOT56ZyZGaM+J0QUxDc0INrWUgggoRGBAOIRAt77hY1AmqaoeJxPcN645jVDbNn8Hj73o8fZ/af9mEE9j9y2YRXt5YzZWmRmzjj1/BwhTXAKzitOHEbeWlc0AVwDnCv8KoZzjotV33lTSL1HNKAuEtKM1169jM98/E6mTk3x4Nbd7Bk7TEdHRvAeVY+hmDqmZwx1kIkiqrhzS2zL+AbNMC6l/80LgHMOEY9oQvBCks5RKpXo7JhFxbhz42pet2aQet1YtLiDJAkIDq8BHwJmwlwOUaD0ojsrNKuUReIZyb9gABCHcwWFgg+0lTPyvIRToVzKWLpkMfV6REQplYvmZCj1uuBUSdJwTg8AXBdoCZMOsBkQBeGi/J83gBgjmABC8AlJGsjzFLMyaXDM1etEA0VR50iCx6mSZhkiijpPjEpQD+SF4WdJrTAewdCFB1CtVlFVVATnhMQnWJqC5aTBk+c5IIgWRoTgSZJAmiZAo1s7hwsppglI+fTiljeYnyHkLQotKIAYI4igzpFHISQOiwEnKTEG8hhRVZw6YjRQLfJGHcF7jleqTBw8znXr12MABnv37efYiSnesG4tiUsRUQwD7JIAzKsPqCqiRbVwweM04XdPjhJN+dvTBxgbn6G9q59yZx9/3HWEb33vN+zc/RzOJ+w/eJLtO8Z5ZNtT7PvHIUQTvvv9X/Lc/mN0d3by3fseRLQwvWh0Fy+h8wbQ2VFG1KM+xfuAqufo8So/fejPPD/rqJys8pvf7eLAoeNMHqnw2U9+kH3jVQ5MClMzKUla5obr13HliiEMmDx6gltvuY7Vr1nBQF8PJopQ9AFTt/AROFfMjCW9XTy19xB33Hodb924jr1j+/nDk3/nzTdei4jw3nfeyCOPbufa1y5jzeoVrcHM8HR3dfHlr/2Q+x94jFtuuh44/9B2PplXDryYLF3STXd3e+t5UXcHY89OsOH6NS2Qed7wpM1Rm50G4MGHH2P961Zy3bqreXrPP5mrzwLt5y6/cACq1eoLCKm+TN/SAebmfn8aUG83PYs7+cnPH+eqKwd5as8/edc7bi02847pmVkATk1VWbF8AOcca1Yv59DkqcYK0tCL02deACqVCldc0YdIwLmEPM9RV6NnUZlPf3wT6oqJcePN6wHhzTeu4/CRCrfctJ4sSxBRli7pYfHEMUSU97/7Th751RP8eec+Yp5zzTVXM9DfDyogBvHS6HTJACYmJnjVoq5GFw0454gCEOnoaMfiNGZFFRFxJGkbywZ6i1NWoy9kWYmbb1gHKCHApuGbisVFGyoYUswa5OR5ftF56JIBjI6OMtDfWwAQ35jnc8AVpRXBohVqUowECKqK4RBxoE0W6gvGCcEjaOEAwEQWdpgbGxujt7erOLO2mk3R8i0Wz9EiuUGz+qlKEQEUaJbI4lTHmTVePKgWzpDGJGpc8CDTlEsuo88++wxXDA0UIUbAOP23KGZKjI48KnkuhcbiPbPCOBoeBikOLk2VxjqNRilaAEqSZGEAbN261bZt+zW33XY7IAXXm6Ou0YhIMamaaUOl5WRrzg00viuKWWxpQUOHNAZFQRpD48Xlkig0MTHBB95zG+VSylz1KCbWyDOh2XyK+56IqjWMKigkUnzWnPPFFFRRLZ29SQRUELOGY4pZ6LKOlM07mZ07d/KOtw1TcB4sGkTDiDQ9K1IkrKeYmQC08d7pZLSiRBpE5s7aS0XAHFEKAGY51Wr18g80Zmb33nsvX/z8XdSmj2AWOXhwkrxe46+79jB55Dh/3T2GxUhHextdXW2sXN7PNWtWIQKDA71FFBoAjIgQkVg/a5+oHrU5zIznDhxk964xKpXKggAoTlWW8+OfPorlOQ//cjsDy1bS2dFOW+diVly1iL6+Pqanpzl5qsL4pPHwN3/G1InDlMsZ7Z1tDA30cfWqIa5dexV9fb2YnT7UTxw4xsHJo4yOjfOP8QOMjx/k4OQx7r777lY0zycXvJ02M4sxMjg4SL1eR0TYsGEDw8PD9PX10d7ejogUN3a1GqpKCIE8z5mdnUVVqVarbN++nba2Nvbu3csDDzyAqrJ8+atb+zjn6e/vZ/Xq1axatYq1a9fS29tLlmUMDQ1RKpXOm9EXvV6v1+tWr9eZnp5mZmaGWq1GjLHF62aiNZ+bnPfe45xrvTZzxMyYmZk56+LXzKjX661DvHOOJElIkoRSqYT3/vLvRlW15eHCa4VxzdvmpjZDfubzuXeb3vuzqCEixBhbo0NTkyS5PAr9L8j/96+U/w3yCoCXW14B8HLLvwDd67nwZIEPdgAAAABJRU5ErkJggg==" alt="Note" /> 当Open vSwitch创建一个新网桥时,默认会创建一个与网桥同名的Internal Port
  • Patch Port: 当机器中有多个Open vSwitch网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。

    aaarticlea/png;base64,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" alt="Tip" /> Patch Port是机房术语,特指用于切换网线连接的接线卡。此卡上面网口成对出现,当需要把两台设备连接起来时,只需要把两台设备接入同一对网口即可。
  • Tunnel Port: 隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。

Interface (iface/接口)

接口是Open vSwitch与外部交换数据包的组件。一个接口就是操作系统的一块网卡,这块网卡可能是Open vSwitch生成的虚拟网卡,也可能是物理网卡挂载在Open vSwitch上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在Open vSwitch上。

Flow (流)

流定义了端口之间数据包的交换规则。每条流分为匹配和动作两部分,匹配部分选择哪些数据包需要可以通过这条流处理,动作决定这些匹配到的数据包如何转发。流描述了一个网桥上,端口到端口的转发规则。比如我可以定义这样一条流:

当数据包来自端口A,则发往端口B

来自端口A 就是匹配部分,发往端口B 就是动作部分。

流的定义可能非常复杂,比如:

当数据包来自端口A,并且其源MAC是aa:aa:aa:aa:aa:aa,并且其拥有vlan tag为a,并且其源IP是a.a.a.a,并且其协议是TCP,其TCP源端口号为a,则修改其源IP为b.b.b.b,发往端口B
Datapath

由于流可能非常复杂,对每个进来的数据包都去尝试匹配所有流,效率会非常低,所以有了datapath这个东西。Datapath是流的一个缓存,会把流的执行结果保存起来,当下次遇到匹配到同一条流的数据包,直接通过datapath处理。考虑到转发效率,datapath完全是在内核态实现的,并且默认的超时时间非常短,大概只有3秒左右。

实现

当Open vSwitch的一个接口收到数据包后,会由下图所描述的流程处理:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAooAAAGWCAIAAABw6jWmAAA8AklEQVR42u29aVRVV5qArQQUDCaKJqEUxxhDG21xlbpwqNIY0qa7MJ9RkrKMbex0rDK2duhO0k1aV8dSVlKJQxIxplMOKIgioKDiCIKCAjIIMiooMqMXmWWW5HsX+8ut+13lCoiXKzzPD9aZ7jnn7nfv/ez3cO45vX4GAAAAE6MXRQAAAICeAQAAoM16/gkAAAC6FPQMAACAngEAAAA9AwAAoGcAAABAzwAAAOgZAAAA0DMAAAB6Rs8AAADoGQAAANAzAAAAegYAAAD0DAAAgJ4BAAAAPQMAAKBnAAAAQM8AAADoGT0DAACgZwAAAEDPAAAA6BkAAADQMwAAAHoGAAAA9AwAAICeKRQAAAD0DAAAAOgZAAAAPQMAAAB6BgAAQM8AAACAngEAANAzAAAAoGcwJcrKyuzs7HrBLzg4OFArAAA9QxcTERHh6Oj4M7QQHh4+ZcqUqqqqmpqaurq6xsbGe/fuUUkAAD2DsfHw8FixYgViVnz99dfvvvtuQUGBRqMpLy8XSYuhqSQAgJ7B2KxatWrbtm2IWbF06VI3N7eMjIycnJxbt25VVlY2NDRQSQAAPYOxcXR0jIyMRMyKV155ZevWrXFxcenp6bm5uaWlpfX19VQSAEDPYGysra3Ly8sRs9DU1GRpaenj4xMeHp6QkJCVlXX79m30DADoGYxNdna2nZ0dYlaIkgcOHOjl5XXs2LELFy6kpaUVFxejZwBAz2BsAgMDnZ2dEbPCw8NjwoQJ3t7ewcHBUVFRGRkZkj1zaxgAoGcwNu7u7m5ubohZsXz58rlz5+7fv//UqVOXLl3Kysq6c+cOP6wCAPQMxsbFxcXX1xcxK6ZPny6GPnjwYEhISHx8fHZ2dnl5eXNzM/UEANAzGJXx48enpKQgZsXQoUPXrVsXEBAQFhaWmJiYm5tbVVVFJQEA9AxGpba21tLSsqmpCTELpaWlZmZmO3fuDAwMPH/+fHJyckFBQU1NDfUEANAzGJXY2FgHBwfErDh69Kidnd3evXtlgtu2AQA9Q5fh6em5ZMkSxKxYv3791KlT9+3bd+LEiejo6GvXrmk0Gm7bBgD0DMbG1dV106ZNiFmxYMGChQsXHjhw4PTp07GxsdevXy8tLeW2bQBAz2BsnJycTp06hZgVEyZMWL16tZ+fX2hoaEJCws2bNysqKqgkAICewdgMHjy4uLgYMQvNzc3W1tabN28+dOhQeHh4UlJSXl5edXU1lQQA0DMYFY1GI3pGzIrMzEzRs6en55EjRyIiIlJTUwsLC+vq6qgnAICewaicPHnSyckJMSt27do1duxYLy+v4ODgixcvZmRk3Lp1i1dJAgB6BmOzadMmV1dXxKxYtWrVnDlzfHx8ZNQSExMjyXRJSUlTUxP1BADQMxiVZcuW7dy5EzErnJycli5devDgwTNnzsTHx9+4cYPHeQIAeoYuwMHBIS4uDjErhg8fvmbNmoCAgLNnzyYmJubk5PA4TwBAz2BsGhsbLS0t6+rq2quxXi08ug47az+dwt27dy0sLLZv3x4YGHju3Lnk5OT8/Hwe5wkA6BmMjRjI3t6+C7VqUnqWjNnW1nbPnj1Hjx6NjIxMS0srKiricZ4AgJ7B2Pj7+7u4uKBnxZYtWyZNmuTt7X38+PGoqKirV6/evn2bx3kCAHoGY+Pm5ubu7v7oWj19+vTMmTP79etnZWU1Y8YMmdXd2MBavf2kpKQMHTr0qaee2rp16wPlrbtETe/du3fcuHF9+vR58cUXxayPoufFixc7OzsfOHDg1KlTsbGxWVlZPM4TANAzdAFio6CgoEfUs+jWzMxs2rRpOTk5ubm5MiGzWgcbXqu7n4iIiAEDBvTv31+SV+3a3r17G9az2nNeXp6IX2bDwsI6rOdf//rXK1eu9PPzCwkJSUhIyM7Orqio4LZtAEDPYGxGjhwpOeIj6ll58eLFi2r2woULMivpclvWavcjowRLS8thw4ZduXJF9yiSSRvWs3bPMiGzr776aof1PGjQoC+++OLQoUPi+KSkJBlM8DhPAEDPYGzKysqsra0f/X/GVlZWMi0mU7NVVVUyKwvbslbtZ8eOHaLhyZMnFxUV6R3loXrW27MotmPfSGQsaX0v6KlYWFhQCF2Ovb09ekbP8FNERISjo6Mp6PmZZ56Rv05OTuXl5XpHEWVqZxsaGh6qZxsbm459Iz8/vxEjRnh5eR07dkwS8fT0dB7n2aOQykMhEAX0DCaBh4fHihUrHl3Pepev1UXm1i5u661V+4mLi5OsVyZefvnlzMxM7VH69OkjC2tra9XspUuXHt/F7U8//fS3v/2tj4/PiRMnYmJirl27xuM8EQMQBfQMXcCqVau2bdv26HpWN3+JhnNzc9UtWvffGtbaWu1+UlNTf/WrX8n0wIEDQ0ND1VrxpSz56quvJEW+cuXKpEmT7tez7p5lVvvZ9vLmm28uWrTI19dXzk2GC9evXy8rK+O+MMQARAE9g7FxdHSMjIzslN8rq59OWbUwffr0U6dO3f/Dqgeu1d2PGHHEiBEya25u/v3338uS7OzsefPm2djYPPvss/JBf3//+/W8Z8+eiRMnyp5HjRq1d+/eDt8XNmbMmI8//lgOcfbs2cuXL+fk5FRWVlJJEAMQBfQMxsba2lrvf71PFp34SJPGxkYRvIeHx+HDh8+dOyeZen5+/t27d6kkiAGIAnoGoyKJqZ2d3RP9+opO1HN8fPyAAQMkET9y5EhkZGRqampRUVFdXR31BDEAUUDPYFQCAwOdnZ3Rs0Ly5gkTJnh7ewcHB0dFRWVkZPA4T8QARAE9Qxfg7u7u5ub2+NwpaeiLL76ofklsgo/X1mPFihWvv/76/v37T506denSpaysrDt37vA4T8QARAE9g7FxcXHx9fV9rC9OlpaWmppqmm+/0GP69OnLly8/ePBgSEhIfHx8dnZ2eXk5t20jBiAK6BmMzfjx41NSUox55dmU9Tx06NB169YFBASEhYUlJibm5uZWVVVRSRADEAX0DEaltrbW0tKyqanpsbpZS3tfcjV69GjZ8vLly2r2Ny2o6YSEBFklG3Ti2ZaWlpqZme3cuTMwMPD8+fPJyckFBQU1NTXUE8QARAE9g1GJjY11cHAw8n1bbX/J1YoVK2RLDw8PmS4rK3uqBZmQ2e+++05WdfhhZw/k+PHjdnZ2e/fuPXr06IULF9LS0oqLi+vr66kniAGIAnoGo+Lp6blkyZIu1LPh11gdPnxYZhctWiTTPj4+6oMyIbPvvPOOTMsGnXiq69evnzp16r59+06cOBEdHX3t2jWNRsNt24gBiAJ6BmPj6uq6adOmLtSz4fdkVFRUmJubDxs2TKb/8Ic/jB49etSoUTKh/kksq2SDTjzVBQsWLFy48MCBA5K+x8bGXr9+vbS0lNu2EQMQBfQMxsbJyUnvuZsmpWd1K7Usyc7OtrGx+fTTTz/55JOBAwdmZWXJQlnVuafq4OCwevVqPz+/0NDQhISEmzdviv6pJIgBiAJ6BmMzePDg4uJi07m4rfcaK2HdunWy5MMPP5S/MTEx0dHRMrF8+XL5K6s68Tybm5utra03b9586NCh8PDwpKSkvLw8GTdQSRADEAX0DEZFo9GIno3/SK+2v+RKiIqKko0tLCzs7OzUaavL2rJQVnXieWZmZoqePT09jxw5EhERkZqaWlhYyOM8EQMQBfQMxubkyZNOTk5dq+eHvuTq3r17AwYMkO3//d//XS1ZvXq1zMpCWdWJ57lr166xY8d6eXkFBwdLEp+RkXHr1q2GhgbqCWIAooCewahs2rTJ1dX1Z2hBimLOnDk+Pj4yaomJiZFkuqSkpKmpiXqCGIAooGcwKsuWLdu5cydiVjg5OS1dutTX1/fMmTNxcXE3btwoKyvjcZ6IAYgCegZj4+DgIB5CzNpng69ZsyYgIODs2bOJiYk5OTk8zhMxAFFAz2BsGhsbLS0t6+rqELNQX19vYWGxffv2wMDAc+fOJScn5+fn8zhPxABEAT2DsRED2dvbI2ZFWFiYra3tnj17jh49GhkZmZaWVlRUxOM8EQMQBfQMxsbf39/FxQUxK7Zs2TJp0iRvb+/jx49HRUVdvXr19u3bPM4TMQBRQM9gbNzc3Nzd3RGzYvHixc7OzgcOHDh16lRsbGxWVhaP80QMQBTQM3QBYqOgoCDErJg6derKlSv9/PxCQkISEhKys7MrKiq4bRsxAFFAz2BsRo4cKTkiYlYMGjTI3d390KFDYWFhSUlJubm5PM4TMQBRQM/QBajnYoLimWee2b17d1BQ0Pnz51NSUgoKCmpra6kkiAGIAnqGLqCmpqaoqCgjIyMmJubMmTP+/v4+PZjDhw+fPXs2Pj4+KytLo9HwOE/EAEQBPUPXIAmieCg7Ozs5OTkqKkoMfaIHEx4eHhcXJ4OV/Pz88vJyHueJGIAooGfoGurq6srKygoLC69fv56SkhIbGxvTg0lMTLx69Wpubq4MWaqrq7kvDDEAUUDP0DU0NDSIh0pLS4uKinJycjIzM6/1YG7evCkjlZKSksrKSh5IghiAKKBn6DKamprEQzU1NVVVVZJGl/RspAREzFIaUiZc2UYMQBTQM3Qxzb9wr2ejLQeqBGKgEIgCegZolaioqLy8PMoBEANRQM8AJsSqVas2btxIOQBiIAroGcBUaGxsHDx4sIODA0UBiIEooGcAU+HYsWPqeV7JycmUBiAGooCeAUyCJUuWKD2vXbuW0gDEQBTQM0DXU1VVZWlpqfRsZ2dHgQBiIAroGaDr8fb21n1fRUREBGUCiIEooGeALsbJyUlXzx988AFlAoiBKKBngK6kqKhI72WXgwcP5vWOgBiIAnoG6Eq++eab+9/HHBgYSMkAYiAK6Bmgy5g8efL9enZxcaFkADEQBfQM0DVkZmb2ehCWlpZVVVWUDyAGooCeAbqAtWvX9mqFHTt2UD6AGIgCegboAsaMGdOanp2cnCgfQAxEAT0D0ESBWgdEAT0D0ESBWgfo2ZT1rC5mGlhYX1+/fv36sWPH9u3b19LS0tbWdsqUKXpb6nH/KnNz8+HDh69cubKyspLGQBMFoNYRBfT8qHr+7//+b5n+4YcfampqSktLDx8+PGfOHMMf11vV3NxcUFDw/vvvy+zixYtpDDRRAGodUUDPj6rnYcOGyfSdO3fa/vEHriopKZHZgQMH0hhoogDUOqKAnh9Vz4MGDZLpV1555dNPPw0KCtK7Ot12PWs0Gpm1sbGhMdBEAah1RAE9P6qeDx48+Nxzz2n/i9y3b99FixbdunVLd0sD/3v+6f9/cfvDDz+kMdBEAah1RAE9P6qehYaGhjNnzrz77rv9+/dXq5ydnduYPesyatSo6upqGgNNFIBaRxTQ80MwMzOT2DQ2NmqXyLQskeX3b9zU1LR69WpZa21t3UY9y0RdXV18fPyUKVNkdvv27TQGmigAtY4ooOeHMHLkSInN1atXtUvS09NVpvvA7e/cuaNeO9h2PSsKCwv79OkzevToe/fu0R5oogDUOqKAng2hXik4d+7cjIyM2tpa+evk5CRLZLnaYPLkyd99911KSoqsra6u9vDwkLUfffRRe/UsvPXWW7LE39+f9kATBaDWEQX0/BD27t07c+bMZ5991szMTP7KtCzRrp0/f/7f/d3fDRgwwMLCQtJfmf7zn//c0NCg62DDt4ZpCQwMlCXTpk2jPdBEAah1RAE9A9BEgVoHRAE9A00UgFpHFNAzAE0UqHVAFNAz0EQBqHVEAT0D0ESBWgdEAT0DTRSAWkcU0DMATRSodUAU0DMATRSodYCe0TPQRAGodUShR+t59uzZvQAehNSNDjdR6hVQ64jCk/KNyJ6BETQAtY4okD0D0ESBWgdEAT0DTRSAWkcU0DMATRSodUAU0DMAHSVQ64gCekbPQBMFoNYRBfQMQBMFah0QBfQMNFEAah1RQM+dGBvd8ERHRw8cOFCWfPXVV7ob6HH/KnNz8+HDh69cubKyslJ37Z/+9KfWDvfQPdNyaKJArQOigJ5/CgsLs7a2fuqpp3bv3t2avx/42ebm5oKCgvfff19mFy9erLu2d+/eFy5cMKDntgwagCYK1DogCj1Uz8HBwZYtBAUFtdGUeqtKSkpkVpJv3bXPPvvs+PHjGxoa0DNNFIBaRxTQc/v07OfnZ2FhISo9d+5c202pt0qj0cisjY2N7trt27fLX3d3d/RMEwWg1hEF9Nw+PT/11FPyV/eatt4Ghv9DrHtx+8MPP9RdK6tmzJhhZWWVlZX1E/97pokCUOuIAnpuu56//fZb+fvMM890IHvWZdSoUdXV1XofTE1N7dOnj5OTE9kzTRSAWkcU0HM79CwT33//fe/evSXNPXbsWLv0LBN1dXXx8fFTpkxRV7Pv/+D//u//yrSXlxd6pokCUOuIAnpuh56Fv/71r2JoCwuL/fv3t0vPisLCQsmSR48efe/ePb214m97e/vnnnsOPdNEAah1RAE9t0/Pgqenp1kLP/zwQwck+tZbb8kSf3//+9eeP39e3I+eaaIA1DqigJ7brWfB29tb3Sn25Zdf/tTOG7gCAwNlybRp0x649o9//GO7bg174CqgiQK1DohC99czAB0lUOuIAnoGoIkCUOuIAnoGoImCaWBnZ9erFRwdHSkfooCeoYcK2ICDH4ee23XHALcX9AQ++eST1sTg4eFB+RgHV1fX1qLwzTffoGcA9IyeexyXL19+oBXMzc01Gg3lQxTQM6Bn9Axdw/jx4+8Xg7OzMyVjTOzt7e+PwhtvvNFzSgA9Q+fbzt/ff9q0aZaWljY2NvPmzbtx44Z2g1OnTs2cObNfv35WVlYzZsyQWb3PGviJmlqo1v7444+jRo3q06fPhAkTgoODN2zYMGTIENmt7Dw1NVX3U/v371cf6du379ixY9euXVtfX2/4iMnJyb///e9tbW0tLCzGjRvn4+PTxm8H3QOpTveLwdvbm5IhCugZnmw9T5w48fLly5WVlevXr5fZWbNmad1sZmYmbrt582ZOTo5MyOz9hjacPatt5s+fX1JS4uvrq2YXLFhw584dZWL1i3Ytbm5uJ06cqK6urqio+Prrr2WDzz77zMARL126JEOHYcOGhYSE3L17Ny0tTe/t4K19O+g25OXl6VnB2tq6traWkjEm2dnZ90ehqqoKPQN0XM/R0dFqVtqSSlvVrKTLMnvhwgU1GxkZKbOS73ZAz+np6TJdU1OjO9vY2CjTklK3tge1wejRow0c8bXXXpMlgYGBD/12YmjdbwfdCamWumJYsmQJZUIU0DM88XrWXj1ubm7W9Z9kpTKtHf8qvcnCDuhZRKv7kYaGhgfu4fbt28uWLbOzszM3N9c2cknZDRyxX79+sqS0tLS93w66Ezt27NAVQ0hICGVifH744QfdKJw8eRI9AzySnltb0ol6bu0jerNz585VV7PV3Z51dXWGt9fquaysrL3fDroTUmEsLS1VfG1tbbXDQTByFLQD68GDB/e0KKBnMJ6e9S5uy4TexW31PpJO1HP//v11BwTh4eF6G9x/xDlz5siSoKAg9NzDmT9/voqvq6srpUEU0DN0Zz2rW8NE0jk5Obm5uTKhd2vYkCFDZOO0tLTO0rP6R/LmzZvv3r0bExPz0ksv6W1w/xGjo6MlbRoxYkRoaGhNTc3Vq1ffe+899NwD8ff3V/GNjY2lNLqKAwcOqChERUWhZ/QMj0vPP/3ywyqrFqZPn673z6Tdu3e/8MILbflhVRv1XFhY+M4779jY2PTt29fBwWHfvn16GzzwiElJSW+//fbzzz9vbm5+/w+r0HMPoba21traesyYMRQFUUDPAA9xP4UAxuSDDz7YsGED5dC1LFu27PPPP0fP6BnQM8D/R0hISGZmJuVAFNAzAHoGAEDPgJ4BANAzAHoGAEDPgJ4BANAzAHoGAEDPgJ4BANAzAHoGAOimera3t+8FbUPKqsurSFlZmZ2dHbHQ4uDgQMdBz9BdewaiYDo9cBfoWb7zz9A21Osc7t69W1dX19DQcO/ePeNXkYiICEdHR2KhCA8PnzJligSlpqZGgtLY2NglQemuV0eoYF3eMxAF0+mB0bOpV478/Pzbt29LCitVRPtWY2Pi4eGxYsUKYqH4+uuv33333YKCAo1GU15eLpLmVYP0DN2pZyAKptMDo2dTrxxpaWk3btwoLCyU+lFbW2v8TnPVqlXbtm0jFoqlS5e6ubllZGTk5OTcunWrsrKyS8ZM6Jme4TH1DETBdHpg9GzqlSMqKurKlStSP0QG1dXVxu80HR0dIyMjiYXilVde2bp1a1xcXHp6em5ubmlpaX19PWalZ+g2PQNRMJ0eGD2beuU4efKk1I/U1NS8vLyKigrjd5rW1tbl5eXEQmhqarK0tPTx8QkPD09ISMjKyrp9+zZ6pmfoTj0DUTCdHhg9m3rlOHjw4JkzZyRdu379uuRqRu4xs7Oz7ezsCIRClDxw4EAvL69jx45duHAhLS2tuLgYPdMzdKeegSiYTg+Mnk29chw4cODUqVOxsbGSqxlfz4GBgc7OzgRC4eHhMWHCBG9v7+DgYBlQZ2RkSPbMrWH0DN2pZyAKptMDo2cqhyHc3d3d3NwIhGL58uVz587dv3+/ROTSpUsSkTt37pjID6vUzzTRMz0DUUDPhL9H6NnFxcXX15dAKKZPny6GPnjwYEhISHx8fHZ2dnl5eXNzsykYFz3TMxAF9Ez4e5Cex48fn5KSQiAUQ4cOXbduXUBAQFhYWGJiYm5ublVVlYkkxOiZnoEooGfC31MqR21traWlZVNTE4EQpPDNzMx27twZGBh4/vz55OTkgoKCmpoaA7L88ccfR40a1adPnwkTJgQHB2/YsGHIkCH9+vWbOXNmamqqduMtW7bIxrJzW1tbyc4rKyu1e9Ci3ViO+/vf/162tLCwGDdunI+Pj+4R/f39p02bJlGzsbGZN2/ejRs30DM9A1FAz4S/u1UOOaiDgwNRUBw9etTOzm7v3r0y8dDbtpUs58+fX1JS4uvrq2YXLFhw586d/fv3y7RIVLuxZORiaxkMiftl1b/927+1lhBfunTJyspq2LBhISEhd+/elXNYvHix7sYTJ068fPmyCH79+vUyO2vWLPRMz0AU0DPh726Vw9PTc8mSJURBIcKbOnXqvn37Tpw4ER0dfe3aNY1G09pt20qW6enpMi0Ztu6sfKR3796SUt//qaamJtls+PDhren5tddekyWSvrd2RDkxNSuGltm+ffuiZ3oGooCeCX93qxyurq6bNm0iCgrJfRcuXCjhOH36tIRD/Qiytdu2lSy18laz2sd/6no3Ozv77bfftrW1NTMzU8tlojU99+vXT5Y8sBqojbXZfHNz8xP332h6BvRMD4yeqRxtwsnJSQ5NFBQTJkxYvXq1n59faGhoQkLCzZs3DTxCSE+NBmZ/85vfyPTWrVvVK3F0V7Wm57KysrbcGoae6RmIAnom/N2zcgwePLi4uJgoCJKMWltbb968+dChQ+Hh4UlJSXl5eQYewNt2PT/99NMyrW4xS0xM1F3Vu3dvPb/OmTNHlgQFBaFnegb0jJ5phD20cmg0GtEzIVBkZmaKnj09PY8cORIREZGamlpYWCj57qPr2dHRUab37dt3+/bt119/XXfVkCFD1AtztB+Mjo62tLQcMWKEZPBi9KtXr7733nvomZ4BPaNnwt+DKsfJkyednJwIgWLXrl1jx4718vIKDg6+ePFiRkbGrVu3DLxKsu16FvtOnz69b9++w4cP//7773VX7d69+4UXXtD7rCTub7/99vPPP29ubn7/D6vQMz0DUUDPhL+bV45Nmza5uroSAsWqVavmzJkjLpRRS0xMjCTTJSUlTU1NPwE9A3qmnNEzlcOYlWPZsmU7d+4kBAonJ6elS5eqd9fEx8ffuHHjsT7OEz0DekbP6LmnVI5PPvmktra27ds7ODjExcURAsXw4cPXrFkTEBBw9uzZxMTEnJycx/o4z26D1Lq2v9GLngE9o+furGf1/zbjhM0IB+rEyiG7EuNevny5LRtLl2ppaVlXV9dVxWK0OLaFu3fvWlhYbN++PTAw8Ny5c8nJyfn5+a09zhPur3VSYqYshk6vbEaovcbUc1c1at3tu6pDQM/o2Uh6FkS6GzdufOjG0p/a29t3YbGYlJ4lY7a1td2zZ8/Ro0cjIyPT0tKKiopae5wnPLDWffPNN+gZPaNnLm4/kU3aOHpWzJ49Oy8vz8DG/v7+Li4u6FmxZcuWSZMmeXt7Hz9+PCoq6urVq7dv3277NVv0rHBycjJc69Bz9764jZ7JnvUjGhAQoPsOn+zsbN21e/fuHTduXJ8+fV588UXpfw3UpPv3rOWJ07MwYMAA2XNrG7u5ubm7uz96Czx9+vTMmTP79etnZWU1Y8YMmdXd2MBavf2kpKQMHTr0qaee2rp1axuj01pkO8DixYudnZ31AtHa4zzBcK2Tkd/j6BnaXpfa0pZNv3PoquzZcKdaUFDw3nvv2dnZSaG98MILf/jDHyIiIgwXi3wLtaRv375jx45du3ZtQ0MDeu4pep44cWJiYmJVVdWGDRvUO3x010oly8nJkUG9NGmZDQsL067t3bu3AfE80dmzlkWLFj3wCZFio6CgoEcsf+kizczMVAnn5ubKhMxq+03Da3X3Iy1cuvX+/ftL8tqW6BiObAf49a9/vXLlSj8/v5CQkISEBOmMKioquG27w7VuyZIlrT2XtMNuNlyX2tuWTb9z6Fo9t9apyoR6ZUt9fX1RUZGPj89vfvMbw8UimcDJkyfv3r1bWVm5ceNG2eCzzz5Dzz1FzzExMWq2urpajdF01168eFHNyoTMvvrqq9q1kqt1ez0LMtSVfkdv45EjR8rhHrH8VaemLeELFy7IrKQ4bVmr3Y+MEmSQPmzYsCtXrugexUB0DEe2AwwaNOiLL744dOiQFFRSUpIIwMDjPKEttU4q2P21rsMN6qF1qb1t2fQ7h67Vc2udqnpCrYynddXS9mJRb2wbPXo0eu4petZeKtF2FrprpXqpWRkJyqx0xKam58eNJKaenp66AZLMxtra+tHL38rK6v4SloVtWav2s2PHDonC5MmTZSSud5SH6rm1yLYXkbH2XVLQWagnpHZWz/DQutQxPZty59C1em6tU5UhkZrt16+fg4PDRx99VFhYaKBYNBrNsmXLJEMwNzfX1g1pbui5p+i5XZ24jY2Ndq22lgjaVwl1s+x59uzZ2dnZelvK4NfR0dEU9PzMM8+oW4rKy8v1jmIgOoYj2178/PxGjBjh5eV17NgxyaLS09MNP84THlrrpBO/v9Y9Vj23ty2bfufQtXpubW1eXt6//Mu/DBs2TDfWBopl7ty56mp2SUmJzNbX17d2LPTcE/Xc2vWrPn36yGxtba2avXTpkt7e1NuEnlw9y3B148aND7z92MPDY8WKFY9e/nqXHFUJt3ZxW2+t2k9cXJykLDLx8ssvZ2Zmao9iODqde3H7008//e1vf+vj43PixImYmJhr167xOM9HqXVffvllaze9d9bFbb261IG2bPqdg2nqWUtlZaW65+vpp582UCz9+/fXHQadO3cOPaPnv01Lw87NzdXe/REaGqrWSo8ss1999ZVUnStXrkyaNElvb+ptQpJLPYl6Hj9+vIHnk6xatWrbtm2PXv7qhh3dEr7/1rDW1mr3k5qa+qtf/UqmBw4c2MboGI5se3nzzTcXLVrk6+sr5ybDhevXr5eVlXFfWAdqnb29veGn4jzirWGt1aUOtGXT7xxMU8+vvfZaYGCgRqOREZgMZ9WlLwPFItvLki1bttTU1Mgo56WXXkLP6Plv03v27Jk4caKVldWoUaP27t2r3TI7O3vevHk2NjbPPvvs9OnT/f399fbm6empfZvQk6VnV1dXw0/3dHR0jIyMfPTy//mXn7tYtSDFKF9Er1dtba3ufsSII0aMULnX999//9DoGI5sexkzZszHH38shzh79qzYJScnRzIDvNveWidjvoc+U/bRf1j1wLrUgbZs+p2Daeo5PDzcxcXlueee69Onz7Bhw95///1bt24ZKJaioqJ33nlHSrJv374ODg4+Pj7ouTvrucMiMU06V892dnYhISEP3dLa2lrvf71PFp0YWUkCpHf28PA4fPjwuXPnJFXKz8+/e/cu3m1XrTt58uQT1DM8EZ0Dz9xGz+i5+1QOGdU+8MemekhmIP3pk96iOiuy8fHxAwYMkCzqyJEjkZGRqampMt6vq6vDu22vdRqN5okTA3oG9EwLNLnKERgY6OzsjJ4VkjdPmDDB29s7ODg4KioqIyODx3l2+54BPWNl9AymWDnc3d3d3NweX19m5I6vjTeatsaKFStef/31/fv3SwguXbokIbhz5w6P86Rn6OF67sZNHj3TCE23cri4uPj6+qJnxfTp05cvX37w4MGQkJD4+Pjs7Ozy8nJu26ZnQM/oGT3TCI1dOcaPH5+SkoKeFUOHDl23bl1AQEBYWFhiYmJubm5VVRUepWdAz+gZPdMIjVo5amtrLS0tm5qaDJ+Vl5fXiy++aGFhMW7cuL1797b3FTQdeGuNgddPtfdwhl+5o4uUtpmZ2c6dOwMDA8+fP5+cnFxQUFBTU4NH6Rl6mp57SJNHzzRC09WzHMXBwcHwKYWEhGif2CCoJzboxtTAK2h+7uhbawy8fqq9hzP8yh1djh8/bmdnJ93E0aNHL1y4kJaWVlxcXF9fj0fpGXqUnntOk0fPNELT1bOnp+eSJUsMn9Ls2bPlrKKiotSset5hazHVewXNzx19a00bn9DZlsPpvXJHPU5Z+8odXdavXz916tR9+/adOHEiOjr62rVr6nFIeJSeoUfpuec0efRMIzRdPbu6um7atMnwKdnY2Nz/tgBtTA2/gubnjr61prV3B3XgcIZfuaPLggULFi5cKOV/+vRpKf/r169L+XPbNj1DT9Nzz2ny6JlGaLp6dnJy0nvuZnv1bPgVND939K01rb07qAOHa/udIw4ODqtXr/bz8wsNDU1ISLh582ZFRQUSpWdAz921yaNnGqHp6nnw4MHFxcWGT2nWrFkGrnQZfgXNzx19a01rV7o6cLg2ttXm5mZra+vNmzcfOnQoPDw8KSkpLy9PDoRE6Rl6mp57SJNHzzRC09WzRqMRPT/0lE6fPm3gPhHDr6D5uaNvrWnt3UEdOFwb22pmZqbo2dPT88iRIxEREampqYWFhTzOk56hB+q5hzR59EwjNF09nzx5UvftbwYQaY0ePdrKymrixIl79uxp+ytofu7oW2tae3dQBw7Xxra6a9eusWPHenl5BQcHy/g9IyPj1q1bDQ0NSJSeoafpuYc0efRMIzRdPW/atMnV1dUES6BLKowUxZw5c6Txy6glJiZGkumSkpKmpiYkSs/QA/XcE5o8eqYRmm7lWLZs2c6dO9GzwsnJaenSpb6+vmfOnImLi7tx40ZZWRmP86RnQM/oGT2DsSuHg4ODeAg9K4YPH75mzZqAgICzZ88mJibm5OTwOE96BvSMntEzGLtyNDY2Wlpa1tXVUeY/t/xaw8LCYvv27YGBgefOnUtOTs7Pz+dxnvQM6JlyRs9g7MohBrK3t6fAFWFhYba2tnv27Dl69GhkZGRaWlpRURGP86RnQM+UM3oGY1cOf39/FxcXClyxZcuWSZMmeXt7Hz9+PCoq6urVq7dv3+ZxnvQM6JlyRs9g7Mrh5ubm7u5OgSsWL17s7OysV/I8zpOeAT1TzugZjF05xEZBQUEUuGLq1KkrV6708/MLCQlJSEjIzs6uqKjgtm16BvRMOaNnMHblGDlypOyfAlcMGjTI3d390KFDYWFhSUlJubm5PM4TPaNnyrn769nW1rYXtI1nnnnGOJVD9/UvIMW+e/fuoKCg8+fPp6SkFBQU1NbWok96hp7QMxCFLumBTUXPQkVFhWQkycnJkZGRwcHBPtA6Uj5SSlJWUmKP9Y1JNTU1RUVFGRkZMTExZ86c8ff378nFfvjw4bNnz8bHx0ub1Gg0PM7TONAzmELPYIJREFN2+x7YVPRcVVUlJsjMzLx8+XJERMQJaB0pHyklKSspscf6ZAxJEMVD2dnZUhGjoqLE0D252MPDw+Pi4mSwkp+fX15ezuM8jQM9gyn0DCYYBdFzt++BTUXPkqjduXNHOj75zleuXImB1pHykVKSspISe6xPxqirqysrKyssLLx+/XpKSkpsbGxPLvbExMSrV6/KeFmGLNXV1dwXZhzoGUyhZzDBKIieu30PbCp6rq+vl2GIfFsZj+Tk5FyD1pHykVKSspISe6xPxmhoaBAPlZaWqqBIjezJxX7z5k0ZqZSUlFRWVvJAEqNBz2AKPYMJRkH03O17YFPRc1NTk3xPGYlI3ycZWwm0jpSPlJKUlZTYY73Eqg2K1MKuCsp//dd/9bRiB3oGU6uiJhiFLuwZurAr6Bo9K5p/4R60jraUekJQZIzcM4sd6BlMrYoShS7vCrpSzwB6iJ4pBAAA9AzoGQAAPQOgZwAA9AxPFp9//jmFAAD0DOgZAABMnZ55XQ09AwAAekbPAAAA6Bk9AwAAekbPAB2HW8MAgJ4BPQNjZAAA9AyAngEA0DOgZwAA9AyAngEA0DN0O7g1DADoGdAzAAA8AfDDKvQMAADoGT0DAACgZ/QMAADoGT0DtA9uDQMAegb0DIyRAQDQMwB6BgBAz4CeAQDQMwB6BgBAz9Dt4NYwAKBnQM8AAPAEwA+r0DMAAKBn9AwAAICe0TMAAKBn9AzQPrg1DADoGdAzMEYGAEDPAOgZAAA9A3oGAEDPAOgZAAA9Q7eDW8MAgJ4BPQMAwBMAP6xCz2BCg+VeOuiNnVlrCmtNCnt7eyLSjdfa2tqiZ/QMAGRXAOgZAAA9A6BnAHgUTPMSNzcVAnoGAPJUAEDPAICeAdAzegYA9AyAngEAPQMAegaAR4BbwwDQMwAAOT2gZ/QMAOgZAD0DAKBnAPQMAOgZAD0DQLeDW8MA0DMAkKcCoGf0DADoGQA9AwB6BgD0DADoGQA9A0C3g1vDANAzAAA5PaBn9AwA6BkAPQOA6WNnZ9erFRwdHTkrAPQMAF3AJ5980poIPTw8OCsA9AwAXcDly5cfaEFzc3ONRsNZAaBnAOgaxo8ff78InZ2dOSsA9AwAXcaGDRvuF6G3tzdnBYCeAaDLyMvL07OgtbV1bW0tZwWAngGgK5k5c6auCJcsWcJZAaBnAOhiduzYoSvCkJAQzgoAPQNAF6PRaCwtLZUFbW1tGxsbOSsA9AwAXc/8+fOVCF1dXTkrAPQMACaBv7+/EmFsbCxnBYCeAcAkqK2ttba2HjNmDGcFgJ4BwIT44IMPNmzYwFkBoGcAMCFCQkIyMzM5KwD0DAAAgJ7RMwB0BmVlZdmdQVVVFYUJ6Bk9A/R0RIcixeTk5LCwsMDAQE9Pz2+++ebzzz9ft27dqlWrlrXwxhtvzG5hzJgxI39hwIABuk8IkdmRnYG1tbXubgcPHqxdZW9vr07D2dlZnZirq+vnLXh4eMiZHzt2TL5Fenq6fCMe9gnoGQBMlMbGRhGVGMvf3/+HH34Q437wwQcuLi5iOLGdmE89tlqmHRwcZOH8+fOV89a18H//9397Wjh16lR4C1lZWTd/obq6+ufHT3l5ufaIGRkZ6jSCg4PViW3btk2dqhpJiLblW4wfP16+kXp6ia2trQwpZOGiRYtWrFghIt+xY4eMQiIiIqRkqCGAngHg8SKyCQkJEfesXbt2yZIlM2fOtLOzMzc3F1GJnETJIifR2M6dOwMCAsRwYruSkpKfuzvFxcUypJDv6+vrK6MNNUCRUYiUj5SM+FuVj6hdzC35twxlioqKqE6AngGgI1RVVUn+5+HhIVmjo6PjgAEDJE10cnIS97i7u+/bty8yMjI/P/9neBgyTBF5SyIu5hZJi7YHtzBr1qyPPvrohx9+iI2N5To5oGcAaJXGxkZRslhEsj1ra2uxsiTE27ZtE7uUl5cj2k6kpKTk1KlT3377rQh78uTJUtpz58794osvLl261NzcTFUE9AwAf0Py4169etnZ2Yk26urqkKjRqK6ullGRuhVu7Nixkkw3NDTcu3cPVQN6BoCfxA379u2TfE7dxrxo0aK//OUvwcHBN2/exKCdTkZGRlBQkFjZxcVFBkb29vYrVqwICAiQKBQXF5eVlYmz6+vrm5qaqJmAngF6up515SGq/uSTT5ydnUUektg5Ojryj+dH//fzkiVL1NVsGQDNnz/fzc1NlKw7AJIoXLt2LS8vT6PRVFVVSRpNzQT0DICeW/31kQhm586derdtq98UScItIpdUWwwUGhoaFxfXoxJuSXDl+0ZHR586dUpKQEYwrq6uUkrq12W6N2+LnmUD2dLAb8bUm7LS09Nzc3Pv3LnDXWOAngHQc6/2akn9pkiUs2nTJkkExUBOTk6SHSotqRxx/Pjxer94/vbbb/V+7izJuvrlseyzC0VbV1enTiMlJUXvB9DyBfV+/Wxvb69+/ax+Xebo6PjGG2/IWhnByBfct2+f+nVZe89Byk0NcSSHLioqEpFTMwE9A6DnTr7jSas65TnxlkhOJK2eyaU8p1WdIKp74PO8tA82eXTUQ0Ue+Gwyca1aqIYU2lGFujwgZ75t2zbtqEINKTr9Hjo5jUOHDsn+k5KScnJyKioqqJmAngHQswmh+zwvITExMbwzkOGC7m6N82yydun5wIEDp0+fjo2NvX79emlpKTUT0DMAegaT0LMk6KLnrKws9AzoGQA9o2f0DOgZANAzoGdAzwCAntEzoGf0DICeAT0DegYA9IyeAdAzAHoG9AzoGQDQM3oGQM8A6BnQM6BnAEDPgJ4BPQMAekbPgJ4BAD0Degb0DADoGT0DoGcA9AzoGdAzAKBn9AyAngHQc2cZqO3HatfGj+PcjH8C6BnQMwCgZ/QM6BkA0DN6Rs+AngHAFPTs5eX14osvWlhYjBs3bu/evXrCExupJX379h07duzatWsbGhp01ail7R+Ro8ix+vTpI8f19vbWPZn2Hk5NBwQETJs2zdLS0sbGZt68ednZ2egZ0DMAPMF6DgkJkT3PmDEjtwWZ0HOtm5vbyZMn7969W1lZuXHjRln12WefGU5eDXxEbS8qzcnJycvLU4cLCwvr8OHUkokTJyYmJlZVVW3YsEFmZ82ahZ4BPQPAE6zn2bNny56joqLU7MWLFw1cLm5qapJVo0ePbvu1Zb2PqO3lKLqHe/XVVzt8OLUkJiZGzYqhVeaNngE9A8ATrGcbGxvZc3V1ta7etMfSaDTLli2zs7MzNzfXXlU2MzMz4EvDH1GzeocbNGhQhw+nlmgvgKuCenz/CEDPgJ4BoOv1PHfuXHV5uaSkRGbr6+v15He/Cw1/5IF6lnPo8OGMfLMYegb0DADG0POsWbMMXNzu37+/rk3PnTunJ7/evXvrnZjhjxi+uN2Bw6FnQM8A0A31fPr0aQO3hr322msyvWXLlpqamkuXLr300kt68hsyZIjMpqena5cY/oiaVofT3hoWGhra4cOhZ0DPANAN9Sx4enqOHj3ayspq4sSJe/bs0dVbUVHRO++8Y2Nj07dvXwcHBx8fHz35yWdfeOGFtn9ETctR5FhyxFGjRu3du1e7tw4cDj0DegaA7qlnIz+z+on+IugZ0DMAoGf0DOgZANAzekbPgJ4BoAfquRsML9AzoGcAQM/oGdAzAKBnQM+AngEAPaNnAPQMgJ4BPQN6BgD0jJ4B0DMAegb0DOgZANAzegZAzwDoGdAzoGcAQM+AngE9AwB6Rs+AntEzAHoG9AzoGQDQM3oGQM8A6BnQM6BnAEDP6BkAPQOgZ0DPgJ4BAD2jZ/QM6BkA0DN6BvQMAOgZ0DOgZwBAz+gZAD0DPLFYWlp++OGHYgUcaXzq6+s9PT3nzJljbW2NngE9A8DfyM7OdnNzs7Oze/nllzds2JCXl4c1Hzf37t07f/78P//zPw8aNGjIkCELFy7cuHGjn59faGhoQkLCzZs3y8vLqZmAngF6OlVVVYWFhXv27Pnd734nadzw4cPfeeedv/71r7IQlXaikqOjoz///HPJlcXKzzzzzOzZsz/77LMdO3ZIAr1v374TJ07IBunp6VLsEhGqJaBngJ5OTU2NRqORpC05OfnChQseHh7/+q//OmXKlKeffnrYsGHz58//85//fPToUUnpsGzbaW5uvnbt2q5duz766KNZs2YpJU+ePPndd99dv369LN+7d6+Pj4+/v39QUJC4WUpeyl+iUFJSIhGhWgJ6Bujp1NfXV1RUFBcX37hxIyUlRXK48+fPh4SEiDO+/fbbP/3pT2+88cbLL7/cr1+/gQMHTps2bdmyZZs3bz5+/HhBQQEaVjQ2Nl65cmX//v1r1qx56623JkyYYN2Cvb29pMtSYhs2bNi9e7dS8sGDBw8fPiwjnpMnT4aGhkZEREiZS8lnZ2ffunVLYiERoVoCegbo6TQ1NdXW1ooVbt++nZube/XqVUnjEhISYmJiIiMjw8PDz5w5I6oWnezcufOzzz5bvHjxzJkzx44d++yzz1pYWNjZ2UmqvWDBgv/8z//88ccfJRdMS0urrq7ulhrOz8+XYhG/btq06Y9//KMMXP7+7//++eefNzMzGzBggJTJjBkzFi5cKBnzd9995+np6eXlpXwcEBAQGBh47NgxUbIMfaRUJV2WXV2+fFnELHl2Xl6eRqORKEgsJCJUS0DPAPDTvXv3GhoaampqRA8iCUmLJZMTZ6SmpiYlJcXHx4tIRCfnzp07e/as2FocExwcfOTIERGPZNj/8z//88EHH/zud78TT0u+OHjw4L59+4q5n3vuuXHjxomx5s2bt3z5clH7l19+KQr39/cXP8nOTST/ltw3IyNDvqkMQeQbbdmy5YsvvhDFvv/++//wD/8wefLkMWPGyJcSB1tZWcmXEg3LQnHz0qVLP/7447/85S+7du1SJj5w4ICSseTHUj5SSlJWUmJSbufPn1dKlvKUVFsGMZmZmTdv3iwsLFRilvKXKEgsqJCAngHgbzQ3N0veVl9ff/fuXbFFSUlJUVGRZHU3btwQVYtOJKuWbC8uLk4cc/HixYiICLGsEvapU6ckw1bOljTx0KFD+/fv//7779etWycCEzdLev1P//RPknaL2F5++eWRI0eqf8f26tVLiVz8Z2trO/4XROpzW/jHf/zH5Y+AGFTtR4lW7VwGDYN/QaQr5yC5r5zPqFGjlHqnT58u9n3zzTfF0K6urmvXrpV0WbJhb29v5WBfX18/Pz+l4aCgIPG6fHcpASkHSY6lTGQoI+UjpaR8nJiYKKWXnp4uSpahj5RqcXGxlLCyspS5lLyUP5UQ0DMAPCSflpyyrq6uurq6vLxcRCI6yc/Pz8nJEVuLYyTdlPRXskARtugnNjY2OjpabBQZGSlpotK2iOr06dPK3MePHz927JhoTGQm/haricIljRbJ7du3z8PDY+vWrd99993aFtasWfMf//Eff/yFt956a74O/097kGHBB78g+3Rzc5MkXg4hKfI3Laj/B8tg4kAL4l1Jf+XERL1yhnKecrZKwHL+8i2Ug2VEojQs31S+r3xrZWIpByVjKRkpHyklKSspMSm3goICpWQpTylVKVspYXJlQM8A8EiqlgxP8rzKysqysjJxzK1btwoLCyULVMLOysqSDFs5W9LEpKQk0XZCQoKk2pcuXRJvRUVFKXlLTimZpVgtLCxM9BYaGiqeE9spkZ88eVK5XAhu4VgLYscjLQR1FPVxZVlB7VzpVpDjytHlHJR35azk3OQMlX3lnJWA5VsoB8v3km+nNJySkpKWlibfXUpAykGSYykTGcpI+UgpKR9XVVWpLBklA3oGgMeCugbe0NAg+d/du3dF2KKf0tJSjUYjNioqKpI0UWlbRHX9+nVl7qtXr6anp4vGRGbib7GaVuGSbortxHlK5EJ0C8rowoULFyJbiGjhfDuJ+AW1E9mb2q3sXx1IjiiHjm1BzkTOR05M1CtnKOcpZ6sELOcv30I5WEYkSsPyTeX7yrdWJpZyUDKWkpHykVLiqjWgZwAwCWdLmlhdXS3arqiokFT7zp074q3bt28reUtOKZmlWC03N1f0dvPmTfGc2E6JPDMzU7lcyGghvQWxY2oLKR1FfVxZVlA7V7oV5LhydDkH5V05Kzk3OUNlXzlnJWD5FsrB8r3k2ykN19bWqrQYEwN6BoAnydz37t1T8haNiczE32I1rcIl3RTbifOUyAVNC8roQnFxcVELhS0UtJPCX1A7kb2p3cr+1YHkiHLo0hbkTOR85MREvXKGcp5ytkrAKhWW74KDAT0DQM8SudblQmMLDS2IHetaqO0o6uPKsoLaudItxgX0DAAAAOgZAAAAPaNnAAAA9AwAAADoGQAAAD0DAAAAegYAAEDPAAAAgJ4BAADQMwAAAKBnAAAAQM8AAADoGQAAANAzAAAAegYAAAD0DAAAgJ4BAAAAPQMAAKDnv+kZAAAATAT0DAAAgJ4BAADgYfy/ccP1BMzv/Q4AAAAASUVORK5CYII=" alt="2014-11-19-openvswitch-internal__1.png" />

收到数据包后,会交给datapath内核模块处理,当匹配到对应的datapath会直接输出,如果没有匹配到,会交给用户态的ovs-vswitchd查询flow,用户态处理后,会把处理完的数据包输出到正确的端口,并且设置新的datapath规则,后续数据包可以通过新的datapath规则实现快速转发。

结论

抛开流的管理,Open vSwitch的工作原理非常简单,下次会介绍使用Open vSwitch提供的管理工具,搭建一个网络,并且调试其中的流与datapath。

Open vSwitch 工作原理的更多相关文章

  1. VMware vSphere中的HA工作原理介绍

    http://blog.51cto.com/linkinsds/416738 HA全称High Availability.它是VMware的企业应用环境中用来保障企业级应用的不间断运行需求所产生的一个 ...

  2. K8s的工作原理

    title: Kubernetes之初探 subtitle: K8s的工作原理 date: 2018-09-18 18:26:37 --- K8s概述 我清晰地记得曾经读到过的一篇博文,上面是这样写的 ...

  3. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  4. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  5. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  6. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  7. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  8. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  9. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

随机推荐

  1. 设计模式-观察者模式(上)<转>

    本文参考Head First设计模式一书,感觉书中的例子实在很好,很贴切.对模式的知识点进行总结,并对书的源码做了一定注释.   观察者模式要点有二:主题和观察者. 最贴切的案例是:杂志订阅,杂志是主 ...

  2. JVM Client Server启动设置

    看看你下面的这两个文件,是不是尺寸差别很大?%JAVA_HOME%/jre/bin/client/jvm.dll%JAVA_HOME%/jre/bin/server/jvm.dll   Jvm动态库有 ...

  3. Android——ImageView的scaleType属性与adjustViewBounds属性 (转)一

    ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...

  4. iOS边练边学--UITabBarController的简单使用

    一.UITabBarController的使用步骤 初始化UITabBarController 设置UIWindow的rootViewController为UITabBarController 根据具 ...

  5. 关于Cocos2d-x中精灵节点的透明度的设置

    1.当我们需要某个精灵作为一个大一点的容器来存放其他的小精灵的时候,我们先设置这个精灵的大小 setTextureRect(Rect(0, 0, babySize.width, babySize.he ...

  6. python with妙用

    class aa(): def bb(self): print("hhhh") return "hello world" def __enter__(self) ...

  7. imx6dl uboot 移植

    新版的BSP引进的设备树的机制,在uboot中还添加了menuconfig的配置菜单. 参考官网的文档进行uboot移植,本文使用的cpu是imx6dl,uboot版本2015.04. 我要添加一个名 ...

  8. matlab中常用见的小知识点

    矩阵相关: 在matlab中,矩阵或向量是 column-major 表示形式.用 [] 来构建向量或矩阵, 用()来引用向量或矩阵中的元素:用:表示矩阵中的该index下的所以元素: matlab中 ...

  9. Wellner 自适应阈值二值化算法

    参考文档: Adaptive Thresholding for the DigitalDesk.pdf       Adaptive Thresholding Using the Integral I ...

  10. PHPOffice下PHPWord生成Word2007(docx)使用方法

    要正常使用,下载依赖包: PhpOffice/Common:https://github.com/PHPOffice/Common Zend/Escaper:https://github.com/ze ...