首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关闭TCP连接时不必要的ACK

关闭TCP连接时不必要的ACK
EN

Network Engineering用户
提问于 2016-07-07 13:29:55
回答 2查看 1.3K关注 0票数 4

我正在学习关闭TCP连接的过程,在我遇到的许多来源中,这个过程是不同的。在思科证书官方指南(100-105)中,这一过程如下:

代码语言:javascript
运行
复制
1) ACK, FIN ---->
2)          <---- ACK
3)          <---- ACK, FIN
4) ACK      ---->

我只是不明白ACK在3中的用途,因为在2中已经有了确认。此外,在较早的思科研究材料中,这一过程也没有进行。

最重要的是,我有一个WireShark捕获,这让我更加困惑:

基本上一样,38号包中的额外ACK是用来做什么的?确认已经在第37号发送了。而且两者都有相同的Ack号。

有人能给我一点洞察力吗?如果在某些情况下所有这些都是可能的,或者哪一个是正确的?

EN

回答 2

Network Engineering用户

回答已采纳

发布于 2016-07-07 13:37:10

确认号有效时设置ACK标志。因此,它被设置在TCP流中的所有数据包上,除了初始的SYN数据包,所以当您发送FINs时,所有数据包都将是ACK。你不需要担心。

确认不是一次性的事情,如果没有收到更多的消息(在发送ACK的末尾),随后的数据包都将确认相同的数据。这在两个方向都有作用。

票数 3
EN

Network Engineering用户

发布于 2016-07-07 16:11:00

TCP关闭序列实际上是:

代码语言:javascript
运行
复制
1)      FIN ---->
2)          <---- ACK
3)          <---- FIN
4)      ACK ---->

就像在TCP启动序列,有四个事件发生一样。一方表示已完成与鳍一起发送数据,另一方确认接收了鳍。然后,当另一方发送数据时(通常是在后面,但不一定是这样),它就会发送自己的鳍,而第一方承认这一点。

通常,#2和#3合并在同一个数据包中。

而且,通常1号中的鳍也伴随着ACK来确认从另一边接收到的最后一次数据。

在您的数据包捕获中也可以看到这一点:

  • 数据包38是最初的鳍。
  • 数据包39是响应的ACK和另一方的鳍
  • 第40包是最后的ACK。

注意,数据包39负责上述步骤2和步骤3。

奇怪的是你捕获的是重复的ACK。注意,数据包37和分组38中的ACK正在确认在使用acknowledgement# 22951之前发送的数据。只看那5包,我不知道为什么会这样。我确实看到了37号包到38号包之间的~5s延迟,我想知道这是否有什么关系。

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

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

复制
相关文章

相似问题

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