为什么我的 ACK 包会携带有数据?

185 天前
 lysShub

是 tcp 的什么特殊功能吗?

1533 次点击
所在节点    程序员
9 条回复
momo24672
185 天前
Delay ACK
albert990624
185 天前
TCP 的延迟确认机制
lysShub
185 天前
@albert990624
@momo24672 delay ack 为啥会在 ack 包中携带数据啊?或者说携带有数据的包应该把 PSH 标志也设置上
leonshaw
185 天前
TCP 除了第一个 SYN 包以外都有 ACK
feedcode
185 天前
vituralfuture
185 天前
图片打不开了,不过这种情况是可以的,它叫做 ACK 捎带,不是 ACK 包捎带了数据,而是数据捎带了 ACK

TCP 协议是全双工的,允许双方互相收发数据,当接受方有数据需要发送时,它既需要发出 ACK 向发送方确认之前收到的包已经到达,又需要把它想要发送的数据发送给发送方,这时没必要分开进行,只需要数据捎带 ACK 即可,这时发送的包就有两重含义
1. 接收方想要发送的数据
2. 接收方对收到的包的确认
ben666
185 天前
ACK 是可以带数据的,只是 socket 编程接口不提供这种特性,如果是自己写的协议栈就可以这样。
可以理解为丢失了一个纯 ACK:

SYN ->
<-SYN+ACK
[->ACK] 丢失了
->ACK + DATA


开源网络测试仪 dperf https://github.com/baidu/dperf 是自研的 TCP 协议栈,就是在三部握手的 ACK 上带数据的。
lysShub
184 天前
@vituralfuture https://img2.imgtp.com/2024/03/20/ekywTkfV.png

我知道你说的是 PSH|ACK 这种 flag ,但是我这个只有 ACK
lysShub
184 天前
是我理解错了,我一直误以为 PSH 标识表示这个 segment 携带有数据。

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

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

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

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

© 2021 V2EX