浅谈tcp socket的backlog参数

Socket中的backlog参数和缓冲区1108 backlog参数为socket套接字监听端口时,内核为该套接字分配的一个队列大小,在服务端还没有来得及处理请求时暂时缓存请求所用的队列。第一次握手时,因为客户端与服务器之间的连接还未完全建立,连接会被放入半连接队列中。服务器处理Accept事件是在TCP三次握手,也就是建立连接之后,服务器会从全连接队列中获取连接并进行处理。服务端正常处理请求完成后,休眠的连接是不占用backlog队列位置的,连接全部成功。时,全连接队列中堆积的连接数大于SO_BACKLOG设置的值是,便会抛出异常。 阅读详情

 

最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下。

TCP三次握手底层实现

backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在解释backlog参数之前,我们先了解下tcp在内核的请求过程,其实就是tcp的三次握手:

这里写图片描述
1、client发送SYN到server,将状态修改为SYN_SEND,如果server收到请求,则将状态修改为SYN_RCVD,并把该请求放到syns queue队列中。
2、server回复SYN+ACK给client,如果client收到请求,则将状态修改为ESTABLISHED,并发送ACK给server。
3、server收到ACK,将状态修改为ESTABLISHED,并把该请求从syns queue中放到accept queue。

在linux系统内核中维护了两个队列:syns queue和accept queue

syns queue
用于保存半连接状态的请求,其大小通过/proc/sys/net/ipv4/tcp_max_syn_backlog指定,一般默认值是512,不过这个设置有效的前提是系统的syncookies功能被禁用。互联网常见的TCP SYN FLOOD恶意DOS攻击方式就是建立大量的半连接状态的请求,然后丢弃,导致syns queue不能保存其它正常的请求。

accept queue
用于保存全连接状态的请求,其大小通过/proc/sys/net/core/somaxconn指定,在使用listen函数时,内核会根据传入的backlog参数与系统参数somaxconn,取二者的较小值。

如果accpet queue队列满了,server将发送一个ECONNREFUSED错误信息Connection refused到client。

Netty应用层

在netty实现中,backlog默认通过NetUtil.SOMAXCONN指定。

这里写图片描述

当然也可以通过option方法自定义backlog的大小。
这里写图片描述

backlog设置注意点

前面已经提到过,内核会根据somaxconn和backlog的较小值设置accept queue的大小,如果想扩大accept queue的大小,必须要同时调整这两个参数。

本文转载来自:
链接:https://www.jianshu.com/p/e6f2036621f4

Matlab实战:12种优化算法在CEC2014测试集上的性能对比(附完整代码) 本文详细对比了12种优化算法在CEC2014测试集上的性能表现,包括PSO、DE、GA等主流算法。通过Matlab实现完整的实验流程,涵盖算法实现、参数设置、结果分析与可视化,为工程优化问题提供实用解决方案。特别关注收敛曲线和评价指标,帮助读者选择最适合特定场景的优化算法。 阅读详情

相关推荐

ENSP实验一:防火墙基础配置

配置client(内网)、FTP Server(外网)的IP地址。进入防火墙,输入密码:默认为admin@123。

Carohuan的博客 1万+

linux里的backlog详解

说起backlog, 都会想起socket编程中的listen backlog 参数,而这个backlog 是linux内核中处理的backlog么? int listen(int sockfd, int backlog)man listen  可以看到关于listen 的解释 The backlog argument defines the maximum length to wh

沧海一粟 4万+

Unity学习笔记之【IK反向动力学操作】

反向动力学,简称IK。相较于正向动力学,反向动力学旨在子级对父级产生的影响。使用IK,可以实现根据目标位置或方向来计算并调整角色的关节(骨骼)链,以使角色的末端(如手臂、腿部等)达到预期的位置或取向。通过使用 Unity 的 IK 功能,你可以实现各种复杂的角色动画效果,如角色抓取、足部对齐、手臂跟随等。 2. 将所视的目标物体拖拽绑定 4. 实现效果如下 :移动角色时注释立方体 实现效果如下

m0_47351846的博客 2954

backlog与TCP三次握手之间不得不说的事

JDK在创建套接字,可以为服务端配置backlog参数的值,在netty中我们也可以通过ChannelOption.SO_BACKLOG来设置。那么backlog参数到底有什么作用呢?它又是如何工作的呢?

天堂的博客 978

Vienna整流器SVPWM调制:7扇区划分与中点电位平衡的MATLAB/Simulink实现解析

本文深入解析Vienna整流器的SVPWM调制技术,重点介绍7扇区划分与中点电位平衡的MATLAB/Simulink实现方法。通过详细的算法推导和仿真模型构建,帮助工程师掌握整流器闭环控制策略,优化功率转换效率。内容涵盖扇区判断逻辑、矢量作用时间计算及中点电位平衡的PID调节等核心技术要点。

