TCP连接的建立与终止
程序员文章站
2024-01-30 12:45:28
...
1.TCP连接的建立与终止
TCP连接建立需要三次握手,主动打开方状态:SYN_SENT,被动打开方状态:SYN_RCVD
TCP连接断开需要四次握手,被动关闭(CLOSE_WAIT),主动关闭(TIME_WAIT)
shell:netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn可以查看TCP连接
CLOSE_WAIT连接数多:根本原因就是被动关闭方连接没有关闭
原因一:代码中没有写关闭连接的代码
原因二:该连接的业务代码处理时间太长,代码还在处理,对方已经发起断开连接请求
TIME_WAIT连接数多:TIME_WAIT状态也称为2MSL状态,这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用,这个连接只能在2MSL结束后才能被使用。
解决方法:使用TCP连接API中SO_REUSEADDR选项,它能重新使用处于2MSL状态中的端口
MSL:Maximum Segment Lifetime 报文最大存活时间
2MSL的用处:主动关闭连接的一方发回最后一个ACK丢失时,可以有时间重新发送最后一个ACK(另一端超时并重发最后的FIN)
TCP连接建立需要三次握手,主动打开方状态:SYN_SENT,被动打开方状态:SYN_RCVD
TCP连接断开需要四次握手,被动关闭(CLOSE_WAIT),主动关闭(TIME_WAIT)
shell:netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn可以查看TCP连接
CLOSE_WAIT连接数多:根本原因就是被动关闭方连接没有关闭
原因一:代码中没有写关闭连接的代码
原因二:该连接的业务代码处理时间太长,代码还在处理,对方已经发起断开连接请求
TIME_WAIT连接数多:TIME_WAIT状态也称为2MSL状态,这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用,这个连接只能在2MSL结束后才能被使用。
解决方法:使用TCP连接API中SO_REUSEADDR选项,它能重新使用处于2MSL状态中的端口
MSL:Maximum Segment Lifetime 报文最大存活时间
2MSL的用处:主动关闭连接的一方发回最后一个ACK丢失时,可以有时间重新发送最后一个ACK(另一端超时并重发最后的FIN)
推荐阅读
-
TCP连接的建立与终止
-
PLSQL Developer 的安装与使用(连接Linux下的Oracle数据库)
-
快牙手机与电脑版在同WiFi环境无法连接的解决方法介绍
-
php连接odbc数据源并保存与查询数据的方法,phpodbc
-
Windows下PHP4.0与Oracle8的连接设置_PHP
-
mysql - php操作数据库的连接与释放怎样做比较好?
-
这个错误怎么解决啊 主机放弃一个已建立的连接 Warning: socket_read() : unable to read from socket
-
详解Python程序与服务器连接的WSGI接口
-
mac下eclipse与mysql建立不了连接
-
php连接与操作PostgreSQL数据库的方法