我使用捕获的WireShark连接。
你可以看到三人握手(1-3)和四人握手(5-8):

但是,从框架列表来看,我有一个关于TCP的问题。
您知道TCP应该使用ACK签名来获取响应,无论是ack用于syn,还是ack用于数据发送。
您可以看到第4rd帧,192.168.187.1将消息发送给192.168.187.129 帕斯卡角。
192.168.187.1还没有得到一个ACK,它把FIN包发送给192.168.187.129,为什么?发布于 2019-09-03 09:34:01
一个控制位(finis)占据一个序列号,这意味着发送者将不再发送数据或控制占据序列空间。
如果发送者没有更多的数据要发送,它会发送一个设置其FIN标志的数据包。如果接收方没有接收到数据,它将向发送方发送一个重复的ACK。
因此,发送方等待一段时间,如果在此时间内没有收到对FIN或数据的确认,或者如果收到重复的ACK,它将重新发送数据包。
ACK控制标志;正如RFC 793所说:确认号: 32位,如果设置了ACK控制位,则该字段包含段的发送方期望接收的下一个序列号的值。一旦建立了连接,就总是发送连接。
编辑:因此,在未建立连接之前,可以不使用ACK发送数据包。
例如,当连接的一方发送SYN数据包而不接收任何确认时;在这种情况下,它可以发送没有ACK的FIN数据包,因为没有什么可以确认它。
3.5 793:3.5。关闭连接还指出:
关闭的用户可以继续接收,直到他被告知对方也已经关闭。
发送ACK将告诉发送者希望接收哪个序列号,并防止由于ACK丢失而发生的额外重传。
编辑基于@ 's的评论。
发布于 2019-09-03 09:48:54
但是192.168.187.1没有得到ACK,它把鳍包送到192.168.187.129,为什么?
显然,192.168.187.1已经发送完并正在关闭套接字。这是完全正常的。
在5rd包中,它能直接发送鱼鳍包吗?为什么需要FIN,ACK?为什么不能发送鱼鳍?
FIN和ACK结合在一起,这也是完全正常的。这些标志是在位字段中发送的,因此它们可以组合在一起,以避免在每次状态更改时发送额外的段。
https://networkengineering.stackexchange.com/questions/61253
复制相似问题