问题1:为什么经常看到一堆TIME_WAIT
当客户端发起fin之后,服务端正常发送fin了,客户端ack后将进入TIME_WAIT状态,等待2MSL时间
该时间长度可在以下看到(单位s)
net.ipv4.tcp_fin_timeout = 60
问题2:为什么要等待2MSL
当服务端fin没有正常发出,或者在一个MSL内没收到fin的ack时,能够再次发送fin包。当客户端在2MSL没接收到fin包时,则认为链接正常关闭
问题3:tcp为什么要三次握手
可靠性保证,保证双方皆可正常收发
问题4:tcp为什么要4次挥手
客户端发起fin后,可能服务端还有数据需要发送,不能马上关闭则需要通过4次挥手
问题5:如果客户端直接退出,不发送fin包会怎么样
操作系统会释放资源,直接发送fin包
问题6:如果客户端断网或者断电
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
空闲时间7200之后开始发送探测包,总共9次,每次间隔75s,没收到回复,则认为断开