当前位置: 首页 > news >正文

TCP全连接队列

1. 理解 int listen(int sockfd, int backlog) 第二个参数的作用

backlog:表示tcp全连接队列的连接个数+1。

如果连接个数等于backlog+1,后续连接就会失败,假设tcp连接个数为0,最大连接个数就为1,并且不accept获取连接。

先来的连接三次握手成功,后来的连接则处于SYN_SENT,即三次握手失败,不管是否accpet,三次握手和accpet无关,如果没有即使accpet,tcp允许客户端继续三次握手,但连接个数不能超过backlog+1,否则处于SYN_SENt状态,即半连接队列。

2. 理解全连接队列(原理)

tcp内部会维护一个全连接队列,用来管理一个一个的连接。

有人向全连接队列放数据,有人向全连接队列拿数据,这不就是生产消费者模型吗?

假设没有全连接队列/或者backlog为空,当上层很忙来不及appcet,则在忙的期间,可能有很多新的连接,但被服务器直接拒接了,当不忙的时候,之前的新连接就没了,忙的时候很忙,不忙的时候没有连接处理,也就是提高了服务器闲置率和减少给用户服务和体验的效率,但如果有全连接队列,不忙的时候就可以向里面获取连接。

假设全连接队列长度很大,比如长度为1000,当全连接队列有连接,说明服务器已经很忙了,处于末端的连接注定要等待更久的时间来被拿走,也减少给用户的体验和效率,长度更大,空间也会有一定的浪费。

2. 理解全连接队列(内核)

假如一个新连接到来,并且三次握手成功,则会链入到listen文件描述符里面的tcp_socket里面的全连接队列里,将来给连接分配文件描述符,该文件描述符通过struct file找到struct socket,在让listen里面的全连接队列分配一个连接也就是tcp_socket结构,新连接用struct_socket里面的struct_sock来和tcp_socket关联起来。

http://www.lryc.cn/news/525812.html

相关文章:

  • 统计文本文件中单词频率的 Swift 与 Bash 实现详解
  • iOS 权限管理:同时请求相机和麦克风权限的最佳实践
  • Excel 实现文本拼接方法
  • 软考信安27~Windows操作系统安全相关
  • 从 Spark 到 StarRocks:实现58同城湖仓一体架构的高效转型
  • WordPress Hunk Companion插件节点逻辑缺陷导致Rce漏洞复现(CVE-2024-9707)(附脚本)
  • 使用 HTML 开发 Portal 页全解析
  • 机器学习(二)
  • Laravel 实战:用Carbon筛选最近15分钟内的数据
  • Ubuntu20.04 文件系统打不开
  • vue3的组件v-model(defineModel()宏)
  • 在 Ubuntu 22.04 上安装 Kubernetes(Kubeadm 安装方式)
  • 2_高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计
  • Java算法——排序
  • 【Python・机器学习】多元回归模型(原理及代码)
  • mysql数据被误删的恢复方案
  • 使用EasyExcel(FastExcel) 的模板填充报Create workbook failure
  • [C]基础8.详解操作符
  • MySQL篇之对MySQL进行参数优化,提高MySQL性能
  • Vue 3 的 keep-alive 及生命周期钩子
  • ComfyUI实现老照片修复——AI修复老照片(ComfyUI-ReActor / ReSwapper)解决天坑问题及加速pip下载
  • OpenEuler学习笔记(十一):OpenEuler上搭建LAMP环境
  • Mongodb 慢查询日志分析 - 1
  • MySQL面试题2025 每日20道【其四】
  • 微服务学习-Nacos 注册中心实战
  • k8s服务StatefulSet部署模板
  • 07 区块链安全技术
  • Adobe的AI生成3D数字人框架:从自拍到生动的3D化身
  • dfs专题四:综合练习
  • 【线性代数】列主元法求矩阵的逆