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

Linux 使用TCP_INFO查询TCP连接的状态信息

Linux 上可以使用TCP_INFO查询TCP连接状态信息包括:

发送方拥塞窗口阈值、发送方缓冲区拥塞窗口、advmss(Advertised MSS)、通过 ACK 确认的累计字节数等等

struct tcp_info {__u8	tcpi_state;__u8	tcpi_ca_state;__u8	tcpi_retransmits;__u8	tcpi_probes;__u8	tcpi_backoff;__u8	tcpi_options;__u8	tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;__u8	tcpi_delivery_rate_app_limited:1;__u32	tcpi_rto;__u32	tcpi_ato;__u32	tcpi_snd_mss;__u32	tcpi_rcv_mss;__u32	tcpi_unacked;__u32	tcpi_sacked;__u32	tcpi_lost;__u32	tcpi_retrans;__u32	tcpi_fackets;/* Times. */__u32	tcpi_last_data_sent;__u32	tcpi_last_ack_sent;     /* Not remembered, sorry. */__u32	tcpi_last_data_recv;__u32	tcpi_last_ack_recv;/* Metrics. */__u32	tcpi_pmtu;__u32	tcpi_rcv_ssthresh;__u32	tcpi_rtt;__u32	tcpi_rttvar;__u32	tcpi_snd_ssthresh;__u32	tcpi_snd_cwnd;__u32	tcpi_advmss;__u32	tcpi_reordering;__u32	tcpi_rcv_rtt;__u32	tcpi_rcv_space;__u32	tcpi_total_retrans;__u64	tcpi_pacing_rate;__u64	tcpi_max_pacing_rate;__u64	tcpi_bytes_acked;    /* RFC4898 tcpEStatsAppHCThruOctetsAcked */__u64	tcpi_bytes_received; /* RFC4898 tcpEStatsAppHCThruOctetsReceived */__u32	tcpi_segs_out;	     /* RFC4898 tcpEStatsPerfSegsOut */__u32	tcpi_segs_in;	     /* RFC4898 tcpEStatsPerfSegsIn */__u32	tcpi_notsent_bytes;__u32	tcpi_min_rtt;__u32	tcpi_data_segs_in;	/* RFC4898 tcpEStatsDataSegsIn */__u32	tcpi_data_segs_out;	/* RFC4898 tcpEStatsDataSegsOut */__u64   tcpi_delivery_rate;__u64	tcpi_busy_time;      /* Time (usec) busy sending data */__u64	tcpi_rwnd_limited;   /* Time (usec) limited by receive window */__u64	tcpi_sndbuf_limited; /* Time (usec) limited by send buffer */
};

1. `__u8 tcpi_state;`:表示 TCP 连接的状态。
2. `__u8 tcpi_ca_state;`:表示 TCP 拥塞控制状态。
3. `__u8 tcpi_retransmits;`:表示已经重传的数据包数量。
4. `__u8 tcpi_probes;`:表示发送的探测消息数量。
5. `__u8 tcpi_backoff;`:重传退避指数。
6. `__u8 tcpi_options;`:表示 TCP 选项的状态。
7. `__u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4;`:发送和接收窗口的缩放因子。
8. `__u8 tcpi_delivery_rate_app_limited:1;`:表示是否限制传输速率。
- 9-12行:`__u32` 类型的重传超时时间、ACK 超时时间、发送端最大段大小和接收端最大段大小。
- 14-18行:`__u32` 类型的未确认字节数、SACK(Selective Acknowledgment)个数、丢失的数据包数、重传的数据包数和 FACK(Forward Acknowledgment)个数。
- 20-23行:`__u32` 类型的最后发送数据时间、最后发送 ACK 时间、最后接收数据时间和最后接收 ACK 时间。
- 25-33行:`__u32` 类型的 PMTU(Path MTU)、接收拥塞窗口阈值、RTT(Round Trip Time)、RTTVAR(RTT 变化的方差)、发送方拥塞窗口阈值、发送方缓冲区拥塞窗口、advmss(Advertised MSS)和数据包重排序的数量。
- 35-36行:`__u32` 类型的接收 RTT(Round Trip Time)和接收窗口大小。
- 38行:`__u32` 类型的总的重传次数。
- 40-42行:`__u64` 类型的 pacing_rate、max_pacing_rate 和通过 ACK 确认的累计字节数。
- 44-45行:`__u32` 类型的发送段数和接收段数。
- 47-50行:`__u32` 类型的未发送字节数、最小 RTT(Round Trip Time)、接收到的数据包数和已发送的数据包数。
- 52行:`__u64` 类型的传输速率。
- 54-56行:`__u64` 类型的发送数据忙碌时间、受接收窗口限制的时间和受发送缓冲区限制的时间。

