• 请不要在回答技术问题时复制粘贴 AI 生成的内容
iqoo
V2EX  ›  程序员

TCP 的 ACK 可以延时回复吗

  •  
  •   iqoo · Apr 13, 2022 · 3036 views
    This topic created in 1665 days ago, the information mentioned may be changed or developed.

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

    11 replies  •  2022-04-14 10:19:14 +08:00
    Zzdex
    Zzdex
    Apr 13, 2022❤️1
    1
    扩大 MSS , 然后依靠 delay ack ?
    jousca
    jousca
    Apr 13, 2022
    2
    挂个包过滤硬件防火墙在前面~~~
    crab
    crab
    Apr 13, 2022
    3
    Nagle ?
    pagxir
    pagxir
    Apr 13, 2022 via Android
    4
    那点带宽微不足道。你说的零碎数据包剧本上不存在,除非 rtt 很小。
    pagxir
    pagxir
    Apr 13, 2022 via Android
    5
    比如一个 rtt=20ms ,那么最坏情况下也就 50 个 ack 报文 /s ,也就 50x60=3kB/s
    rabbbit
    rabbbit
    Apr 13, 2022
    6
    TCP 不是靠 ACK 确定是否发送成功,延迟了不会导致后面的被重发吗?
    lcdtyph
    lcdtyph
    Apr 13, 2022
    7
    如果你用的是 rhel 的话,可以修改 /proc/sys/net/ipv4/tcp_delack_min
    否则的话只能去改内核重新编译了,https://elixir.bootlin.com/linux/latest/source/include/net/tcp.h#L138
    单位是 10ms
    zerofiny
    zerofiny
    Apr 14, 2022
    8
    网卡 MTU 一般 为 1500byte(如果超过这个值就会分段),ack 就是确认每个分段是否收到,ack 延后可能会导致 数据重发
    lysS
    lysS
    Apr 14, 2022
    9
    楼主搞错了,一般单向通信情景,比如访问一个网页,S 端发送的数据主要是数据本身,C 端发送的数据主要就是 ACK 包。所以 ack 主要是 C 端发送的
    lysS
    lysS
    Apr 14, 2022
    10
    @pagxir ack 包数量还是挺多的,抓包显示,一般占数据包的 1/3
    nmap
    nmap
    Apr 14, 2022
    11
    😎
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1930 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    ♥ Do have faith in what you're doing.