linux socket netstat 状态 LISTENINGESTABLISHEDSYN_SENTCLOSE_WAITTIME_WAITFIN_WAIT2 分别是什么意思?
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux socket netstat 状态 LISTENINGESTABLISHEDSYN_SENTCLOSE_WAITTIME_WAITFIN_WAIT2 分别是什么意思?相关的知识,希望对你有一定的参考价值。
文章目录
运行我们的hikflow_demo程序后,用netstat指令查看:
LISTENING状态
服务启动后首先处于侦听(LISTENING)状态
ESTABLISHED状态
ESTABLISHED的意思是建立连接。表示两台机器正在通信。
CLOSE_WAIT
对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭
TIME_WAIT
我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。
SYN_SENT状态
SYN_SENT状态表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。但如果发现SYN_SENT非常多且在向不同的机器发出,那你的机器可能中了冲击波或震荡波之类的病毒了。这类病毒为了感染别的计算机,它就要扫描别的计算机,在扫描的过程中对每个要扫描的计算机都要发出了同步请求,这也是出现许多SYN_SENT的原因。
FIN_WAIT2状态
TCP是全双工通信的
(1)第一次挥手 因此当主动方发送断开连接的请求(即FIN报文)给被动方时,仅仅代表主动方不会再发送数据报文了,但主动方仍可以接收数据报文。
(2)第二次挥手 被动方此时有可能还有相应的数据报文需要发送,因此需要先发送ACK报文,告知主动方“我知道你想断开连接的请求了”。这样主动方便不会因为没有收到应答而继续发送断开连接的请求(即FIN报文)。
(3)第三次挥手 被动方在处理完数据报文后,便发送给主动方FIN报文;这样可以保证数据通信正常可靠地完成。发送完FIN报文后,被动方进入LAST_ACK阶段(超时等待)。
(4)第四挥手 如果主动方及时发送ACK报文进行连接中断的确认,这时被动方就直接释放连接,进入可用状态。
参考文章:TCP为什么是四次挥手,而不是三次? - 魔方的回答 - 知乎
参考文章1:linux netstat(网络信息统计) 工具说明及使用方法(检验本机各端口的网络连接情况,显示网络连接、路由表、网络接口)
以上是关于linux socket netstat 状态 LISTENINGESTABLISHEDSYN_SENTCLOSE_WAITTIME_WAITFIN_WAIT2 分别是什么意思?的主要内容,如果未能解决你的问题,请参考以下文章