iperf 中的示例代码如下:

/*************************************************************/
void
save_tcpinfo(struct iperf_stream *sp, struct iperf_interval_results *irp)
{
#if (defined(linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && \defined(TCP_INFO)socklen_t tcp_info_length = sizeof(struct tcp_info);if (getsockopt(sp->socket, IPPROTO_TCP, TCP_INFO, (void *)&irp->tcpInfo, &tcp_info_length) < 0)iperf_err(sp->test, "getsockopt - %s", strerror(errno));if (sp->test->debug) {printf("tcpi_snd_cwnd %u tcpi_snd_mss %u tcpi_rtt %u\n",irp->tcpInfo.tcpi_snd_cwnd, irp->tcpInfo.tcpi_snd_mss,irp->tcpInfo.tcpi_rtt);}#endif
}

相关文章:

Linux 使用TCP_INFO查询TCP连接的状态信息

Linux 上可以使用TCP_INFO查询TCP连接状态信息包括&#xff1a; 发送方拥塞窗口阈值、发送方缓冲区拥塞窗口、advmss&#xff08;Advertised MSS&#xff09;、通过 ACK 确认的累计字节数等等 struct tcp_info {__u8 tcpi_state;__u8 tcpi_ca_state;__u8 tcpi_retransmits;__…...

软件测试案例 | 气象探测库存管理系统的集成测试计划

将经过单元测试的模块按照设计要求连接起来&#xff0c;组成规定的软件系统的过程被称为“集成”。集成测试也被称为组装测试、联合测试、子系统测试或部件测试等&#xff0c;其主要用于检查各个软件单元之间的接口是否正确。集成测试同时也是单元测试的逻辑扩展&#xff0c;即…...

vue点击按钮重新加载页面(vue第一次加载页面点击按钮出现页面刷新问题之后一切正常)

问题描述 所开发的vue项目每次跑起来之后就会出现点击按钮后重新加载整个页面的问题&#xff0c;但是只会在第一次点击的时候出现&#xff0c;后面就不会在出现加载整个页面的情况。 原因 在form表单中使用button按钮导致form表单进行了页面刷新。button默认的“type‘submi…...

软件工程(十一) 系统设计分类

我们知道需求规格说明书(SRS)落地之后, 就要开始着手系统设计了,看一下这个系统该如何来设计,并且如何实现。学习系统设计之前,需要先了解系统设计有哪些分类。 系统设计的分类如下 界面设计结构化设计面向对象设计(最重要)1、界面设计 界面设计也叫做人机界面设计,属于…...

数字转中文大写金额

有时候&#xff0c;我们需要显示中文大写金额&#xff0c;比如打印银行付款申请单等。 新建一个工程&#xff0c;加入一个标准模块在模块中加入如下代码&#xff0c;窗口中调用 AmountInChineseWords 函数即可。最大解析到百万亿&#xff0c;小数最多解析两位到分。 模块代码…...

Java——HashMap和HashTable的区别

Java——HashMap和HashTable的区别 Java HashMap和HashTable的区别1. 继承的父类2. 线程安全性3. null值问题4. 初始容量及扩容方式5. 遍历方式6. 计算hash值方式 Java HashMap和HashTable的区别 1. 继承的父类 都实现了Map、Cloneable&#xff08;可复制&#xff09;、Seria…...

Docker去除sudo权限

Docker去除sudo权限 使用docker命令时&#xff0c;每次都要sudo提权&#xff0c;否则就会报错提示无权限。 1.查看docker用户组及成员 sudo cat /etc/group | grep docker2.添加docker用户组 sudo groupadd docker3.添加用户到docker组 sudo gpasswd -a ${USER} docker4.增…...

【ROS系统】Ubuntu22.04系统中安装ROS2系统_ubuntu 安装ros2_GoesM

