linux tcp cork,linux – 在这个用例中,TCP_CORK和TCP_NODELAY之间有什么显着的区别吗?...

你有两个问题:

>这个用例在TCP_CORK和TCP_NODELAY之间有什么区别吗?

>必须有一些原因,他们觉得不够,这导致他们引入一个新的/专有的TCP_CORK标志.有人可以解释这个原因吗

首先看看这个Stack Overflow Question中的答案,因为在这个问题中是相关的,因为这个问题一般都是描述两者之间的区别,而不参考你的使用.

> TCP_NODELAY ON表示在您获得的时间内发送数据(部分帧),无论您是否有足够的帧用于完整的网络数据包.

> TCP_NODELAY OFF表示Nagles Algoritm,这意味着当数据大于MSS时发送数据,或者在发送较小的数据之前等待接收确认.

> TCP_CORK ON表示不要发送任何小于MSS的数据(部分帧),直到应用程序显示为止或直到200ms.

> TCP_CORK OFF表示现在发送所有数据(部分帧).

这意味着在第一个示例中给定的用例中,没有部分帧发送到最后,但在第二个示例中,将发送具有接收确认的部分帧.

在第一个例子中也是最后发送,Nagle的算法仍然适用于解除锁定后的部分帧,在第二个例子中,它不是.

短版本是TCP_NODELAY发送不会在发送之前累积逻辑数据包作为网络数据包,Nagle的算法根据算法,TCP_CORK根据应用设置它.

这样做的副作用是Nagle的算法将在空闲连接上发送部分帧,TCP_CORK不会.

另外TCP_CORK在2.2中被引入了Linux内核(具体是2.1.127参见here),但直到2.5.71与TCP_NODELAY是互斥的.例如,2.4内核可以使用一个或另一个内核,但在2.6中,您可以组合两者,并且TCP_CORK在应用时将优先.

关于你的第二个问题

引用Linus Torvalds

Now, TCP_CORK is basically me telling David Miller that I refuse to play

games to have good packet size distribution, and that I wanted a way for

the application to just tell the OS: I want big packets, please wait until

you get enough data from me that you can make big packets.

Basically, TCP_CORK is a kind of “anti-nagle” flag. It’s the reverse of

“no-nagle”.

Linus的另一个报导是关于TCP_CORK的使用情况如下

Basically, TCP_CORK is useful whenever the server knows the patterns of

its bulk transfers. Which is just about 100% of the time with any kind of

file serving.

有关更多的引用,请参阅Sendfile邮件列表讨论的链接.

总之,除了TCP_MAXSEG和MSGMORE之外,当调用writev时,TCP_CORK是允许用户空间中的应用程序对数据包大小分布进行更细粒度控制的另一个工具.

参考并进一步阅读

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值