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

news/2024/11/9 9:47:55/

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
}


http://www.ppmy.cn/news/1059798.html

相关文章

智慧互联,有序充电--多场景充电

企业微电网能效及充电管理解决方案 安科瑞 崔丽洁 1、企业需求&#xff08;目的地充电&#xff09; 站在企业的角度&#xff0c;除了要主动承担碳达峰、碳中和的社会责任&#xff0c;也需要考虑自身的经营和利润&#xff0c;需要结合企业的现状进行改造 企业微电网平台——与…

STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块

今日学习一下这款AHT10 温湿度传感器模块&#xff0c;给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器&#xff1a; 特性&#xff1a; 连接方式&#xff1a; 适用场所范围&#xff1a; 程序设计&#xff1a; 设…

Android 全局控件属性设置

一 使用需求&#xff1a; 如 设置全局字体、全局文本属性设置 二 实现方式&#xff1a; 在App使用的主题中&#xff0c;添加属性及属性值 如给所有的文本设置属性,注释部分作用是设置应用全局字体 <style name"Theme.AppDemo" parent"Base.Theme.AppDemo&q…

websocket 接收消息无法获取用户id

1.遇到问题 公司项目是基于ruoyi 框架快速搭建开发&#xff0c;使用多线程搜索查询&#xff0c;所以以用户区分任务&#xff0c;保证可以搜索任务和取消搜索&#xff0c;所以我这需要获得用户id&#xff0c;使用 SecurityUtils 共工工具类从请求头获取token&#xff0c;然后解…

哲讯科技携手无锡华启动SCM定制化项目,共谋数字化转型之路

无锡华光座椅弹簧有限公司启动SCM定制化项目 近日&#xff0c;无锡华光座椅弹簧有限公司顺利举行了SCM定制化项目的启动会。本次启动会作为该项目实施的重要里程碑&#xff0c;吸引了双方项目组核心成员的共同参与&#xff0c;并见证了项目的正式启动。 无锡华光座椅弹簧有限公…

jasper report实现将特定的内容放到最后一页

pageFooter和lastPageFooter 页脚使用标签pageFooter&#xff0c;每一页都会在页脚显示内容&#xff0c;比如显示页码&#xff1b; 页脚使用标签lastPageFooter&#xff0c;只会在最后一页显示内容&#xff0c;比如显示商标盖章图标之类的&#xff1b; <pageFooter><…

GDFN模块(restormer)

为了对特征进行变换&#xff0c;常规的前馈神经网络独立地在每个像素位置进行相同的操作。它使用两个1x1卷积层&#xff0c;一个用来扩展特征通道&#xff08;通常4倍&#xff09;&#xff0c;第二个用来将特征通道减少到原来的输入维度。在隐藏层中加入非线性。 GDFN做了两个…

React中的props和state的理解

props&#xff1a; props是一个从外部传递进组件的参数。由于React具有单向数据流的特性&#xff0c;所以它的主要作用是从父组件向子组件中传递数据&#xff0c;它是不可改变的&#xff0c;如果想要改变它&#xff0c;只能通过外部组件传入新的props来从新渲染子组件&#xff…