TCP 的 ACK 可以延时回复吗

2022-04-13 20:13:25 +08:00
 iqoo

有一个 C/S 服务,客户端请求后,服务端会短时间响应大量零碎的数据包,导致客户端回复很多个 ACK 。虽然 ACK 包不大,但多少也会消耗带宽。有没有办法通过设置 sock 参数延迟 ACK 的响应,等一段时间才响应一个 ACK ?

2063 次点击
所在节点    程序员
11 条回复
Zzdex
2022-04-13 20:17:32 +08:00
扩大 MSS , 然后依靠 delay ack ?
jousca
2022-04-13 20:51:00 +08:00
挂个包过滤硬件防火墙在前面~~~
crab
2022-04-13 21:41:12 +08:00
Nagle ?
pagxir
2022-04-13 22:32:25 +08:00
那点带宽微不足道。你说的零碎数据包剧本上不存在,除非 rtt 很小。
pagxir
2022-04-13 22:35:36 +08:00
比如一个 rtt=20ms ,那么最坏情况下也就 50 个 ack 报文 /s ,也就 50x60=3kB/s
rabbbit
2022-04-13 22:44:54 +08:00
TCP 不是靠 ACK 确定是否发送成功,延迟了不会导致后面的被重发吗?
lcdtyph
2022-04-13 22:47:28 +08:00
如果你用的是 rhel 的话,可以修改 /proc/sys/net/ipv4/tcp_delack_min
否则的话只能去改内核重新编译了,https://elixir.bootlin.com/linux/latest/source/include/net/tcp.h#L138
单位是 10ms
hasdream
2022-04-14 09:59:06 +08:00
网卡 MTU 一般 为 1500byte(如果超过这个值就会分段),ack 就是确认每个分段是否收到,ack 延后可能会导致 数据重发
lysS
2022-04-14 10:13:42 +08:00
楼主搞错了,一般单向通信情景,比如访问一个网页,S 端发送的数据主要是数据本身,C 端发送的数据主要就是 ACK 包。所以 ack 主要是 C 端发送的
lysS
2022-04-14 10:14:46 +08:00
@pagxir ack 包数量还是挺多的,抓包显示,一般占数据包的 1/3
nmap
2022-04-14 10:19:14 +08:00
😎

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/846801

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX