1、TIME_WAIT 状态
- TIME_WAIT 是主动⽅四次挥⼿的最后⼀个状态
- 在 Linux 系统, TIME_WAIT 状态会持续 60 秒后才会进⼊关闭状态(2MSL 时⻓, MSL 全称 Maximum Segment Lifetime)
2 MSL 的时⻓,相当于⾄少允许报⽂丢失⼀次。若 ACK 在⼀个 MSL 内丢失,这样被动⽅重发的 FIN 会在第 2 个 MSL 内到达。TIME_WAIT 状态的连接可以应对连续两次丢包的概率只有万分之⼀,所以不用 4 或者 8 MSL 的时⻓。 - 作用1:防⽌(TCPl连接复用时)收到历史数据(被网络延迟的数据),从⽽导致数据错乱的问题
- 作用2:等待⾜够的时间以确保最后的 ACK 能让被动关闭⽅接收,从⽽帮助其正常关闭
如果客户端 TIMEWAIT 过短或没有,不论客户端发出的最后⼀个 ACK 报⽂如果在⽹络中是否丢失,客户端都会直接进⼊了 CLOSE 状态了,那么服务端则会⼀直处在 LAST-ACK 状态。下一次客户端再次建⽴连接的 SYN 请求报⽂,服务端会发送 RST 报⽂给客户端,连接建⽴的过程就会被终⽌。
2、MSS MTU
(来源:小林coding图解网络)