1.2024年度Linux6.9内核最新源码解读-网络篇-【server端】-【第一步】创建--socket
2.由Docker BUG引起的源码Linux宕机事故及解决办法
2024年度Linux6.9内核最新源码解读-网络篇-【server端】-【第一步】创建--socket
深入解析年Linux 6.9内核的网络篇,从服务端的源码第一步:创建socket开始。理解用户空间与内核空间的源码交互至关重要。当我们在用户程序中调用socket(AF_INET,源码 SOCK_STREAM, 0),实际上是源码触发了从用户空间到内核空间的系统调用sys_socket(),这是源码趣味测试游戏源码php创建网络连接的关键步骤。 首先,源码让我们关注sys_socket函数。源码这个函数在net/socket.c文件的源码位置,无论内核版本如何,源码都会调用__sys_socket_create函数来实际创建套接字,源码它接受地址族、源码小程序与公众号源码一样么类型、源码协议和结果指针。源码创建失败时,源码会返回错误指针。 在socket创建过程中,参数解析至关重要:网络命名空间(net):隔离网络环境,每个空间有自己的配置,如IP地址和路由。
协议族(family):如IPv4(AF_INET)或IPv6(AF_INET6)。
套接字类型(type):如流式(SOCK_STREAM)或数据报(SOCK_DGRAM)。
协议(protocol):如TCP(IPPROTO_TCP)或UDP(IPPROTO_UDP),怎么用源码编程器做贪吃蛇默认值自动选择。
结果指针(res):指向新创建的socket结构体。
内核标志(kern):区分用户空间和内核空间的socket。
__sock_create函数处理创建逻辑,调用sock_map_fd映射文件描述符,支持O_CLOEXEC和O_NONBLOCK选项。每个网络协议族有其特有的create函数,如inet_create处理IPv4 TCP创建。 在内核中,安全模块如LSM会通过security_socket_create进行安全检查。sock_alloc负责内存分配和socket结构初始化,h5刮刮乐游戏带控制源码协议族注册和动态加载在必要时进行。RCU机制保护数据一致性,确保在多线程环境中操作的正确性。 理解socket_wq结构体对于异步IO至关重要,它协助socket管理等待队列和通知。例如,在TCP协议族的inet_create函数中,会根据用户请求找到匹配的协议,并设置相关的操作集和数据结构。 通过源码,我们可以看到socket和sock结构体的腾讯文档登陆源码在哪里找关系,前者是用户空间操作的抽象,后者是内核处理网络连接的实体。理解这些细节有助于我们更好地编写C++网络程序。 此外,原始套接字(如TCP、UDP和CMP)的应用示例,以及对不同协议的深入理解,如常用的IP协议、专用协议和实验性协议,是进一步学习和实践的重要部分。由Docker BUG引起的Linux宕机事故及解决办法
1背景
某运营商业务系统的服务器发生宕机,针对本次宕机事故进行排查。
文章福利小编推荐自己的Linux内核源码交流群: 整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前名可进群领取,并额外赠送一份价值的内核资料包(含视频教程、电子书、实战项目及代码)!
学习直通车: Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
2解决过程
我们都知道kdump是在Linux系统崩溃、死锁、死机的时候用来转储内存运行参数的服务。系统崩溃后内核无法正常工作,这时kdump会产生一个用于capture当前运行信息的内核,将此时的内存中的所有运行状态和数据信息收集到vmcore文件中,收集完成后系统将自动重启。本次使用crash分析linux kdump日志。
进入crash控制台
PANIC为内核崩溃类型,这里是一个BUG,内核无法处理空指针
在crash查看log,发现有很多Out-of-Memory
通过bt查看系统崩溃前内核依次调用的一系列函数,查看内核在何处崩溃。以"# 数字"开头的行为调用堆栈:
通过bt分析,可以定位到崩溃前的一个exception是ip寄存器RIP的异常,使用dis命令来看一下该地址的反汇编结果:
从上面的反汇编结果中,我们看到问题出在ip6mr.c文件行代码,翻开linux源码的相应位置:
撸内核源码 + Google
通过走读Linux源码和Google,发现当系统创建新的namespaces时,会因为ip6mr_sk_done的值为空而引起系统混乱,从而导致内核无法正常分配内存,所以我们在log文件中看到了许多Out-of-Memory。
在Kubernetes环境,提到namespaces就能想到docker,因为namespaces是docker的核心技术之一,容器的资源隔离由namespace来实现。
通过检查docker的网络,发现其中一个子网为空
解决办法
内核配置加入"net.ipv6.conf.all.disable_ipv6 = 1",关闭 IPV6,防止触发 docker BUG;
从内核的层面看,目前该Issue仍然没有close。在开启IPv6的环境,docker为什么会出现这个BUG,后续有空再研究,欢迎大家指正。
3END
Linux 内核虽然号称“不死族”,几乎不会崩溃或死机,但也有特殊情况,设备也有一定的使用周期,系统的高可用还是要的。
虽然你单点运行服务时很帅,但是你处理故障时的样子真的很狼狈。
往期精彩推荐:
最新干货!使用eBPF LSM热修复Linux内核漏洞
盘点那些Linux内核调试手段——内核打印
Linux 环境下网络分析和抓包是怎么操作的?
浅谈ARMLinux内核页表的块映射
Linux性能观测之dstat命令详解
2024-12-29 08:222010人浏览
2024-12-29 08:20415人浏览
2024-12-29 07:3372人浏览
2024-12-29 07:111838人浏览
2024-12-29 07:06856人浏览
2024-12-29 06:31564人浏览
中国消费者报南宁讯记者顾艳伟)6月23日,广西壮族自治区市场监管局召开视频会议,要求广西各级市场监管部门抓好特种设备安全和燃气具质量安全风险隐患大排查、大整治。当天,该局组成检查组,以“四不两直”方式
1.SNS源码SNS源码诞生2.SNS源码国内SNS源码3.sns 软件4.sNs怎么下载5.SNS源码产品概念6.UCHome插件SNS源码SNS源码诞生 SNS源码的诞生是社会需求与技术发展的
1.如何查看安卓手机的源代码?2.手机怎么检查源代码3.什么手机浏览器支持查看网页源码4.怎么在手机上查看APP的源码?5.如何在手机上查看网页源码?6.怎么在手机上看网页的源代码最好是手机的浏览器如