tcp链接状态以及netstat命令

wKioL1Yu6VvTnAZHAAG4aoSDtLY657.jpg

  tcp是可靠的数据传输协议,相对于udp来讲,基于udp的通讯速度更快,可是没有数据的完整性的保证,更重要的是udp不会保证数据是否到达了目的方。linux

  TCP协议创建的tcp链接是有状态的,称之为tcp的有限状态机web

SYN_SENT:主动创建链接的一方发起链接创建请求,也就是SYN=1,当发出同步位,状态转换位SYN_SENT服务器

SYN_RCVD:服务器端收到了客户端发送的同步报文,按照tcp协议的规定,回复ACK报文同时SYN位至1,此时服务器的状态转换为SYN_RCVD网络

ESTABLISHED:当客户端收到服务器端发来的SYN确认报文,客户端就由此转入链接创建状态(established),并向服务器端回送确认报文并发

状态为ESTABLISHED,双方就能够发送数据进行通讯了,可是TCP又有所谓的长链接和短链接,通常在应用程序没有启用keepalived的状况下,TCP链接创建以后发送一个数据请求获得结果后就断开链接,而长链接就是在一个数据请求以后并不当即断开,而等待应用程序定义的TIMEOUT等条件知足以后断开(或者收到了对方的FIN)tcp


tcp创建链接的时候称w为三次握手,通常都是由客户端先向服务器端发起链接请求ide

tcp断开链接的时候称为四次挥手,在断开链接的时候有多是客户端发起的也有多是服务器端先发起的性能


在这里选用如图,客户端先发起断开链接请求(可是双方都要发送FIN)spa

  FIN_WAIT1:主动方发起断开链接请求等待对方确认,将自身的状态转入FIN-WAIT1blog

 CLOSE-WAIT:被动方收到FIN报文,回复ACK,将状态转为CLOSE_WAIT

在tcp的链接中,在本身发出FIN位以后就不能再发送数据,可是能够读取,因此在被动方回复了主动放的FIN以后,只要本身尚未发送FIN位,就能够发送尚未发送完的数据

 FIN_WAIT2:主动方接收到对方的ACK,将状态转入FIN_WAIT2

 LAST_ACK:被动方发送FIN,将自身tcp链接状态转为LAST_ACK,意思就是等待最后一个确认报文以后就能够关闭链接

 TIME_WAIT:主动方收到了被动方的FIN,将tcp链接状态转为TIME_WAIT,在这里主动方会等待2msl的时间以后转入closed

 closed:被动方收到确认报文后,关闭链接


在linxu上,例如web服务的搭建维护调优过程当中,咱们就常常须要关注服务器的链接情况以最大化的发挥服务器的性能

 netstat命令是在linux中最经常使用的显示网络子系统的命令,能够显示路由表,某个地址上创建的链接,tcp链接的状态等等

  netstat 

     --route ,-r显示路由表

     --groups 显示多播组相关信息

  -t:显示tcp链接相关

 -u:显示udp链接相关

  -p:显示进程名称

  -n:以数字方式替换显示端口等信息

  -l:显示处于监听状态的

  -a:显示所有监听和非监听状态的套接字信息

查看服务器上开启的监听服务:

   netstat -tunlp(以数字形式显示哪些进程监听在tcp或者udp的某些端口)

统计80端口链接数

  netstat -nat | grep -i "80" | wc -l

查看http并发链接请求及tcp状态

  netstat -nat | grep -i "80"

查看已经创建的http链接数

 netstat -nat | grep ".*80.*ESTABLISHED"

查看httpd的相关进程数

  ps aux | grep httpd |wc -l或则是ps -ef | grep httpd | wc -l

相关文章
相关标签/搜索