【ROS系统】Ubuntu22.04系统中安装ROS2系统_ubuntu 安装ros2_GoesM Excerpt ROS仿真、专为自动驾驶研发提供的系统平台_ubuntu 安装ros2 参考博客&#xff1a;ROS 安装详细教程 —— Ubuntu22.0.4 LTS 安装 Part 0. 准备 首先&#xff0c;我们需要一个Ubuntu系统。 Part 1. …...

MySQL8.0.22安装过程记录(个人笔记)

1.点击下载MySQL 2.解压到本地磁盘&#xff08;注意路径中不要有中文&#xff09; 3.在解压目录创建my.ini文件 文件内容为 [mysql] # 设置mysql客户端默认字符集 default-character-setutf8[mysqld] # 设置端口 port 3306 # 设计mysql的安装路径 basedirE:\01.app\05.Tool…...

Python中pip和conda的爱恨情仇

在使用pip和conda时&#xff0c;是否也有过以下的疑惑&#xff1f;&#xff1f;&#xff1f; 目前只总结了以下常见的几种混淆&#xff0c;如有学者还有其它疑惑&#xff0c;欢迎留言讨论&#xff0c;我会解答更新&#xff0c;帮助自己理清的同时&#xff0c;也帮助其他同样困…...

HTTPS协议原理

目录 前言 1.理解加密和解密 2.为什么要加密 3.常见的加密方式 3.1对称加密 3.2非对称加密 4.数据摘要和数据指纹 5. 数字签名 6.HTTPS的加密策略 6.1只使用对称加密 6.2使用非对称加密 6.2.1服务端使用非对称加密 6.2.2双方都使用非对称加密 6.3对称加密非对称加…...

C语言每日一练------Day(6)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;整数转换 异或 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn…...

springboot中使用ElasticSearch

引入依赖 修改我们的pom.xml&#xff0c;加入spring-boot-starter-data-elasticsearch <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>编写配…...

十二、集合(2)

本章概要 添加元素组集合的打印列表 List 添加元素组 在 java.util 包中的 Arrays 和 Collections 类中都有很多实用的方法&#xff0c;可以在一个 Collection 中添加一组元素。 Arrays.asList() 方法接受一个数组或是逗号分隔的元素列表&#xff08;使用可变参数&#xff…...

【网络设备】交换机的概念、工作原理、功能以及以太网帧格式

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、认识交换机 二、交换机的主要功能 1、数…...

研磨设计模式day11观察者模式

目录 场景 代码示例 定义 观察者模式的优缺点 本质 何时选用 简单变型-区别对待观察者 场景 我是一家报社&#xff0c;每当我发布一个新的报纸时&#xff0c;所有订阅我家报社的读者都可以接收到 代码示例 报纸对象 package day11观察者模式;import java.util.Observ…...

第八周第二天学习总结 | MySQL入门及练习学习第四天

实操练习&#xff1a; 1.建立一个员工表和与之对应的部门表 2.建立外键约束 3.使用多表查询&#xff0c;直接查询部门表和员工表 发现&#xff1a;有很多多余的因笛卡尔乘积而带来的多余输出内容 我想要的到简单明了的数据结果&#xff0c;要消除多于因笛卡尔乘积带来的输出…...

WPF数据转换

在基本绑定中&#xff0c;信息从源到目标的传递过程中没有任何变化。这看起来是符合逻辑的&#xff0c;但我们并不总是希望出现这种行为。通常&#xff0c;数据源使用的是低级表达方式&#xff0c;我们可能不希望直接在用户界面使用这种低级表达方式。WPF提供了两个工具&#x…...

《Go 语言第一课》课程学习笔记(十三)

方法 认识 Go 方法 Go 语言从设计伊始&#xff0c;就不支持经典的面向对象语法元素&#xff0c;比如类、对象、继承&#xff0c;等等&#xff0c;但 Go 语言仍保留了名为“方法&#xff08;method&#xff09;”的语法元素。当然&#xff0c;Go 语言中的方法和面向对象中的方…...

基于RUM高效治理网站用户体验入门-价值篇

用户体验 用户体验基本包含访问网站的性能、可用性和正确性。通俗的讲&#xff0c;就是一把通过用户访问测量【设计者】意图的尺子。 本文目的 网站如何传递出设计者的意图&#xff0c;可能页面加载时间太长、或者页面在用户的浏览器中渲染时间太慢&#xff0c;或者第三方设备…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...