即使你的工作也许不需要对TCP了如指掌,也不需要去了解具体的TCP/IP实例。你也应该懂一些基本的TCP知识,本文会告诉你为什么。
我以前在Recurse Center工作的时候,曾经用Python写过一个TCP栈(还写了一篇博文用Python实现TCP栈可以学到什么)。这是很有意思的一课,也基本上是我对TCP的所有了解了。
一年之后,工作上遇到了困难。有同事在Slack上问到:“嘿,我向NSQ推消息总是会有40ms的延迟,不知道为什么。”这个问题我思来想去,过了一个周,还是毫无头绪。
这里解释一下: NSQ是一个用来发消息的队列。发送方式是向localhost发出一个HTTP请求,这个动作不可能花费40ms,一定是出了错。但是NSQ不具备很高的CPU优先级,也没有占用大量内存,所以问题不是出在垃圾回收那边。
后来,我想起来一周之前读过的一篇文章——我们是如何在每一个POST请求上省出200ms的(In search of performance - how we shaved 200ms off every POST request)。这篇文章讨论了一开始每一个POST都会多花200ms的原因,多少有些诡异。下面是这篇文章中的内容。
ACK延迟和TCP_NODELAY
Ruby的Bet::HTTP将POST请求分成两个TCP包——一个header,一个body.curl,相比之下,将它们组合成一个倒是更加合适。不过更糟的是,Net:HTTP没有给它打开的TCP socket设置TCP_NODELAY,所以发送第一个包之后,要等到确认才会发送第二个。归根结底,这是Nagle算法导致的。 连接的另一端,HAProxy要选择用何种方式确认这两个包。在1.4.18(正式我们使用的版本),它使用的是TCP延时确认,延时确认在Nagle算法中表现很糟糕,导致请求在这个地方暂停了,直至超时。
我来总结一下这段话:
TCP是将你要发送的数据打包的算法
他们的HTTP需要用两个小包发送POST请求
整个过程就像下面这样:
application:嗨!给你第一个包 HAProxy:嘘……我们要等第二个包 HAProxy:对了,我们要给他个确认,不过没什么大不了的,等会再说 application:嘘……我们等到第一个包的确认再发第二个,也许网络堵车了,再等一会 HAProxy:烦死了,我们发第一个包的确认吧 application:收到确认,发第二个包!!!! HAProxy:搞定!
这段时间内,HAProxy和application都在消极地等待,直到超过200ms。application等待是因为Nagle算法,HAProxy等待是因为延迟ACK。
据我所知,延迟的ACK在所有Linux系统都是默认打开的。所以这不是特例,只要你发送的数据多于一个TCP包,你也会碰上这种事。
终于搞定了问题
读了这篇文章之后,觉得没什么了不起的。但是在我们的神秘40ms挣扎了许久,我想起来这篇文章。
我想:这可能是我的问题吗?可能吗??可能吗?!我给团队发了一封邮件说“可能是我疯了,不过,有可能是TCP的问题。”
于是我将TCP_NODELAY打开,然后——BOOM!
所有的40ms延迟统统消失了,这个世界完美了。我真是个天才!
ACK延迟应该完全关闭吗
提一个小插曲,我在HN上看到了这条评论:
真正的问题处在ACK延迟上。200ms延时设定是糟糕的主意,1985年在伯克利搞BSD的那帮人,根本不理解这个问题。 ACK延迟是赌应用层一定会在200ms之内收到回复。虽然几乎每次都输,但是ACK延迟依然在用。
他在评论中讨论了ACK是成本很低的,这中做法所导致的问题比它解决的问题要严重的多。
如果你不懂TCP,就搞不定这个问题
以前我总认为TCP是相当底层的东西,我永远不需要去了解它。虽然差不多是这样,但是实际生活中,你依然可能遇见和TCP算法相关的Bug,这时候懂一些TCP的知识就至关重要了。(本文也可以引申为,系统调用,操作系统这些都很重要,这个道理适用于很多东西。)
ACK延时/TCP_NODELAY很糟糕——它可能对任何写HTTP请求代码的人造成影响。但是你不必成为系统编程方面的天才,懂一点TCP就帮我搞定了这个问题,也让我意识到,出现这个问题我也有责任。我也在用strace,strace万岁!
好文章,需要你的鼓励
联想在CES展会上发布了AI助手Qira,该系统可跨联想和摩托罗拉设备生态运行,包括智能手机、可穿戴设备、PC和平板等。Qira不仅是聊天机器人,还能执行实际任务,如设备间文件传输。该系统具备情境感知能力,通过融合知识库创建个性化体验。联想强调隐私保护,优先本地处理数据。Qira将于2026年第一季度首先在联想设备上推出。摩托罗拉还展示了搭载Qira的AI可穿戴设备Project Maxwell概念产品。
剑桥大学研究团队首次系统探索AI在多轮对话中的信心判断问题。研究发现当前AI系统在评估自己答案可靠性方面存在严重缺陷,容易被对话长度而非信息质量误导。团队提出P(SUFFICIENT)等新方法,但整体问题仍待解决。该研究为AI在医疗、法律等关键领域的安全应用提供重要指导,强调了开发更可信AI系统的紧迫性。
在CES 2026主题演讲中,麦肯锡全球管理合伙人鲍勃·斯特恩费尔斯和通用催化剂CEO赫曼特·塔内贾表示,AI正以前所未有的速度重塑技术领域。塔内贾指出,Anthropic估值在一年内从600亿美元飙升至数千亿美元,预计将出现新一波万亿美元公司。然而,非技术企业对AI全面采用仍持观望态度。两位高管强调,人们必须认识到技能培训和再培训将是终身事业,传统的22年学习40年工作模式已被打破。
威斯康星大学研究团队开发出Prithvi-CAFE洪水监测系统,通过"双视觉协作"机制解决了AI地理基础模型在洪水识别上的局限性。该系统巧妙融合全局理解和局部细节能力,在国际标准数据集上创造最佳成绩,参数效率提升93%,为全球洪水预警和防灾减灾提供了更准确可靠的技术方案。