• 0
  • 0
分享
  • TCP四次挥手及其相关问题——软件测试圈子
  • 饭团🍙 2022-11-10 13:27:18 字数 1309 阅读 1228 收藏 0

TCP四次挥手

1.png

第一次挥手:客户端发送一个FIN为1,序列号随机生成的报文给服务器(假设序列号为M),进入FIN_WAIT_1状态;

第二次挥手:服务器收到这个报文之后,发送一个ACK为1,acknowledge number=M+1的应答报文给客户端,进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据。

第三次挥手:服务器发送一个FIN为1,序列号随机生成的报文给客户端(假设序列号为N),进入LAST_ACK状态;

第四次挥手:客户端收到服务器的FIN报文后,进入TIME_WAIT状态;接着发送一个ACK为1,acknowledge number=N+1给服务器;服务器收到后,确认acknowledge number是否为N+1,变为CLOSED状态,不再向客户端发送数据。客户端等待2*MSL(报文段最长寿命)时间后,也进入CLOSED状态。完成四次挥手。

为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(大多数情况下)

应为服务器收到客户端的FIN报文时有可能还没有做好断开连接的准备(如还有部分数据没有发给客户端,还在继续发送),但需要先发送一个ACK报文告诉客户端我收到了断开连接的请求,等服务器准备好了,再发一个FIN报文给客户端,告诉客户端可以断开连接了。

如果第二次挥手时服务器的ACK报文没有送达客户端,会怎样?

由于客户端没有收到ACK报文,客户端会继续发送FIN报文给服务器

客户端等待2*MSL的意义是什么

因为客户端给服务器发送的ACK报文可能会丢失,TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果服务器没有收到ACK报文,就会重发FIN,如果客户端在2*MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止服务器没有收到ACK而不断重发FIN。

为什么是2*MSL

MSL(Maximum Segment Lifetime),指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,客户端都没有再次收到FIN,那么客户端推断ACK报文已经被成功接收,则结束TCP连接。

什么情况下四次挥手可以变为三次

服务器收到客户端的FIN报文时,已经准备好了断开连接(没有数据要发送了)+开启了捎带应答,就可以讲ACK报文和FIN报文合并发送,变为三次挥手

什么是捎带应答机制

当发送没有携带数据的 ACK,它的网络效率也是很低的,因为它也有 40 个字节的 IP 头 和 TCP 头,但却没有携带数据报文。

为了解决 ACK 传输效率低问题,所以就衍生出了 TCP 延迟确认。

TCP 延迟确认的策略:

当有响应数据要发送时,ACK 会随着响应数据一起立刻发送给对方

当没有响应数据要发送时,ACK 将会延迟一段时间,以等待是否有响应数据可以一起发送

如果在延迟等待发送 ACK 期间,对方的第二个数据报文又到达了,这时就会立刻发送 ACK

2.png


作者:今天也是敲代码的一天哦

原文链接:https://blog.csdn.net/weixin_54575205/article/details/127269159

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   对测试自动化的依赖性增加导致大量自动化软件测试工具的出现,使得很难确定哪些是最好的。为了帮助您完成自动化工作,我们根据自己和他人的经验创建了五大最佳自动化软件测试工具列表。  1. Selenium  Selenium可以说是web开发人员和测试人员中最受欢迎的自动化软件测试工具。它于2004年首次发布,从那时起它发生了很大变化。最新版本的Selenium包含几个组件,包括Selenium IDE和Selenium WebDriver。  Selenium IDE是一个用于Selenium测试的完整集成开发环境(IDE),主要用于创建快速错误复制脚本和脚本,以帮助进行自动化辅助探索性测试。...
            0 0 276
            分享
          •   北京时间12月12日早间消息,据报道,最近,在美国匿名网络论坛“Blind”上,社交网络巨头Meta的员工们通过各种评论,炮轰掌门人扎克伯格。  许多评论发表于Meta宣布解雇13%员工决定的日子,一些评论内容负面,当然也有一些对扎克伯格正面评价。  论坛一位用户将Meta这一次大规模裁员比喻为“饥饿游戏”,另外一位用户则称,扎克伯格面临一个很不确定的未来。  据报道,Blind属于美国面向职场人士的网络社区服务,来自不同企业的员工可以发帖,表达对于雇主的不满或意见。  根据论坛资料,用户如果想在Blind发帖,需要提供企业的工作邮箱、现任职务、公司名称等信息,这样论坛可以了解发帖人的职场...
            0 0 995
            分享
          •   当谈到Web端自动化测试时,首先想到的是什么?毋庸置疑是Selenium。毫不夸张地说,Selenium引领着界面测试自动化领域。使用过Selenium的人都了解,当一个元素嵌套在多层Frame中时,需从主页面一层一层切到元素所在的Frame,才能查找到该元素。而一般的录制工具在采集元素的定位信息时,只能采集到它的父级Frame,甚至采集不到Frame信息。如果让测试人员手动从源码中寻找所有父级Frame信息,可能他以后再也不想做界面自动化测试了。  假设元素只有自身的定位信息,如何准确找到该元素?笔者反复思考、查找资料,使用递归遍历算法解决了此问题。下面带您一步一步解析。  Frame标...
            13 13 2285
            分享
          • 测试人员进行的测试活动,不是仅限于版本上线前的测试,版本上线后,我们的测试工作依然在继续,只不过测试环境变成了线上环境,测试力度变为走查形式,一些异常或者特殊场景等会相应减少,但是常用功能和正向流程一个都不能少。以下来简单拆解下线上走查的一些注意事项。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~测试走查,是我们每个测试工程师的日常工作:版本迭代前,通过需求评审,发现现有功能的已知问题;版本进行中,通过测试设计,审视当前测试方案存在的没考虑全的问题;或者开发的设计方案漏洞版本开发时,通过用例评审和迭代测试,审...
            1 0 6412
            分享
          • 一段时间内,我从上千个面试者中聘用大约100名测试员,从这段面试经历中我揭开了一种模式。在采访中,我和同行的测试人员进行了多次讨论,我非常高兴地看到了我们的测试员群体中的高素质人才。但让我也分享故事的另一面,我所谈论的模式也让我很伤心。看着潜在的表演者被关进一个虚拟的责任笼里,我永远不会感到高兴。看到摇滚明星在受控制的舞台上表演,我感到不满。如果你还不知道什么是问题,什么是基线,这是我们测试界相当大的一部分问题,在他们作为测试人员开始他们的职业生涯多年之后,在多个方面都没有足够的增长。忘记360度,甚至不到一半。对不起,这是残酷的,但它是真实的。这是谁的责任?也许在某种程度上是整个行业的意识。...
            0 0 1137
            分享
      • 51testing软件测试圈微信