TCP/IP数据包发送思考

TCP_NODELAY标志的作用是关闭 Nagle算法,其核心为发送延迟(RFC896)。在TCP/IP包的发送过程中,为了避免频繁发送小包(因为频发发送小包会造成的包头等资源浪费),所以采用了缓存,当数据积累到“ MSS: Maximum Segment Size 最大分段大小”后再发送。
MSS的大小一般为1460B,。当数据包大小==MSS时成为大包,其余为小包。根据Nalge算法,如果单纯的合并数据的话,那么发送的数据除了最后一个包都是大包,而最后一个包一般会是个小包,除非发送的数据恰好是MSS的整数倍。
这样虽然解决了过多小包的问题,但是这样也会产生新的问题,首先如果最后一个包是小包,那么小包在满足什么条件时会发送。
linux采用 TCP_NAGLE_CORK 来解决这个问题,该信号表示塞子有效并且还有数据过来 ( MSG_MORE),比如我在应用层一次写入1000B,那么假设当系统中只读取了500B的时候一定是MSG_MORE的状态。这样,只有当MSG_MORE的状态时我们才启用Nalge延迟发送的算法,否则就立即发送(当其他条件满足时)。
另外,比如FIN标记这样的包也应该被立刻发送,其原因不言自明。
在Nagle算法中还有一个需要注意的地方,就是由于Nagle算法是为看了

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26899445/viewspace-759632/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26899445/viewspace-759632/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值