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

相关文章

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可