ITPub博客

首页 > Linux操作系统 > Linux操作系统 > TCP/IP数据包发送思考

TCP/IP数据包发送思考

原创 Linux操作系统 作者:HaFoLuoKe 时间:2013-05-02 15:46:02 0 删除 编辑
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博客 ” ,链接:https://blog.itpub.net/26899445/viewspace-759632/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: nagle算法总结
请登录后发表评论 登录
全部评论

注册时间:2013-03-12

  • 博文量
    31
  • 访问量
    51172