《云原生网络数据面可观测性最佳实践》—— 一、容器网络内核原理——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内核范畴,通常在进入网络设备后,我们就可以认为数据包已经完成了发送

相关文章
|
5天前
|
存储 Kubernetes Cloud Native
【阿里云云原生专栏】云原生容器存储:阿里云CSI与EBS的高效配合策略
【5月更文挑战第29天】阿里云提供云原生容器存储接口(CSI)和弹性块存储(EBS)解决方案,以应对云原生环境中的数据存储挑战。CSI作为Kubernetes的标准接口简化存储管理,而EBS则提供高性能、高可靠性的块存储服务。二者协同实现动态供应、弹性伸缩及数据备份恢复。示例代码展示了在Kubernetes中使用CSI和EBS创建存储卷的过程。
35 3
|
2天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构之容器技术
容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。
19 9
|
3天前
|
监控 安全 网络安全
使用 Fortinet 安全 SD-WAN 解决方案进行全球跨国公司网络设计的最佳实践
使用 Fortinet 安全 SD-WAN 解决方案进行全球跨国公司网络设计的最佳实践
30 2
|
3天前
|
存储 人工智能 物联网
探索操作系统的心脏:内核的奥秘云计算与网络安全:技术融合与挑战
【5月更文挑战第31天】本文将深入探讨操作系统的核心—内核,揭示其运作原理与对计算机性能的影响。从内核的定义和功能出发,我们将逐步剖析其结构组成,包括进程管理、内存管理、文件系统和设备驱动等关键模块。文章旨在为读者提供一扇观察操作系统内部工作机制的窗口,帮助理解现代计算环境中,为何一个高效、稳定的内核对于整个系统的重要性不可或缺。
|
3天前
|
敏捷开发 Kubernetes Cloud Native
构建高效云原生应用:容器化与微服务架构的融合
【5月更文挑战第31天】 随着云计算技术的不断演进,云原生应用已成为企业数字化转型的核心。本文深入探讨了如何通过容器化技术和微服务架构的有效结合,构建高效、弹性和可扩展的云原生应用。我们将分析容器化的基本概念、优势以及它如何促进微服务架构的实施,同时提供策略和最佳实践,帮助企业实现敏捷开发和持续部署,优化资源利用,并提高系统的可靠性。
|
6天前
|
运维 Cloud Native 开发者
云原生架构的未来演进:从容器化到无服务器
【5月更文挑战第28天】 在现代IT领域,云原生技术正成为推动企业数字化转型的核心力量。本文将探讨云原生架构的关键组成部分,包括容器化、微服务以及无服务器计算,并预测这些技术的发展趋势。文章旨在提供一个全面的视角,以理解云原生生态系统如何适应日益复杂的业务需求,并支持构建更加灵活、可扩展的应用程序。
|
6天前
|
运维 Kubernetes Cloud Native
构建高效云原生应用:采用微服务架构与容器化技术
【5月更文挑战第28天】 在当今数字化转型的浪潮中,企业正迅速采纳云原生技术以保持竞争力。本文深入探讨了构建高效云原生应用的关键要素,重点分析了微服务架构和容器化技术如何共同推动应用的敏捷性、可扩展性和可靠性。通过具体案例分析,揭示了这些技术在实际业务场景中的应用效果及其带来的显著改进。
|
7天前
|
Cloud Native 测试技术 持续交付
构建高效稳定的云原生应用部署策略云端防御:云计算环境中的网络安全与信息保护策略
【5月更文挑战第27天】 在快速迭代和持续交付成为企业软件开发新常态的今天,如何确保云原生应用的部署效率与稳定性是每个运维工程师面临的重要挑战。本文将探讨一种综合性部署策略,该策略结合了容器化技术、微服务架构、自动化测试以及持续集成/持续部署(CI/CD)流程,旨在为现代云原生应用提供一个可靠且高效的部署模式。通过分析传统部署模式的不足,并引入先进的技术和实践,我们的目标是降低部署风险,提高部署速度,同时确保产品质量和服务的稳定性。
|
8天前
|
弹性计算 安全 微服务
【阿里云云原生专栏】容器网络技术前沿:阿里云Terway网络方案详解
【5月更文挑战第26天】阿里云Terway是高性能的容器网络方案,基于ECS的ENI实现,提供低延迟高吞吐的网络服务。它简化网络管理,实现安全隔离,并与阿里云服务无缝集成。Terway由CNI、Node和Controller组成,适用于微服务、混合云和多租户环境,为企业数字化转型中的复杂网络需求提供强大支持。
162 1
|
8天前
|
运维 监控 Cloud Native
构建高效云原生应用:容器化与微服务架构的融合
【5月更文挑战第26天】 在数字化转型的浪潮中,企业正迅速将重心转向云原生技术以支撑其业务灵活性和扩展性。本文深入探讨了如何通过结合容器化技术和微服务架构来构建和维护高效的云原生应用。首先概述了云原生的核心概念及其带来的优势,接着详细分析了容器化技术的关键作用以及微服务架构的设计原则。文章还展示了如何通过持续集成/持续部署(CI/CD)流程实现快速迭代,并通过实际案例说明如何应对分布式系统带来的复杂性挑战。最终,文中提出了一系列优化策略,旨在帮助开发者和运维人员提高系统的可靠性、安全性和性能。

热门文章

最新文章