博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP释放连接时为什么time_wait状态必须等待2MSL时间
阅读量:7212 次
发布时间:2019-06-29

本文共 1089 字,大约阅读时间需要 3 分钟。

这里写图片描述

为什么上图中的A在TIME-WAIT状态必须等待2MSL时间呢? 
第一,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态。 
第二,A在发送完ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求的报文段。 

 

 

MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为tcp报文(segment)是ip数据报(datagram)的数据部分,具体称谓请参见《数据在网络各层中的称呼》一文,而ip头中有一个TTL域,TTL是time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

    2MSL即两倍的MSL,TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP的一端发起主动关闭,在发出最后一个ACK包后,即第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在TIME_WAIT状态时两端的端口不能使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

 

    TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。

 

转载于:https://www.cnblogs.com/huenchao/p/6266352.html

你可能感兴趣的文章
【PMP】Head First PMP 学习笔记 第十章 沟通管理
查看>>
阿里巴巴发布AliOS品牌 重投汽车及IoT领域
查看>>
获得1.5亿区块链投资后,矩阵元怎么做区块链?
查看>>
ASP.NET MVC路由扩展:路由映射
查看>>
【LeetCode从零单排】No118 Pascal's Triangle
查看>>
怎么建立网站?
查看>>
长得像鳗鱼的Envirobot,利用传感器检测并追踪水中有害元素
查看>>
剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)
查看>>
1-2 输出N个数的平方和立方值
查看>>
实践 Redux,第 1 部分: Redux-ORM 基础
查看>>
中国人工智能学会通讯——AI时代的若干伦理问题及策略 1.3 构建算法治理的内外部约束机制...
查看>>
打造具有物联网基因的现代化商业银行
查看>>
英特尔携手AT&T和爱立信进行DIRECTV NOW流媒体直播服务的5G试验
查看>>
关键时刻不可或缺的5款高科技紧急应用
查看>>
NSA方程式泄漏工具包浅析
查看>>
微服务,我们如何与你相处
查看>>
中国人工智能学会通讯——KS-Studio:一个知识计算引擎 1.2 知识图谱构建
查看>>
“Redirect to SMB”漏洞影响所有版本的Windows
查看>>
东方通没有创造中间件 却在定义中间件的“化蝶”
查看>>
物联网其实只是一个话题
查看>>