nginx性能优化之tcp调优

天翼云开发者社区
• 阅读 1

本文分享自天翼云开发者社区《nginx性能优化之tcp调优》.作者:郑****颖

nginx在tcp连接上有2个如下配置:tcp_nodelay on , tcp_nopush off。这两个配置在tcp连接中的具体原理如何呢?

在网络拥塞控制领域,我们知道有一个非常有名的算法叫做Nagle算法(Nagle algorithm),这是使用它的发明人John Nagle的名字来命名的,John Nagle在1984年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题(RFC 896),该问题的具体描述是:如果我们的应用程序一次产生1个字节的数据,而这个1个字节数据又以网络数据包的形式发送到远端服务器,那么就很容易导致网络由于太多的数据包而过载。比如,当用户使用Telnet连接到远程服务器时,每一次击键操作就会产生1个字节数据,进而发送出去一个数据包,所以,在典型情况下,传送一个只拥有1个字节有效数据的数据包,却要发费40个字节长包头(即ip头20字节+tcp头20字节)的额外开销,这种有效载荷(payload)利用率极其低下的情况被统称之为愚蠢窗口症候群(Silly Window Syndrome)。可以看到,这种情况对于轻负载的网络来说,可能还可以接受,但是对于重负载的网络而言,就极有可能承载不了而轻易的发生拥塞瘫痪。

TCP_NODELAY选项:禁用nagle算法,发送端满足两个条件马上发送:1. 报文累计到MSS或者2.收到上一个报文的ACK。 接收端的TCP delayed acknoledgement算法同样的方式起作用延迟ACK的发送,使得协议栈尽可能的合并多个ACK。默认的时间为40ms;nginx上这个选项开启之后则禁用了发送端的Nagle 算法。 tcp中nagle算法是默认开启的, 但是在网络应用中,并非使用所有的使用场景,nginx可以在需要的情况下,通过该配置关闭该行为。

nagle算法的伪代码如下:

if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

TCP_CORK选项: 与TCP_NODELAY相关,该选项可以认为是nagle算法的进一步增强,阻塞数据包的发送,直接手动取消TCP_CORK选项或者报文达到MSS,TCP才会将报文发送出去。即使在收到ACK的情况下,如果发送的数据不足一个MSS,则依然不会发送该报文。该选项适用于大量数据的通信性能。因为sendfile打开时,http头部和body肯定可以一起发送。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
tcp 连接和关闭 网络 拥塞控制 流量控制
这个之前也没有太多接触,先贴几篇博客吧。http://www.cnblogs.com/sunxucool/p/3449068.html(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fsunxucool%2Fp%2F3449068.html)h
Easter79 Easter79
4年前
TCP协议与Wireshark实验
目录TCP协议TCP报文段结构字段解析标志字段捕获从计算机到远程服务器的批量TCP传输跟踪包的初步观察TCPBasicsTCP拥塞控制参考资料TCP协议TCP协议给使用者提供了两种服务,分别是面向连接的服务
Stella981 Stella981
4年前
Spring RabbitMQ Channel理解
概述在AMQP协议中,有channel的概念,在RabbitMq中,channel表示逻辑连接或者叫虚拟连接,是棣属于TCP连接的。一个TCP连接里可以创建多个channel,在RabbitMQ里,消息的发送和接收都是基于channel的。!collection和channel的关系(htt
Wesley13 Wesley13
4年前
UDT源码剖析(一)之总览
介绍随着网络带宽延时产品的增加,常用的TCP协议开始变得低效。这是因为它的AIMD算法彻底的减少了拥塞窗口,但不能快速的恢复可用带宽。理论上的流量分析表明TCP在BDP增高的情况下比较容易受到包损失攻击。另外,继承自TCP拥塞控制的不公平的RTT也成为在分布式数据密集程序中的严重问题。拥有不同RTT的并发TCP流将不公平地分享带宽。尽管在小的BDP网
Stella981 Stella981
4年前
Centos 7 使用最新内核并使用BBR 加速
我们知道,在国外的一些VPS上,网络丢包一直是造成服务器访问缓慢的主要因素,一旦丢包,就需要再次发包,而再次发的包也存在丢包情况,所以丢包和网络情况的好坏几乎是指数相关的关系。而谷歌为我们带来了干货新的TCP拥塞控制算法BBR(BottleneckBandwidthandRTT),已经在linux4.9的内核中集成了该算法,windo
Stella981 Stella981
4年前
Android 中的Socket通讯机制
Android中的网络通讯无非Http和Socket,Socket有两种形式——TCP和UDP。TCP与UDP区别TCP传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到
Stella981 Stella981
4年前
Python基础系列讲解——TCP协议的socket编程
前言我们知道TCP协议(TransmissionControlProtocol,传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像HTTP/HTTPS等网络服务都采用TCP协议通讯。那么网络通讯方面都会涉及到socket编程,当然也包括TCP协议。Python作为一门适应于快速开发的工具,在它浩瀚的第三方库中也一定包括了s
Easter79 Easter79
4年前
TCP三次握手与Linux的TCP内核参数优化
感谢各位技术大佬的资料分享,这里我把我理解的内容做一个整理一:TCP的三次握手1、TCP简述  TCP是一个面向连接的协议,在连接双方发送数据之前,首先需要建立一条连接。TCP建立连接可以简单称为:三次握手(说白了就是建立一个TCP连接的时候,客户端
Wesley13 Wesley13
4年前
34.TCP取样器
阅读文本大概需要3分钟。1、TCP取样器的作用   TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据。2、TCP取样器详解!(https://oscimg.oschina.net/oscnet/32a9b19ba1db00f321d22a0f33bcfb68a0d.png)TCPClien
浅说TCP状态机制
TCP(TransmissionControlProtocol)是一种面向连接的、可靠的传输协议,常用于互联网中应用层的数据传输。在协议栈中,TCP处于传输层,负责数据的分段、传输和重组等工作,同时采用状态机制来维护连接的状态。下面我们就来详细介绍一下TCP协议栈链接跟踪的工作原理。
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
976
粉丝
16
获赞
40