首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP服务器发送[ACK],然后是[PSH,ACK]

TCP服务器发送[ACK],然后是[PSH,ACK]
EN

Stack Overflow用户
提问于 2020-09-28 01:52:37
回答 1查看 14.5K关注 0票数 5

我正在开发一台高性能的TCP服务器,当我使用TCP客户端泵出高流量时,我看到服务器的处理速度不够快。经过仔细检查,我在TCP服务器上看到了“增量时间”中的尖峰。而且,我看到服务器发送一个ACK,0.8秒后发送PSH,ACK给相同的seqno。我在pcap中多次看到这个模式。专家可以评论为什么服务器发送一个ACK,然后是一个PSH,ACK之间有一个延迟?

TCP服务器PCAP

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-09 23:36:06

简化ACKPSH的含义

  • ACK将始终存在,它只是简单地通知客户机服务器最后接收的字节是什么。
  • PSH告诉客户机/服务器将字节推送到应用层(字节形成完整的消息)。

您习惯的通常情况大致如下:

  1. 操作系统有一个缓冲区,用于存储来自客户端的接收数据。
  2. 一旦接收到数据包,就将其添加到缓冲区中。
  3. 应用程序调用套接字接收方法,并将数据从缓冲区中取出。
  4. 应用程序将数据写回套接字(响应)。
  5. 操作系统发送带有标志PSH,ACK的数据包。

现在,想象一下这些情景:

  • 第4步不会发生(应用程序不会回写任何数据,也不会花太长时间编写数据) => OS只使用ACK (数据包中没有任何数据)来确认接收,如果应用程序稍后决定发送什么,它将与PSH,ACK一起发送。
  • 服务器发送的消息/数据太大,无法容纳一个数据包:
代码语言:javascript
复制
- the first packets will not have `PSH` flag, and will only have the `ACK` flag
- the the last packet will have the flags `PSH,ACK`, to inform the end of the message.
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64094996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档