首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么TCP客户端没有收到ACK响应,它发送FIN包?

为什么TCP客户端没有收到ACK响应,它发送FIN包?
EN

Network Engineering用户
提问于 2019-09-03 08:18:44
回答 2查看 3.5K关注 0票数 1

我使用捕获的WireShark连接。

你可以看到三人握手(1-3)和四人握手(5-8):

但是,从框架列表来看,我有一个关于TCP的问题。

您知道TCP应该使用ACK签名来获取响应,无论是ack用于syn,还是ack用于数据发送。

您可以看到第4rd帧,192.168.187.1将消息发送给192.168.187.129 帕斯卡角。

  1. 但是192.168.187.1还没有得到一个ACK,它把FIN包发送给192.168.187.129,为什么?
  2. 在5rd包中,它能直接发送鱼鳍包吗?为什么需要FIN,ACK?为什么不能发送鱼鳍?
EN

回答 2

Network Engineering用户

回答已采纳

发布于 2019-09-03 09:34:01

  1. RFC 793指出:

一个控制位(finis)占据一个序列号,这意味着发送者将不再发送数据或控制占据序列空间。

如果发送者没有更多的数据要发送,它会发送一个设置其FIN标志的数据包。如果接收方没有接收到数据,它将向发送方发送一个重复的ACK

因此,发送方等待一段时间,如果在此时间内没有收到对FIN或数据的确认,或者如果收到重复的ACK,它将重新发送数据包。

  1. 一旦建立了连接,总是会发送ACK控制标志;正如RFC 793所说:

确认号: 32位,如果设置了ACK控制位,则该字段包含段的发送方期望接收的下一个序列号的值。一旦建立了连接,就总是发送连接。

编辑:因此,在未建立连接之前,可以不使用ACK发送数据包。

例如,当连接的一方发送SYN数据包而不接收任何确认时;在这种情况下,它可以发送没有ACKFIN数据包,因为没有什么可以确认它。

3.5 793:3.5。关闭连接还指出:

关闭的用户可以继续接收,直到他被告知对方也已经关闭。

发送ACK将告诉发送者希望接收哪个序列号,并防止由于ACK丢失而发生的额外重传。

编辑基于@ 's的评论。

票数 4
EN

Network Engineering用户

发布于 2019-09-03 09:48:54

但是192.168.187.1没有得到ACK,它把鳍包送到192.168.187.129,为什么?

显然,192.168.187.1已经发送完并正在关闭套接字。这是完全正常的。

在5rd包中,它能直接发送鱼鳍包吗?为什么需要FIN,ACK?为什么不能发送鱼鳍?

FIN和ACK结合在一起,这也是完全正常的。这些标志是在位字段中发送的,因此它们可以组合在一起,以避免在每次状态更改时发送额外的段。

票数 2
EN
页面原文内容由Network Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://networkengineering.stackexchange.com/questions/61253

复制
相关文章

相似问题

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