《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——1.概述

简介: 《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——1.概述

网络通信的本质是电磁波高低电位变化在物理介质上的传输,高低变化的电位形成二进制的数据传递给网络硬件设备,硬件网络设备则会根据特定的编码方式讲二进制的数据变成以太网报文,此时,物理网络的信息就被解调制成为了数据帧,在OSI七层网络协议的定义中,二进制的数据处于物理层,而以太网数据帧则处于数据链路层,对于Linux内核来说,物理层和数据链路层之间的转换通常是由硬件设备的驱动完成,Linux内核定义了与硬件设备驱动通信标准,在完成数据链路层收包后,硬件网络设备会将数据帧传递给操作系统Linux内核进行处理,所以Linux网络协议栈源头是数据链路层数据帧报文

 

Linux内核在处理数据帧报文按照数据帧的分片,TSO等特性,将数据帧转化为可见的网络层报文,从而进行下一步的操作,内核在处理网络报文的时候,采用一种非常高效的方式:

 

内核通过一个sk_buff结构体,保存所有报文数据

在网络层处理后传递给传输层操作中,内核并不会为每一层进行复制,而是通过指针偏移方式处理同一个sk_buff结构体


 

下图是对Linux网络子系统的一个简单示意图:

 image.png


根据网络报文的流向,我们按照两个不同的方向对报文处理的流程进行概述。

 

1) 收包方向的报文处理

从上图中可以发现,当内核从网络驱动设备中获取到报文后:

 

首先进行TC子系统操作,在收包方向,不会有特别复杂操作

完成了网络层报文重组后,报文进入了网络层,在网络层处理中,比较重要是netfilter框架和路由查找,这里实现了大量功能,在云原生场景中,netfilter和路由子系统有着至关重要作用

网络层完成处理后,会交由传输层进行处理,传输层协议最常见是tcp和udp,其中tcp协议在传输层通过重传和序号校验等机制保证了连接可靠性

传输层完成处理后,内核会将真正报文数据提取出来并交给socket子系统,socket子系统抽象了网络所有操作,屏蔽了网络报文细节,让用户程序可以按照文件io方式读写网络数据

socket子系统数据最终会被用户程序读取,此时,一些编程语言底层依赖库会进行一些封装,提供应用层协议支持,如http,mqtt等,提供用户友好操作体验

 

2) 发包方向的报文处理

发包方向的处理,相比收包方向来说,一个重要的区别是,收包方向的操作是内核的软中断处理线程进行收包操作,而发包方向的操作则是由进程上下文进入内核态进行,因此,发包方向出现由于调度问题产生的偶发延迟抖动的概率比收包方向要小。

 

应用程序通常都是调用编程语言或者第三方的类库提供的方法进行发包动作,而这些发包动作最终都会调用socket子系统的写入调用来实现发送数据:

 

应用程序写入socket后,在达到一定条件,如内存充裕,tcp发送窗口足够等情况下,内核会给当前需要发送数据申请一个sk_buff结构体内存,并将需要发送数据填充到sk_buff数据中

sk_buff数据报文首先会经过传输层处理,根据当前系统状态,内核会给报文sk_bufftcp报头进行填充,然后调用网络层提供方法进行发送

网络层和收包方向类似,也会经历过netfilter框架选取路由动作,在这里实现了大量与网络抽象相关逻辑在网络层完成处理后,按照OSI七层网络定义,会进入数据链路层,实际上在Linux中,邻居子系统信息填充,也会在路由子系统完成路由选取后一并填入到报文报头中,随后报文会进入发送方向TC子系统

TC子系统是实现网络流量整形关键,和收包方向不同是,发包方向TC子系统会进行复杂排序工作,通过数据包类型与配置规则进行匹配,实现网络流控功能TC子系统会将优先级最高报文传递给网络设备驱动

网络设备驱动发送方法实现逻辑细节已经不再属于Linux内核范畴,通常在进入网络设备后,我们就可以认为数据包已经完成了发送

相关文章
|
16天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
5天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
45 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1天前
|
容灾 网络协议 数据库
云卓越架构:云上网络稳定性建设和应用稳定性治理最佳实践
本文介绍了云上网络稳定性体系建设的关键内容,包括面向失败的架构设计、可观测性与应急恢复、客户案例及阿里巴巴的核心电商架构演进。首先强调了网络稳定性的挑战及其应对策略,如责任共担模型和冗余设计。接着详细探讨了多可用区部署、弹性架构规划及跨地域容灾设计的最佳实践,特别是阿里云的产品和技术如何助力实现高可用性和快速故障恢复。最后通过具体案例展示了秒级故障转移的效果,以及同城多活架构下的实际应用。这些措施共同确保了业务在面对网络故障时的持续稳定运行。
|
1天前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
17天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
17天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
1月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
29天前
|
Kubernetes Cloud Native 开发者
云原生入门:从容器到微服务
本文将带你走进云原生的世界,从容器技术开始,逐步深入到微服务架构。我们将通过实际代码示例,展示如何利用云原生技术构建和部署应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。
|
1月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
1月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
44 5