• TCP连接的相关参数


    一、概述

    TCP连接中有许多操作系统提供的调节参数,在不同的使用场景中修改对应的参数,可以TCP性能。
    可以将性能提高分为下面三个部分:

    • TCP三次握手的性能提升。
    • TCP数据传输的性能提升。
    • TCP四次挥手的性能提升。

    二、TCP三次握手的性能提升。

    调整SYN报文的重传次数。

    //控制SYN重传次数,默认是5次
    tcp_syn_retries;

    一般第一次握手的SYN发出后没有回复,发起连接方会再次发送SYN,这样重复五次。
    总耗时是 1+2+4+8+16+32=63 秒,大约 1 分钟左右。
    当在网络情况比较好的情况下(内网通信),适当减少重传次数,今早将问题暴露给应用层。

    调整SYN半连接队列的长度。
    想要增大半连接队列,不能单独的增大tcp_max_syn_backlog,还要同时增大somaxconn和backlog(也就是增大accept队列)。
    同时可以开启syncookies

    调整accept全连接队列的长度。
    accept 队列的长度取决于 somaxconn 和 backlog 之间的最小值,也就是 min(somaxconn, backlog),其中:

    • somaxconn 是 Linux 内核的参数,默认值是 128,可以通过 net.core.somaxconn 来设置其值;
    • backlog 是 listen(int sockfd, int backlog) 函数中的 backlog 大小;

    调整SYN+ACK的重传次数。

    //控制SYN_ACK重传次数,默认是5次
    tcp_synack_retries

    绕过三次握手。
    TCP Fast Open,需要客户端和服务端同时开启才可以。除了第一次连接后续连接服务端可以再验证cookie后直接发送数据,从而减少一次握手时间。
    在这里插入图片描述

    在这里插入图片描述

    三、四次挥手性能提升

    关闭连接的方式有两种。

    • 异常退出,发送RST。
    • 正常退出,发送FIN。

    close()函数和shutdown()函数的区别?

    • close():在多线程中会对socket套接字的引用计数,当引用为0时会进行彻底释放,对于读端有新到的数据返回异常,写端将缓冲区数据发送给对端,并发送FIN报文,接下来如果有写操作也会异常。
    • shutdown():可以选择性只关闭读端**SHUT_RD(0)或者写端SHUT_WD(1)或者读写SHUT_RDWR(2)**都关闭。
      在这里插入图片描述

    四、数据传输的优化

    在这里插入图片描述
    以上内用和图片参考小林coding

    就是这事,散会!

  • 相关阅读:
    Go语言基于Iris+Xorm后台管理系统源码
    UNet++: A Nested U-Net Architecturefor Medical Image Segmentation
    docker 容器导出导入及相关问题解决
    Fiddler的安装和使用
    Leetcode_203.移除链表元素—C语言
    java包的介绍
    五秒输出和灯的亮灭
    IvorySQL3.0:基于PG16.0最新内核,实现兼容Oracle数据库再升级
    threejs texture旋转后,看不到了
    图的存储 —— 邻接矩阵
  • 原文地址:https://blog.csdn.net/peng_shakalaka/article/details/127826683