Linux TCP参数——tcp_allowed_congestion_control

tcp_allowed_congestion_control

设置允许普通进程使用的拥塞控制算法。这个参数的值阈是tcp_available_congestion_control参数的子集。默认值为"reno"加上tcp_congestion_control参数设置的算法。

reno

reno
慢启动阶段:在开始的时候,cwnd按指数增长(即每次翻倍),因为TCP试图估计网络的承载能力,这个阶段持续直到遇到第一个数据包丢失,如图中第一次垂直下降所示。

拥塞避免:在慢启动阶段达到ssthresh (慢启动阈值) 后,进入拥塞避免阶段,cwnd以线性方式逐渐增加,这可以看作是在探索网络容量的保守方式。

快速重传与快速恢复:当检测到数据包丢失时(一般通过重复的ACKs识别),TCP Reno 会执行一个“快速重传”,并且进入“快速恢复”算法。在 Reno 中,cwnd 被设定为 ssthresh 的一半(图中的水平虚线表示),然后开始线性增长(拥塞避免),而不是像 Tahoe 一样重新开始慢启动。

TCP Tahoe的反应:当发生超时时,Tahoe 将cwnd重置为1,并重新开始慢启动。这可以在图中的第一次和第二次陡峭下降中看到。

TCP_CONGESTION

可以通过该参数设置拥塞控制算法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

int main()
{
    int sockfd;
    struct sockaddr_in servaddr;
    char buffer[1024];

    // 创建TCP套接字
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
    {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }
    
	// 获取当前的拥塞控制算法
	char current_algorithm[32];
	socklen_t len = sizeof(current_algorithm);
	if (getsockopt(sockfd, IPPROTO_TCP, TCP_CONGESTION, current_algorithm, &len) < 0) {
	    perror("Getsockopt TCP_CONGESTION failed");
	    exit(EXIT_FAILURE);
	}
	printf("Current congestion control algorithm: %s\n", current_algorithm);

	// 设置拥塞控制算法为cubic
	const char *congestion_algorithm = "cubic";
	if (setsockopt(sockfd, IPPROTO_TCP, TCP_CONGESTION, congestion_algorithm, strlen(congestion_algorithm)) < 0) 
	{
	    perror("Setsockopt TCP_CONGESTION failed");
	    exit(EXIT_FAILURE);
	}
	printf("New congestion control algorithm: %s\n", congestion_algorithm);

    // 连接到服务器
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(8080);
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) 
    {
        perror("Connection failed");
        exit(EXIT_FAILURE);
    }

    // 在此处可以进行数据传输操作
    while(1);
    // 关闭套接字
    close(sockfd);

    return 0;
}

在这里插入图片描述

总结

tcp_allowed_congestion_control设置普通进程所能使用的拥塞算法。

相关推荐

  1. jvm 调优参数

    2024-03-23 19:06:01       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 19:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 19:06:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 19:06:01       82 阅读
  4. Python语言-面向对象

    2024-03-23 19:06:01       91 阅读

热门阅读

  1. 实用网站推荐 [持续更新中...]

    2024-03-23 19:06:01       48 阅读
  2. Qt拖放文件实现(Drag,Drop, MimeData )

    2024-03-23 19:06:01       41 阅读
  3. Leetcode-06-Z字形变换

    2024-03-23 19:06:01       43 阅读
  4. ARM IHI0069F GIC architecture specification (1)

    2024-03-23 19:06:01       35 阅读
  5. Word中文字重叠在一起怎么办

    2024-03-23 19:06:01       43 阅读
  6. 蓝桥杯/ 刷题统计 /c\c++

    2024-03-23 19:06:01       39 阅读
  7. Codeforces Round 936 (Div. 2) (A~C)

    2024-03-23 19:06:01       42 阅读
  8. 压缩感知——稀疏恢复

    2024-03-23 19:06:01       37 阅读
  9. HTTP协议与报文

    2024-03-23 19:06:01       33 阅读