暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TCP连接的建立和终止

科学杂谈 2018-09-03
432

1. ClientServer建⽴立连接1.1 客户端

1.2 服务端

1.3 序列列图
2.Client Server 数据传输

序列列图

3.ClientServer
4.1 客户 端TIME_WAIT 增多4.2 服务端 CLOSE_WAIT 增多

4.2.1 基本概念
4.2.2 ⽣生命周期:不不关闭socket描述符的⼀一⽅方, 情况1:应⽤用Amysql之间,mysql主动关闭连接,

参考: 《Unix⽹网络编程卷1:套接字联⽹网API(3).pdf 2.6 tcp连接的建⽴和终止》

$man netstat

1. ClientServer建⽴立连接

1.1 客户端

ClOSED ->SYN_SENT ->ClOSED (connect超时或应⽤用关闭时)
ClOSED ->SYN_SENT ->ESTABLISHED ->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT---->2msl超时

ClOSED

1.2 服务端
LISTEN->ESTABLISHED ->CLOSE_WAIT->LAST_ACK-->CLOSED

1.3 序列列图


2.Client Server 数据传输

2.1 序列列图



3.ClientServer 断开连接

Client

Server



4 特殊情况

4.1 客户 端TIME_WAIT 增多

4.2 服务端 CLOSE_WAIT 增多4.2.1 基本概念

某个应⽤用程序在ESTABLISHED状态期间接受到⼀一个FIN(被动关闭),状态转为CLOSED_WAIT⻓长时间CLOSE_WAIT,接收被动关闭FIN的应⽤用⽅方没有关闭socket描述符。

netstat命令⾏行行

Recv-Q 此列列的值通常应该为0,也可以短暂的不不为0,如果这个数值过⼤大,说明接收队列列有数据堆 积。 如果常时间不不为0有可能遭受到了了denial-of-service(拒绝服务)攻击,也就是我们常说的DoS攻 击。简单的讲就是把你带宽或者资源消耗完,⽆无法正常为真正需要服务的⽤用户提供服务直到崩溃。Send-Q表示⽹网络发送队列列 a) 此列列的值也通常应该为0,也可以短暂的不不为0,如果这个数值过⼤大,发 明发送队列列有数据堆积。如果常时间不不为0有可能是向外发送数据过快,或者对⽅方接收太慢,导致发 出去的数据还停留留在本地缓冲区


## Recv-Q ⼤大于零
$netstat -anp |grep ..
Proto Recv-Q Send-Q Local Address State PID/Program name
tcp 
1 0 XXX.XXX.XXX.110:41064 CLOSE_WAIT 18553/Server

Foreign AddressXXX.XXX.XXX.135:3306

4.2.2 ⽣生命周期:不不关闭socket描述符的⼀一⽅方,接收FIN的应⽤用,处于CLOSE_WAIT,如果不不关闭socket描述符,在进程未结束前,会⼀一直存在,

情况1:应⽤用Amysql之间,mysql主动关闭连接,

应⽤用Amysql之间建⽴立连接con,状态 双⽅方ESTABLISHEDmysql会话超时后主动关闭连接

应⽤用A接收⼀一个FIN(被动关闭),应⽤用A没有执⾏行行关闭数据库连接,会导致应⽤用A⼀一致处于CLOSE_WAIT状态。


文章转载自科学杂谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论