首页 > 其他分享 >dpvs 调整tcp mss

dpvs 调整tcp mss

时间:2024-07-20 17:54:44浏览次数:17  
标签:af mss tcp dpvs TCP opsize ptr

修改tcp options中mss值

src/ipvs/ip_vs_proto_tcp.c

因为tcp头部options中不同kind顺序是随机的,所以需要遍历找到kind值是mss 2和length值是4,再修改后面的mss value。

static void tcp_out_adjust_mss(int af, struct tcphdr *tcph)
{
    unsigned char *ptr;
    int length;

    if (unlikely(af != AF_INET && af != AF_INET6)) {
        RTE_LOG(DEBUG, IPVS, "adjust mss: unknow af, af : %d.\n",
                af);
        return ;
    }

    ptr = (unsigned char *)(tcph + 1);
    length = (tcph->doff << 2) - sizeof(struct tcphdr);

    while (length > 0) {
        int opcode = *ptr++;
        int opsize;

        switch (opcode) {
        case TCP_OPT_EOL:
            return;
        case TCP_OPT_NOP:
            length--;
            continue;
        default:
            opsize = *ptr++;
            if (opsize < 2)    /* "silly options" */
                return;
            if (opsize > length)
                return;    /* partial options */
            if ((opcode == TCP_OPT_MSS) && (opsize == TCP_OLEN_MSS)) {
                uint16_t in_mss = ntohs(*(__be16 *) ptr);

                in_mss -= (af == AF_INET ? TCP_OLEN_IP4_ADDR : TCP_OLEN_IP6_ADDR);

                /* set mss, 16bit */
                *((uint16_t *) ptr) = htons(in_mss);
                /* re-calc csum later */
                return;
            }

            ptr += opsize - 2;
            length -= opsize;
            break;
        }
    }
}

 

标签:af,mss,tcp,dpvs,TCP,opsize,ptr
From: https://www.cnblogs.com/WJQ2017/p/18313504

相关文章

  • STM32被拔网线 LWIP的TCP无法重连解决方案
    目录一、问题描述二、项目构成三、问题解决1.问题代码2.解决思路3.核心代码: 四、完整代码1.监测网口插入拔出任务2.TCP任务3.创建tcp任务4.删除tcp任务五、总结一、问题描述最近遇到一个问题,就是我的stm32设备作为tcp客户端和上位机交互,如果在连接过程中网线......
  • keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用【转】
    背景:keepalived默认是组播地址进行播放,且默认地址是224.0.0.18,如果配置多个keepalived主机,会导致虚拟IP地址存在冲突问题,这种问题怎么解决呢?解决办法:就是将keepalived主机的多播地址修改为单播地址,绑定固定IP地址,避免在多播模式下,通过VRRP进行广播地址,造成IP地址地址冲突。vrrp_......
  • socket 收发TCP/UDP
    一、c++个人测试记录,有问题还请指出,谢谢参考:C++开发基础之网络编程WinSock库使用详解TCP/UDPSocket开发_c++udp使用什么库-CSDN博客代码中Logger测试见文章: c++中spdlog的使用/python中logger的使用-CSDN博客1、main.cpp收发TCP信号:#include<iostream>#include<thr......
  • WPF ListBox's ItemsSource depend on another's ListBoxItem and fully implemented
    //xaml<Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><ListBoxGrid.Column="0"ItemsSource=&......
  • TCP/IP协议,以及对等网络通信原理!
    TCP/IP模型协议分层应用层:HTTP:超文本传输协议(网站访问WEB)(Apache、nginx)(IIS)FTP:文件传输协议(网络文件传输)TFTP:简单文件传输协议(交换机和路由器重装)SMTP:简单邮件传输协议(发信)POP3:邮局协议3代(收信)SNMP:简单网络管理协议(服务器监控)DNS:域名系统(域名与IP解析)传输层:TCP:传......
  • TCP协议详解
    传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。1.TCP头部格式源/目的端口:表示数据从哪个进程发送,然后发送到哪个进程去32位序列号:发送的数据按照一个字节一个编号存放进去32位确认号:用于给与对方响应,值为收到的TC......
  • 在Linux中,tcp三次握⼿的过程及原理?
    在Linux中,TCP(传输控制协议)的三次握手是建立可靠连接的重要过程。这一机制确保了客户端和服务器之间能够安全、有序地交换数据。下面将详细阐述TCP三次握手的过程及原理:一、TCP三次握手的过程TCP三次握手过程涉及客户端(通常称为“主动打开方”)和服务器(通常称为“被动打开方”)之间......
  • python的tkinter、socket库开发tcp的客户端和服务端
    一、tcp通讯流程和开发步骤1、tcp客户端和服务端通讯流程图套接字是通讯的利器,连接时要经过三次握手建立连接,断开连接要经过四次挥手断开连接。2、客户端开发流程1)创建客户端套接字2)和服务端器端套接字建立连接3)发送数据4)接收数据5)关闭客户端套接字3、服务端开发......
  • 网络编程-TCP/IP
    网络概述网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供的服务网络体系结构即指网络的层次结构和每层所使用协议的集合两类非......
  • 【计算机网络中的TCP/IP】TCP/IP协议中的tcp与udp
    目录简单介绍一些TCP/IP协议TCP/IP协议的组成TCP/IP协议中tcp与udp的区别1.简单介绍一下TCP/IP协议         TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指......