Linux 增加TCP MTU是否值得?Dont Fragment标志如何工作

Linux 增加TCP MTU是否值得?Dont Fragment标志如何工作,linux,networking,tcp,Linux,Networking,Tcp,我有一个覆盖TCP的自定义协议,可以描述如下:- 客户端向服务器发送数据包a。服务器确认数据包A。 客户端发送一个数据包B 换句话说,在任何时间点,只有一个未确认的数据包。因此,要尽可能快地发送消息,需要考虑的因素有:- 包裹多久能到达目的地。这意味着碎片量最少 由TCP完成。如果一个数据包可以到达一个段而不是5个段,那么服务器响应它的速度就越快 服务器为该数据包所做的工作单位。目前,我并没有把重点放在这一点上,尽管最终我也会触及这一点 同时假设损失率可以忽略不计 Nagle已禁用 典型的数据包

我有一个覆盖TCP的自定义协议,可以描述如下:-

客户端向服务器发送数据包a。服务器确认数据包A。 客户端发送一个数据包B

换句话说,在任何时间点,只有一个未确认的数据包。因此,要尽可能快地发送消息,需要考虑的因素有:-

  • 包裹多久能到达目的地。这意味着碎片量最少 由TCP完成。如果一个数据包可以到达一个段而不是5个段,那么服务器响应它的速度就越快

  • 服务器为该数据包所做的工作单位。目前,我并没有把重点放在这一点上,尽管最终我也会触及这一点

  • 同时假设损失率可以忽略不计

  • Nagle已禁用

  • 典型的数据包大小从1KB到3KB不等

  • 带宽为1Gb/秒

  • 我在想,如果我将MTU配置为最大消息大小(3KB+头),这应该会影响我在一秒钟内可以发送的消息数量。我的问题是,改变MTU是否有任何负面后果。此应用程序在局域网内的托管环境中运行


    或者,如果我设置了“不分段”标志,它是否等同于上述更改?

    MSS=最大段大小=一个TCP数据包中发送的数据量

    减少MSS将降低性能,因为数据将被分割成更多TCP数据包

    增加MSS超过其正确值将导致链路层(以太网)出现碎片

    TCP已经尝试寻找(每个连接)不导致碎片的最大可能MSS。除非失败(不会),否则无需重写此值。应避免链路层碎片。它可以节省很少,而且很容易影响性能


    除非你知道自己在做什么,否则不要碰手机。它有它的价值是有充分理由的。

    首先,让我们澄清MTU和MSS之间的区别。这些属于堆栈的不同层(2和3)

    TCP/IP是一个非常不幸的分层蛋糕,两者都支持碎片化,但方式不同,并且在这个问题上它们不合作

    IP碎片是TCP不知道的。事实上,如果其中一个IP片段丢失,则整个序列将被声明为丢失。TCP的情况并非如此:如果属于同一TCP流的IP数据报之一丢失,并且它们被TCP分段,则只需要重新传输丢失的部分

    造成这种混乱的核心原因是路由器必须能够在两个具有不同MTU的物理网络之间进行阻抗匹配,而无需了解更高(TCP)协议

    现在,所有现代网络都支持“巨型帧”(您必须将NIC配置为能够发送巨型帧;所有现代NIC始终能够接收高达90xx字节的帧)

    与往常一样,随着MTU的增加

    • 除非您增加MSS,否则无效
    • 提高性能(带宽),并
    • 影响性能(第一个字节的零负载延迟)
    在某些应用程序中,例如Gigalinx实现og GigE vision,需要增加MTU。在高速网络上,1500字节MTU的开销是无法忍受的

    作为一名架构师,要问自己的是应用程序实际在做什么。如果存在“相关数据包大小”,即“在收到第一个3kB的数据之前,与其余数据无关”,并且您确实需要这一微小的性能优势,请增加MTU。在这样做之前,考虑将TCP完全丢弃,以支持更多的以太网友好协议,当然,不要自己实现它,而是选择类似于ZrOMQ的工作。
    第二个问题:不分段是一个IP设置。通常仅在路由器中有用,路由器应匹配不同MTU的网络。它的意思是“丢弃数据包,除非我可以将其中继到另一个网络”。如果有时出现这种情况,TCP将无法在该层上工作。它将尝试重新传输并一次又一次失败,最终断开连接,进一步的行为将取决于应用程序正在做什么。这是互联网上的典型情况,公共无线网络和家庭网络配置错误。你有时可以浏览facebook,但实际上不能在youtube上观看任何东西。这就是为什么。网络管理员永远不会知道原因。

    exthernet数据报的最大大小为1500字节。TCP数据包的最大大小是根据这一点设置的。您提到了“以太网友好协议”。您知道tcp的替代方案吗?它们对以太网友好吗?另外,您能解释一下“第一个字节的零负载延迟”吗?是的,有很多。ZeroMQ正在做更多以太网友好的事情。“零负载延迟”通常是通道的性能特征,即在系统完全未加载的情况下,在最佳情况下数据传输所需的时间。