lamp架构下php的mysqli扩展与mysql server的tcp/ip连接分析

php的mysqli扩展与mysql server的tcp/ip连接分析:

a:php-mysqli与mysql server分别在2台机器,php-mysqli连接mysqlserver进行测试,哪个端先断开连接:

经测试,有些php-mysqli扩展先主动连接tcp连接,因为在php-mysqli centos7机器上检测到很多处于TIME_WAIT状态的tcp连接。
有些sql server先主动连接tcp连接,因为在mysql server centos6.5机器上检测到很多处于TIME_WAIT状态的tcp连接。

b:如果php的mysqli扩展与mysql server在同一台机器,那么netstat如何显示Local Address 和Foreign Address

ESTABLISH状态: 会显示2次,如下图红色字体。
[root@bogon ~]# netstat -tan |grep 3306 |grep -v TIME_WAIT
tcp 0 0 127.0.0.1:3306 127.0.0.1:41882 ESTABLISHED
tcp 0 0 127.0.0.1:41998 127.0.0.1:3306 ESTABLISHED
tcp 0 0 192.168.2.146:44670 101.200.90.101:3306 ESTABLISHED
tcp 0 0 127.0.0.1:41914 127.0.0.1:3306 ESTABLISHED
tcp 0 0 192.168.2.146:35042 101.200.90.101:3306 ESTABLISHED
tcp 0 0 127.0.0.1:3306 127.0.0.1:41994 ESTABLISHED
tcp 0 0 127.0.0.1:41882 127.0.0.1:3306 ESTABLISHED
tcp 0 0 127.0.0.1:41922 127.0.0.1:3306 ESTABLISHED
tcp 0 0 127.0.0.1:41890 127.0.0.1:3306 ESTABLISHED
tcp 0 0 127.0.0.1:3306 127.0.0.1:41890 ESTABLISHED
TIME_WAIT状态: 看是mysqli还是mysql server主动断开,处于Local Address端的socket tcp端, 哪个主动断开哪个出现该状态,另一个被动断开的socket tcp端则不会出现该状态。也就是同一个socket连接netstat会出现2条tcp记录ESTABLISHD状态,仅仅出现一次TIME_WAIT状态。
异常分析: 经过实际测试,有的ESTABLISHD状态仅仅出现一条,不知道为何?可能是因为socket主动关闭端刚刚主动发出FIN码变为FIN-WAIT1状态,而被动关闭端尚未收到该FIN码,仍然处于ESTABLISHD状态(被动端收到FIN码后会变为CLOSE_WAIT状态),从而出现只有一个ESTABLISHD状态情况。但是经过实测同一次netstat –tan会出现就1次establish的情况,其他状态也没有再出现。还有同一个socket竟然有1个ESTABLISHD和一个TIME_WAIT状态的情况,有待以后继续分析???看到文章者如知道原因,希望联系我们微信1415035017.

发布了35 篇原创文章 · 获赞 1 · 访问量 3240

猜你喜欢

转载自blog.csdn.net/yaqiang2017/article/details/104318390