TCP粘包问题与Nagle算法的辨析

        TCP提供的是流式数据传输,而粘包问题是流式数据传输带来的必然问题。与UDP接收端收到的是数据报不同,TCP端收到的是数据流,应用层的报文在以流的形式传输时,每一个报文的报头紧接着上一个报文的报文尾部,这就是所谓的“粘包”问题。这其实在网络编程中是经常遇到的问题,解决办法也很简单,通常在每个应用报文前加上一个指明报文长度的字段。

        Nagle算法是TCP协议提供的一种选项,具体做法如下:当有很多小报文时,TCP并不急于将小报文发送出处,而是进行缓存,累积成一个大报文后再统一发送,这可以减少网络拥塞和减少丢包。一般而言TCP是默认打开的Nagle算法的,但有些时候我们需要关闭这个算法,比如在某些实时性比较强而每次传输的报文又比较小的情况,例如TeamViewer远程桌面操作系统。每一次鼠标的移动最终会以一个很小的TCP报文发送给远端,如果使用Nagle算法,累积到一个大报文再发送,势必会导致严重的延迟和鼠标的“瞬移”。

         网上很多介绍粘包的博客中都提到了Nagle算法,但在我看来二者没有必然联系。粘包是TCP流式数据这一性质带来的必然问题,而Nagle算法是TCP协议的一个可以提高网络效率的选项。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值