Linux kernel tcp 连接建立详解——由listen系统调用的backlog参数引发的长篇大论

本文主要是介绍Linux kernel tcp 连接建立详解——由listen系统调用的backlog参数引发的长篇大论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文是openoffice写的,图片什么不太好弄,我只把目录和第一章放在这里。

全文的pdf从这里下载。img_e25d4fb2f8de1caf41a735ec53088516.pnglisten_backlog.pdf

再来个流程图。img_e25d4fb2f8de1caf41a735ec53088516.pngtcp连接建立流程图.pdf


Linux kernel tcp 连接建立详解

                         ——listen系统调用的backlog参数引发的长篇大论


目录

Linux kernel tcp 连接建立详解 1

0章 本文的目的 2

1listen()系统调用的困惑 2

1.1 前提条件 2

1.2 分析client程序 2

1.3 分析server程序 2

1.4 第一次观察程序行为 2

1.5 第二次观察程序行为 5

1.6 第三次观察程序行为 7

1.7 略作猜测与分析 10

2tcp 三次握手代码分析 11

2.1 client/server程序结构 13

2.2 serverlisten()系统调用 13

2.3 clientconnect()系统调用 19

2.4 server端处理SYN 23

2.5 client端处理SYN/ACK 32

2.6 server端处理ACK 34

3accept()系统调用分析 42

3.1 accept()系统调用的分析 42

3.2 连接请求的生命周期 47

4listen()系统调用的参数backlog详解 48

4.1 listen()系统调用的参数backlog的作用 48

4.2 分析1.4节中程序的行为 49

4.3 分析1.5节中程序的行为 52

4.4 分析1.6节中程序的行为 53

4.5 backlog参数的用法 53

附录1 client.c 54

附录2 server.c 55

0章 本文的目的

一直以来,对tcp的连接的建立过程只停留在三次握手的层面,阅读代码时发现好多逻辑流程不是很清楚。还有就是对系统调用int listen(int sockfd, int backlog)的第二个参数backlog似懂非懂。它到底是限制server端能同时处理的连接请求数量,还是限制同时建立的连接数量,还是限制等待建立连接队列的长度?

代码面前,了无秘密,关键是得探求。如果你也有同样的困惑,不妨读读本文。

我分析的是v3.12-rc4的代码,commit 0e7a3ed04f0c 。本文偏重于连接建立的函数调用过程、sock状态变化,以及backlog参数,其他的也很重要的内容,如tcp序号、拥塞控制等,但是本文从略,否则可以写本书了。并且本文只关注tcp层,IP层及以下也忽略。

1章是简单的client/server程序,如果你对第1章中的程序行为全部理解,那么恭喜你,完全可以略过本文。

这篇关于Linux kernel tcp 连接建立详解——由listen系统调用的backlog参数引发的长篇大论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539578

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof