网络性能调优

建立连接

为了保证可靠连接,tcp 建立连接需要“三次握手”,这三次握手对 tcp 的性能有至关重要的影响。
如何缩小这三次握手给性能带来的影响是网络性能调优的一个重要关注点。

三次握手

  • 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。这个阶段可调节的参数有:
    • net.ipv4.tcp_syn_retries: syn报文的重传次数.(至于重传机制,暂时还没搞清楚)
    • net.ipv4.tcp_fastopen: 开启这个选项可以使 tcp 在第一个 SYN 包中就开始传送数据.(关于这个选项还需要进一步研究:是否需要对端也开启此选项)
  • 服务器端收到 SYN 报文,进入SYN_RECV状态,回应一个 SYN(SEQ=y)ACK(ACK=x+1) 报文。这个阶段可调节的参数有:
    • net.ipv4.tcp_max_syn_backlog: 服务器中 syn 队列的长度.当 syncookies 使能时,此时并不会有一个合法的最大值, 因此这个值会被忽略。 详见man listen
    • sysctl -w net.ipv4.tcp_syncookies=1 , 打开syncookie,在syn backlog队列不足的时候,提供一种机制临时将syn链接换出
    • net.ipv4.tcp_synack_retries: synack报文的重传次数.(同样地,还未搞清楚重传机制)
    • net.core.somaxconn: 这个参数限制了listen()函数的syn队列大小,默认值为128,需适当提高这个值。
  • 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
    继续阅读“网络性能调优”