2018-03-30
分层模型及实现方式
- 第五层(或者OSI第七层)- 应用层 Http/SSH/TCP:软件实现
- 第四层 - 传输层TCP/UDP:软件实现。
- “端口”这个概念也在这一层被实现,网络层只负责主机->主机的数据传递,传输层则通过一个虚拟的“端口”实现程序->程序的数据传递。
- 第三层 - 网络层:软件与硬件混合实现,算是五层协议里最复杂的一部分。
- data plane: forwarding 转发,由硬件实现。
- 功能:在单个路由器中,将 packet 从输入端口转发到合适的输出端口。(这里的端口,指的是路由器的物理端口,和 tcp/udp 的端口不是一个概念)
- 数据平面需要非常快的工作效率,尤其是在高速线路上,工作在 ns 尺度上,因此需要用硬件实现来保证正常工作。
- control plane: routing 路径选择,由软件实现。
- 涉及算法,通常由软件实现。计算合适的路由路径,并据此完成对路由器 forwarding table 的更新。(还有部分网络管理功能)
- 控制平面的路径选择算法、网络管理功能,相对数据平面而言对时间的要求不是那么高。工作在ms/s尺度上,更适合用软件实现。(由于其计算量大,而且路由器分布式布置,该算法通常实现为分布式)
- data plane: forwarding 转发,由硬件实现。
- 第二层 - 数据链路层:负责特定链路的通信,常实现在硬件内。
- 交换机通过 MAC 地址在链路层进行数据转发。(ARP 协议)
- 第一层 - 物理层:负责处理物理信号和第二层数据包之间的转换(调制解调器,猫),硬件实现。
OSI七层模型,在应用层与运输层之间,多了一个表示层和会话层,而在因特网中这两层不一定需要,若有需要也通常由软件自身实现。
P.S. 软件实现的好处是成本低,也容易更改。 而硬件实现的好处是效率高,响应快,但是更改难,成本也高。
VLAN(虚拟局域网)
随着互联网的不断发展,“套娃”技术也被 应用地越发深入。尤其是 云计算/微服务/Kubernetes 火了之后,单纯的虚拟机层面的网络已经满足不了大家的需求了。
最浅显的例子是云计算,云平台上的每个企业,都希望自己能有一套自己的私有网络,增强自己微服务体系的安全性,这显然只能通过虚拟网络的方式实现。
另外就是 Kubernetes 容器管理平台,一台主机上可能运行着上百个 Pod(容器组),K8s 需要为每个 Pod 分配一个在整个集群中都可用的 IP,某些情况下还希望能够隔离各个命名空间的网络。这显然也需要在已有的节点间网络上再虚拟出一个 Kubernetes 自己的网络,并且由 kubernetes 自己完全地控制这个网络。
网络虚拟化技术有多种方式,k8s 的 flannel 插件使用的是 vxlan 技术,这种技术将虚拟网络的数据封装成 udp 包在主机网络上传送。
通过 vxlan 类似的技术实现的网络,被称为 overlay 网络,即在现有的物理网络之上构建一个虚拟网络,上层应用只与该虚拟网络相关。前述的五层网络模型中,overlay 网络可以虚拟化第一层(物理层)之上的所有网络层。
overlay 网络非常灵活,唯一的缺点就是性能——它在第四层进行封装。
k8s 主流的网络插件中,还有一个 calico,它使用 iptables 在第三层实现了一套虚拟网络,好处是性能比 overlay 网络更好。
SDN(软件定义网络)
待续