weixin_33937499的博客 387

【网络图】:附Origin详细画图教程

网络图,是一种由节点(或顶点)和连接这些节点的边(或链路)组成的图形结构。在网络图中,节点通常代表系统中的一个实体(如项目中的一项任务、通信网络中的一个设备、或运输网络中的一个站点),而边则代表这些实体之间的直接联系或流动(如任务的先后顺序、数据的传输路径、或乘客的旅行路线)。 有向图:如果边具有方向性,即从一个节点指向另一个节点,则称为有向图。这种图常用于表示具有明确先后顺序或方向性的系统,如项目管理中的任务依赖关系。 无向图:如果图中的边没有方向,则称为无向图。它适用于表示实体间相互关联但无明确方向性的

weixin_50236590的博客 3955

[从源码学设计]蚂蚁金服SOFARegistry网络操作之连接管理

SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。本系列文章重点在于分析设计和架构,即利用多篇文章,从多个角度反推总结 DataServer 或者 SOFARegistry 的实现机制和架构思路,让大家借以学习阿里如何设计。本文为第三篇,介绍SOFARegistry网络操作之连接管理。

罗西的思考 699

深入解析AndroidManifest.xml与device_admin.xml:打造完美DeviceOwner应用配置

本文深入解析了Android企业级开发中DeviceOwner应用的核心配置文件AndroidManifest.xml与device_admin.xml。详细阐述了如何精准声明DeviceAdminReceiver、定义管理策略,并提供了通过ADB命令进行设置与验证的实战指南,帮助开发者构建权限完整、配置正确的设备所有者应用。

ice55的博客 680

backlog配置_浅谈tcp socket的backlog参数

最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下。底层backlog参数主要用于底层方法int listen(int sockfd, int backlog), 在解释backlog参数之前,我们先了解下tcp在内核的请求过程,其实就是tcp的三次握手:...

weixin_39984105的博客 221

C2000ware介绍

C2000的下载安装指南C2000目录。

小柚子的博客 2796

WPS Office JS宏实现文件和数据的上传及下载

WPS Office JS宏下载、上传文件;通过加载项实现数据的获取和上传。

学点笔记 4300

设置公共请求参数_浅谈tcp socket的backlog参数

最近看 netty 源码碰到 ChannelOption.SO_BACKLOG 参数,通过跟踪代码发现其实是用于设置底层 tcp socket 的 backlog 参数,由于不了解这个参数,有必要彻底的理解一下。底层backlog 参数主要用于底层方法 int listen(int sockfd, int backlog), 在解释 backlog 参数之前,我们先了解下 tcp 在内核的请求过程...

weixin_39555715的博客 90

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

listen函数的第二个参数_浅谈tcp socket的backlog参数

最近看 netty 源码碰到 ChannelOption.SO_BACKLOG 参数,通过跟踪代码发现其实是用于设置底层 tcp socket 的 backlog 参数,由于不了解这个参数,有必要彻底的理解一下。底层backlog 参数主要用于底层方法 int listen(int sockfd, int backlog), 在解释 backlog 参数之前,我们先了解下 tcp 在内核的请求过程...

weixin_39969232的博客 185

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java socket参数详解:BackLog

输入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数。如果队列满时收到连接指示,则拒绝该连接。 注意: 1. backlog参数必须是大于 0 的正值。如果传递的值等于或小于 0,则假定为默认值。 2. 经过测试这个队列是按照FIFO(先进先出)的原则。 3. 如果将accept这个函数放在一个循环体中时,backlog参数也不会有什么作用。或者简单的讲运行Serv

清风小阁 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C语言网络编程TCP不使用http,浅谈socket TCP编程中connect的一些坑

1.服务端listen成功后,系统就自动接收客户端请求了man listen:其中有一段The behavior of the backlog argument on TCP sockets changed with Linux2.2. Now it specifies the queue length for completely establishedsockets waiti...

weixin_30996983的博客 326

TCPIp是不是一种计算机语言,浅谈socket TCP编程中connect的一些坑

1.服务端listen成功后,系统就自动接收客户端请求了man listen:其中有一段The behavior of the backlog argument on TCP sockets changed with Linux2.2. Now it specifies the queue length for completely establishedsockets waiti...

weixin_30810127的博客 307

浅谈 Linux C语言 socket 网络编程

注意:本文是按照 TCP、UDP的工作过程进行总结的 TCP套 socket 接口编程: 基于TCP的 客户/服务器(C/S)模式的工作过程如下: image 服务器进程中的一些函数: socket(): /* 函数所需头文件及其原型 */ #include <sys/socket.h> int socket( int family, int type, int protocol); socketfd = soket(AF_INET, SOCK_STREAM

君君的博客 625
上一篇: TCP/IP协议中backlog参数
下一篇: 本文详解高并发场景下backlog的配置和作用
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值