湿度敏感性等级:MSL,Moisture sensitivity level 之所以有这个等级,大概是因为以下原因: 目的在于确定那些由湿气所诱发应力敏感的非密封固态表面贴装元器件的分类, 以便对其进行正确的封装...下图是IPCJEDEC J-STD-020D.1 对湿敏等级的划分: 分别是:MSL 1、MSL 2、MSL 2a、MSL3、MSL4、MSL5、MSL5a、MSL6,从下图中可看出,等级数字越大,越容易吸湿...对烘烤条件的规定: 针对零件生产厂商,经销商出零件的烘烤条件规定: 针对用户端使用零件的烘烤条件规定: 好了,以上就是今天要分享的内容,看完后每位工程师可以自检下是否有此流程,最好建立个元器件MSL
首先我们再来回顾一下tcp四次挥手的状态,time_wait状态是在主动断开的一方发出的,他的作用和解释可以看这篇 可以看到对端发来FIN报文后客户进入time_wait状态,等待2MSL,MSL...是报文存在的最大时间,客户在发出最后一个ACK之后开始计时,这个ACK传输的最大时间是1MSL,如果这个ACK丢失了,服务端会发起重传,而重传FIN的报文最大到达时间是1MSL,所以考虑到重传,这里需要等待...2MSL的时间
文章目录 前言 正文 前言 本文主要分析为什么 TIME_WAIT 状态的持续时间是 2MSL 而不是 1MSL,3MSL 或其它的时长,而不会详细描述为什么需要 TIME_WAIT 状态。...如果只考虑上述第一个目标,则 TIME_WAIT 状态需要持续的时间应该参考对端的 RTO(重传超时时间)以及 MSL(报文在网络中的最大生存时间)来计算而不是仅仅按 MSL 来计算,因为只要对端没有收到针对...不处理这些报文可能导致前后两个使用相同四元组的连接中的后一个连接出现异常(详见《UNIX网络编程》卷 1 的 2.7 节 第三版); 处于 TIME_WAIT 状态的一端在收到重传的 FIN 时会重新计时(rfc793以及 Linux...报文要从网络中消失最多还需要一个 MSL 时长,所以 A 还需要多等一个 MSL。...综上所述,TIME_WAIT 至少需要持续 2MSL 时长,这 2 个 MSL 中的第一个 MSL 是为了等自己发出去的最后一个 ACK 从网络中消失,而第二 MSL 是为了等在对端收到 ACK 之前的一刹那可能重传的
本文主要分析为什么TIME_WAIT状态的持续时间是2MSL而不是1MSL,3MSL或其它的时长,而不会详细描述为什么需要TIME_WAIT状态。...不处理这些报文可能导致前后两个使用相同四元组的连接中的后一个连接出现异常(详见UNIX网络编程卷1的2.7节 第三版); 处于TIME_WAIT状态的一端在收到重传的FIN时会重新计时(rfc793 以及 linux...所以晃眼一看,A只需要等待1个MSL就够了,但仔细想一下其实1个MSL是不行的,因为在B收到ACK前的一刹那,B可能因为没收到ACK而重传了一个FIN报文,这个FIN报文要从网络中消失最多还需要一个MSL...时长,所以A还需要多等一个MSL。...综上所述,TIME_WAIT至少需要持续2MSL时长,这2个MSL中的第一个MSL是为了等自己发出去的最后一个ACK从网络中消失,而第二MSL是为了等在对端收到ACK之前的一刹那可能重传的FIN报文从网络中消失
MSL(Maximum Segment Lifetime)报文最大生存时间,2MSL即两倍的MSL,TCP允许不同的实现可以设置不同的MSL值。...因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL...时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。...客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。 ?
那么考虑最坏的情况A在发出Last_ack后,经过MSL的时间才到大B,B就可以正常断开连接了,而B在接收到这个包前一刻重传了Fin包,也经过MSL的时间才到达A,那么A就能在2MSL的时间等到B的最后一个重传...Fin包并处理掉,当然B的重传时间肯定小于MSL,因此A收到B重传的Fin包肯定小于2MSL。...另外MSL也是一个经验值,不同的系统实现默认值也不同,现在的协议栈已经能够处理重复序列号的情况,因此2MSL的时间实际意义也不大。
RFC793 定义 MSL 为 2 分钟,一般 Linux 会默认设置个更小的值 30 秒。...这块代码是 Linux tcp_timewait_state_process 函数处理的。 而 2 MSL 是为了确保 C 和 S 两端发送的数据都在网络中消失,不会影响后续的新连接,该如何理解?...如果 S 在 MSL 时间收到 ACK, 而收到前一瞬间, 因为超时又重传一个 FIN ,这个包又要 MSL 时间才会从网络中消失。...回复需要 MSL 消失 + 发送需要 MSL 消失 = 2 MSL。 导致问题 从前面的分析来看,出现 TIME_WAIT 属于正常行为。...这是因为端口被占完了,Linux 一般默认端口范围是:32768-61000,可以通过 cat /proc/sys/net/ipv4/ip_local_port_range 来查看。
由于客户端与服务端建立连接,客户端需要占用一个端口号,这个端口号由系统分配,在Linux系统下,最大可用端口号为65535。...但由于TCP协议存在四次挥手过程,因此,连接关闭后并不会马上释放端口,这个过程有个时间窗口,Linux下这个时间窗口默认大小为120秒。...从四次挥手过程可以看出,客户端的TIME_WAIT状态会持续2MSL才会变成CLOSED。...因此,在2MSL时间内,该连接占用的端口将处于空闲且不可被使用状态。在Linux系统下,MSL默认值为60秒,2MSL即120秒。 为什么TIME_WAIT要维持2MSL时长呢?...而等待2MSL时长期间,服务端没有收到应答就会继续发送FIN请求。
主动关闭的一方会进入TIME_WAIT状态,并且在此状态停留两倍的MSL时长。 什么是MSL? MSL指的是报文段的最大生存时间,如果报文段在网络活动了MSL时间,还没有被接收,那么会被丢弃。...关于MSL的大小,RFC 793协议中给出的建议是两分钟,不过实际上不同的操作系统可能有不同的设置, 以Linux为例,通常是半分钟,两倍的MSL就是一分钟,也就是60秒,并且这个数值是硬编码在内核中的..., 也就是说除非你重新编译内核,否则没法修改它: #define TCP_TIMEWAIT_LEN (60*HZ) linux系统下怎样修改TIME_WAIT时间?
MSL和TTL的区别在于单位。MSL的单位是时间,而TTL是经过的路由跳数。因此,为了确保报文已经自然消亡,MSL应该大于或等于TTL消耗为0的时间。...在Linux系统中,默认的2MSL时间是60秒,即一个MSL为30秒。Linux系统停留在TIME_WAIT状态的时间是固定的60秒。...在Linux内核代码中,它的定义名为TCP_TIMEWAIT_LEN:#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT...state, about 60 seconds */如果要修改TIME_WAIT的时间长度,只能修改Linux内核代码中TCP_TIMEWAIT_LEN...的值,并重新编译Linux内核。
linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。...net.ipv4.tcp_fin_timeout = 60 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间 注意: - 不像Windows 可以修改注册表修改2MSL...的值,linux 需要修改内核宏定义重新编译,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态超时时间. - tcp_tw_reuse 和 SO_REUSEADDR 是两个完全不同的东西...MSL 由来 发起连接关闭方回复最后一个fin 的ack,为避免对方ack 收不到、重发的或还在中间路由上的fin 把新连接给丢掉了,等个2MSL(linux 默认2min)。 ...2. reuse、recycle 通过timestamp的递增性来区分是否新连接,新连接的timestamp更大,那么保证小的timestamp的 fin 不会fin掉新连接,不用等2MSL。
MSL是报文在网络中存在的最长时间,超过该时间就会被丢弃。 为什么TIME_WAIT需要经历2MSL后才可以变为CLOSED?...2MSL的时间是从客户端接收到FIN报文并且发送ACK报文时开始的。如果此时ACK报文没有被服务端接收到触发了服务端的超时重传,客户端又再次收到了FIN报文,那么2MSL将重新开始计时。...LINUX中默认一个MSL是30s,也就是说TIME_WAIT的时间是60s。...中的默认值,也就是说Linux操作系统中至少经过2小时11分15秒才可以发现一个死亡连接。...以前代表SYN队列大小,但是在Linux 2.2以后就是全连接队列的大小(accept队列的大小)。
linux TIME_WAIT 相关参数: net.ipv4.tcp_tw_reuse = 0 表示开启重用。...的值,linux 是没有办法修改MSL的,tcp_fin_timeout 不是2MSL 而是Fin-WAIT-2状态. - tcp_tw_reuse 和SO_REUSEADDR 是两个完全不同的东西...服务器TIME_WAIT 高怎么办 不像客户端有端口限制,处理大量TIME_WAIT Linux已经优化很好了,每个处于TIME_WAIT 状态下连接内存消耗很少, 而且也能通过tcp_max_tw_buckets...MSL 由来 发起连接关闭方回复最后一个fin 的ack,为避免对方ack 收不到、重发的或还在中间路由上的fin 把新连接给干掉了,等个2MSL,4min。 ...细节之处还得好好阅读tcp 协议栈源码了 建议阅读以下参考: Coping with the TCP TIME-WAITstate on busy Linux servers tcp短连接TIME_WAIT
而2MSL的意思就是2倍的MSL的意思。 ? ? ? ? ? ?...乔戈里:小萌你说得很好,也因此出现了客户端要等待2MSL的情况。...小明与女神的对话: 所处的网络环境:如果客户端不等待2MSL直接进行关闭,前一次的连接的数据还在网络中 ?...这个时候小明以为他的消息会在这2MSL中的时间中消失(小明以为这个TCP是正常的四次挥手),悄悄说了一句女神的坏话,但是悲剧的是这个小明所在的网络环境不是可靠的没有等待2MSL的网络环境,并没有消失,因此如果没有...2MSL的等待时间上一次的小明说的坏话的数据包还在网络中。
TCP的四次挥手图片MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”.2MSL在RFC 793协议中给出的建议是两分钟, 但是在Linux下一般时30...秒, 也就是说2MSL就是60秒.CLOSE_WAIT 产生的原因CLOSE_WAIT是被动关闭连接是形成的,根据TCP状态机,服务器端收到客户端发送的FIN,TCP协议栈会自动发送ACK,连接进入CLOSE_WAIT...TIME_WAIT 产生的原因TIME_WAIT的作用简单说timewait之所以等待2MSL的时长,是为了避免因为网络丢包或者网络延迟而造成的tcp传输不可靠,而这个TIME_WAIT状态则可以最大限度的提升网络传输的可靠性...或者将MSL值缩减, linux中MSL的值默认为60s,我们可以通过缩减MSL值来使得主动关闭连接一端由TIME_WAIT状态到关闭状态的时间减少。...查看默认的MSL值$ cat /proc/sys/net/ipv4/tcp_fin_timeout修改$echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout或者$ vim
在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻售,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要...于是,Linux下给了一个叫tcp_syncookies的参数来应对这个事——当SYN队列满了后,TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie...因为,我们假设我们的TCP Segment在网络上的存活时间不会超过Maximum Segment Lifetime(缩写为MSL – Wikipedia语条),所以,只要MSL的值小于4.55小时,那么...关于 MSL 和 TIME_WAIT。通过上面的ISN的描述,相信你也知道MSL是怎么来的了。...我们注意到,在TCP的状态图中,从TIME_WAIT状态到CLOSED状态,有一个超时设置,这个超时设置是 2*MSL(RFC793定义了MSL为2分钟,Linux设置成了30s)为什么要这有TIME_WAIT
上周有个读者在面试微信的时候,被问到既然打开 net.ipv4.tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接,那为什么 Linux 默认是关闭状态呢?...虽然 RFC 793 规定 MSL 为 2 分钟,但是在实际实现的时候会有所不同,比如 Linux 默认为 30 秒,那么 2MSL 就是 60 秒。...MSL 与 TTL 的区别:MSL 的单位是时间,而 TTL 是经过路由跳数。所以 MSL 应该要大于等于 TTL 消耗为 0 的时间,以确保报文已被自然消亡。...TTL 的值一般是 64,Linux 将 MSL 设置为 30 秒,意味着 Linux 认为数据报文经过 64 个路由器的时间不会超过 30 秒,如果超过了,就认为报文已经消失在网络中了。...在 Linux 操作系统下,TIME_WAIT 状态的持续时间是 60 秒,这意味着这 60 秒内,客户端一直会占用着这个端口。
TCP的基本知识,主动关闭连接的一方会处于TIME_WAIT状态,并停留两倍的MSL(Maximum segment lifetime)时长。 那就检查一下MSL的设置。...网上有很多文章说,可以通过设置net.ipv4.tcp_fin_timeout来控制MSL。其实这有点误导人。...查看Linux kernel的文档 ,发现tcp_fin_timeout是指停留在FIN_WAIT_2状态的时间: tcp_fin_timeout - INTEGER The length of time
下面是tcp状态图(来自下面的参考文章): tcp_flow.png 从图中可以看出,若服务器主动关闭连接,在四次挥手的最后一个ACK后连接端口会变为TIME_WAIT状态, 状态停留时长为两个MSL...MSL是一个TCP分段可以存在于互联网系统中的最大时长,RFC 793指出MSL为2分钟, 但在LINUX系统中一般为30s,通过下面这个命令可以确定一些LINUX系统上的MSL数值: sysctl net.ipv4...实现强加了更严格的限制, 在TIME_WAIT状态下,处于这个连接的本地端口默认情况下都不能再被使用,同时为了防止处于TIME_WAIT端口的主机出现故障,重启后马上建立新连接, RFC793有规定, TCP在重启动后的MSL...它的取值在Linux 4.10后的版本里做了些修改, 0表示关闭时间戳功能, 1 表示在收发包时不仅利用当前时间戳,还会利用每个连接生成的随机偏移量,2 表示只使用当前时间戳。...目前这个选项已经在Linux4.12以后的版本里被移除了。 参考文章: https://vincent.bernat.ch/en/blog/2014-tcp-time-wait-state-linux
这岂不是又浪费资源,又得不偿失影响下一次通信吗~~~~ 所以主动断开的最后一个ACK发送完后,不能直接断开连接,它必须确保对方收到最后一个ACK才能断开连接,所以ACK过去一个MSL,如果ACK快到丢包这消耗了一个...MSL,那么对端会重传FIN,这个FIN段又消耗了一个MSL,所以啊共2个MSL。...所以time_wait时间俩个MSL。...首先有个点是必须得知道的,tcp三次握手不止是为了建立连接,还要互相确认对方的当前的初始化序列号(这个序列号在Linux下是有哈希算法得来的),确保当前连接的安全性,如果不初始化,都是0开始的话,那么连接将不安全...其次还要互相决定下来MSL的大小。 所以如果2次握手。
领取专属 10元无门槛券
手把手带您无忧上云