在TCP建立连接阶段,内核维护着两个队列:

  • 未完成队列: 正处于三次握手当中,客户端发送SYN过来,服务端回应SYN+ACK之后,服务端当前处于SYN_RECV状态,此时的连接在未完成队列中。
  • 以完成队列: 已完成三次握手,客户端回应ACK之后,两边都处于ESTABLISHED状态,此时连接从未完成队列移到以完成队列中。此时服务端调用accept,就从以完成队列移除并返回新创建的sockfd。

backlog就是以完成连接队列的大小

问题:如果backlog为1,那么完成队列很容易就满,满了以后新客户端连接进来会怎么处理?
下面实际操作一下:

1.先将 backlog 大小设置为1

2.运行客户端和服务端


通过运行程序发现:

  1. 完全建立连接【即 established】的有两个
  2. 因此已完成连接队列大小并不是 backlog,而是 backlog + 1
  3. 如果此时再次来了一个新的连接,状态是 SYN_RECV,SYN_RECV是指服务端接收到了客户端的SYN并且发送了ACK时的状态。再进一步接收到客户端的ACK就进入ESTABLISHED状态。
  4. 客户端调用connect接口还是成功返回
  5. 但是对于服务端,这个连接进不了完成队列,一段时间后被内核释放了,服务器就没有办法通过accept返回得到连接。

【Linux】backlog是什么?相关推荐

  1. linux backlog详解

    本文转自:http://veithen.io/2014/01/01/how-tcp-backlog-works-in-linux.html When an application puts a soc ...

  2. linux backlog,linux – 如何检查rx ring,max_backlog和max_syn_backlog大小

    经常在故障排除和调整过程中,我发现自己在考虑以下Linux内核设置: net.core.netdev_max_backlog net.ipv4.tcp_max_syn_backlog net.core ...

  3. linux backlog,捋一捋 backlog 的作用

    我们知道在 socket 编程中,服务端需要经历 listen → bind → accept 这么几个过程:而客户端需要经历 connect → receive 的过程.其中服务端在 bind 的时 ...

  4. linux backlog,linux下backlog设置 - 就爱阅读网

    当业务有高并发的情况的时候,需要调整backlog.对于PHP而言,需要注意以下3方面:1.操作系统 sysctl 2.web端 nginx 3.php后端 php-fpm 操作系统以Ubuntu为例 ...

  5. aix内核是linux,linux和aix内核参数检查

    安装oracle软件时需要设置操作系统级别的用户限制,后期检查可以使用如下命令,方便问题的排查工作 linux: tail -15 /etc/security/limits.conf tail -30 ...

  6. Linux中listen()系统调用的backlog参数分析

    这篇文章是对上一篇博客网络编程常用接口的内核实现----sys_listen()的补充,上篇文章中我说listen()系统调用的backlog参数既是连接队列的长度,也指定了半连接队列的长度(不能说等 ...

  7. linux tcp socket 请求队列大小参数 backlog 简介

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

  8. linux socket 中的backlog参数介绍

    问题 我们在linux上服务器起了一个serversocket,并且设置了backlog为2,并没有让serversock.accept() 在客户端上,我们一个一个的启动了连接socket, 当连接 ...

  9. 【翻译】TCP backlog在Linux中的工作原理

    原文How TCP backlog works in Linux 水平有限,难免有错,欢迎指出! 以下为翻译: 当应用程序通过系统调用listen将一个套接字(socket)置为LISTEN状态时,需 ...

  10. Linux中,Tomcat 怎么承载高并发(深入Tcp参数 backlog)

    一.前言 这两天看tomcat,查阅 tomcat 怎么承载高并发时,看到了backlog参数.我们知道,服务器端一般使用mq来减轻高并发下的洪峰冲击,将暂时不能处理的请求放入队列,后续再慢慢处理.其 ...

最新文章

  1. 20172307 结对编程项目-四则运算 第二周 阶段总结
  2. 已解决:pod资源清单yaml中各字段详解
  3. USACO3.32Shopping Offers(DP)
  4. java i 线程不安全_java中的++i是线程安全的吗?
  5. python如何开启多线程_Python如何创建多线程
  6. 前端学习(2448):发布文章功能介绍
  7. 阿里毕玄:推荐给Java程序员的7本好书
  8. 理解 python 装饰器
  9. 豆瓣 音乐和读书的搜索页的 window.__DATA__ 的解密
  10. MySQL彻底卸载干净
  11. CMS漏洞(发货100CMS、SHECMS、ZHCMS、MACCMS)详解实战
  12. python爬取新浪微博大V的所有微博内容
  13. 服务器装win10稳定吗,win10哪个版本最稳定好用 目前win10最稳定的版本推荐
  14. Angular NgModule
  15. 火箭军计算机网络技术就业方向,计算机系统结构专业就业方向
  16. 用天然气做燃料极空气做氧化极的燃料电池
  17. 第7期——AP上线过程
  18. UE4 天气系统插件使用
  19. 软件开源真正意义何在?
  20. C语言三位数反序且if,2012年10月14日江苏省高校计算机等级考试二级C语言上机题(C02)及其解答_张柏雄...

热门文章

  1. cmp 字节 汇编_汇编 常用指令 cmp jmp call ret
  2. 广州库洛科技有限公司-校招-游戏服务端开发岗位笔试
  3. 42所一流大学建设高校名单
  4. android系统稳定性测试,Android的稳定性
  5. 时间序列预测(1)-什么是时间序列预测
  6. android游戏开发——微信打飞机(一)
  7. 低代码指南100方案:88智慧校园后勤管理系统,助力学校后勤管理信息化
  8. STM32MP157驱动开发——Linux IIO驱动(下)
  9. Webpack打包-打包详细流程
  10. 71Ordered fractions