提高通过doip刷写汽车控制器软件速率的方法

文章讨论了在使用uds0x36服务传输软件升级包时遇到的低速问题,通过Wireshark分析发现未开启TCP_NODELAY导致延迟。作者提供了在Linux系统中启用TCP_NODELAY以减少网络延迟并提高数据传输效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在利用uds 0x36服务传输软件升级包的时候,发现数据传输速率特别慢,需要半个小时以上才能将软件升级包传输完毕。

通过wireshark抓包发现,TCP包传输的过程中,并没有开启TCP_NODELAY机制。

在没有开启TCP_NODELAY机制的情况下,TCP会等待收到ack包后才继续发送下一帧报文,如下图:

此时网络延迟对于数据传输的速率影响巨大,而在开启TCP_NODELAY机制后,发送端不会等待收到ack包后才开始发送下一帧数据,而是连续发送数据包。接收端在收到TCP包后,发送ack响应即可。如下图:

这样收发端网络延迟导致的影响就可以忽略不计了。

这个问题是我在开发HAD控制器的诊断模块时发现的,HAD控制器基于Linux系统,增加如下代码就可以实现TCP_NODELAY机制的开启

#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>
 
int main() {
    int sockfd;
    // 假设sockfd是已经建立连接的socket文件描述符
 
    // 启用TCP_NODELAY选项
    int flag = 1; // 使用TCP_NODELAY的标志
    if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag)) < 0) {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
 
    printf("TCP_NODELAY is enabled\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值