IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> connect函数以及未决连接队列 -> 正文阅读

[系统运维]connect函数以及未决连接队列

connect函数

connect函数是用于客户端程序和服务器程序建立tcp链接的

connect函数原型

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

参数说明:
sockfd:客户端的套接字文件描述符
addr:要连接的套接字地址,这是一个传入参数,指定了要连接的套接字地址信息(例如IP地址和端口号)
addrlen:是一个传入参数,参数addr的大小,即sizeof(addr)

返回值说明:连接建立成功返回0,失败返回-1并设置errno

connect函数在建立tcp连接的过程中使用了未决连接队列。

未决连接队列:

服务器接存储尚未被处理的客户端连接请求(未完成连接队列 + 已完成连接队列),数量由listen函数设定的backlog参数决定。

  • 未完成连接队列(半连接队列):没有完成三次握手,即客户端已经发出SYN报文并到达服务器,但是在tcp三次握手连接完成之前,服务器处于SYN_RCVD状态。(完成三次握手后,会被放入已完成连接队列的队尾)
  • 已完成连接队列(全连接队列):完成tcp三次握手的tcp连接,服务器处于ESTABLISHED状态,服务器会将这些套接字加入到已完成队列。(被accept接受后,就被从队列中剔除)

connect函数中关于tcp三次握手连接建立的几种状态:

 SYN_SENT,SYN_RCVD,ESTABLISHED
  • SYN_SENT:当客户端调用connect函数向服务端发送SYN包时,客户端就会进入 SYN_SENT状态,并且还会等待服务器发送第二个SYN + ACK包,因此SYN_SENT状态就是表示客户端已经发送SYN包。

  • SYN_RCVD:当服务端接收到客户端发送的SYN包并确认时,服务端就会进入 SYN_RCVD状态,这是tcp三次握手建立的一个很短暂的中间状态,一般很难看到, SYN_RCVD状态表示服务端已经确认收到客户端发送的SYN包。

  • ESTABLISHED:该状态表示tcp三次握手连接建立完成。

客户端发起connect函数请求:

  • 服务器收到连接请求,然后检查未决连接队列是否有空位
  • 如果未决连接队列有空位,就将该连接加入未决连接队列
  • 如果未决队列满了,查看 /proc/sys/net/ipv4/tcp_abort_on_overflow参数。
cat /proc/sys/net/ipv4/tcp_abort_on_overflow
有效值为:01

0:当tcp建立连接的3次握手完成后,将连接置为ESTABLISHED状态并
交付给应用程序的backlog队列时,会检查backlog队列是否已满。若
已满,通常行为是将连接还原至SYN_ACK状态,以造成3次握手最后
的ACK包意外丢失的假象,这样在客户端等待超时后可重发ACK,以再
次尝试进入ESTABLISHED状态,作为一种修复、重试机制。

1:如果tcp_abort_on_overflow为1,则在检查到backlog队列已
满时,直接发RST包给客户端终止此连接。此时客户端程序会收
到104 Connection reset by peer错误。
查看队列溢出
netstat -s | grep "listen|LISTEN"

SYNs to LISTEN ockets ignored 前面的数字是半连接队列的溢
出

times the listen queue of a socket overflowed 前面的
数字是全连接队列的溢出。

查看队列使用情况
ss -lnt

Send-Q:全连接队列(accept queue)的最大值,其值
为min(backlog,somaxconn)

Recv-Q:已建立成功(状态为ESTABLISHED),但尚未交付给应用
的“tcp连接的数量”,其最大值为Send-Q+1。(即三次握手完成,但
是服务端还没有调用accept从全连接中取出的连接数量----积压数量)

在这里插入图片描述
要查看队列溢出的情况,可以把 /proc/sys/net/ipv4/tcp_abort_on_overflow参数改为1。

参考以下文章:
从抓包的角度分析connect()函数的连接过程

全连接队列和半连接队列

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:51:46  更:2021-10-23 12:52:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:09:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码