gpt4 book ai didi

tcp - Netty中net.inet.tcp.recvspace、SO_RCVBUF、Direct ByteBuf和ByteBufAllocator的关系

转载 作者:可可西里 更新时间:2023-11-01 02:52:00 27 4
gpt4 key购买 nike

谁能快速解释一下 Netty/NIO 如何从操作系统消耗 TCP 缓冲区?

我认为 TCP 滑动窗口 ACK 由操作系统 TCP 堆栈(recvspace)管理,并在每个数据包(MTU 大小)之后发回,直到 recvspace 已满。

那么在NIO selector触发receive事件后,NIO(direct buf模式)创建一个direct buffer指向同一个内存区域,并标记为已读?或者它是否从 recvspace 复制到另一个缓冲区?

如果是这种情况,那么每个应用程序的 SO_RCVBUF 是什么?它是否相关?

我的目标是仅在完全消耗缓冲区后才从下一个缓冲区读取(并因此发送新的 ACK 以读取更多内容)。

最佳答案

I reckon the TCP sliding window ACKs are managed by OS TCP stack (recvspace) and are sent back after each packet (MTU size) till the recvspace is full.

正确。这发生在内核中的套接字接收缓冲区。

Then after NIO selector triggers a receive event, NIO (in direct buf mode) creates a direct buffer

不一定。我看不出它是直接缓冲区的原因。

pointing to the same memory area

没有。在应用空间。

and marks it as read?

没有。

Or does it copy from recvspace into another buffer?

正确。它通过调用 ReadableByteChannel.read() 进行读取,最终调用 recv(),后者将数据从套接字接收缓冲区复制到应用程序内存中。

If this is the case, then what's each application's SO_RCVBUF? Is it relevant at all?

就是上面提到的第一件事。

关于tcp - Netty中net.inet.tcp.recvspace、SO_RCVBUF、Direct ByteBuf和ByteBufAllocator的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com