网络相关的命令工具研究报告:netsta观察TCP连接状态

网络相关的命令工具研究报告netstat

本文主要通过netstat来在linux下观察服务端和客户端的状态,了解TCP状态的转移过程

 

 

这张两图是完整的描述的TCP协议的过程

从中可以清楚的了解到整个TCP状态转移的过程。总共有11个状态。

 先说明下图中每个字段的含义:

  • LISTEN:服务器打开一个socket进行监听
  • SYN_SENT:当socket执行CONNECT连接时,客户端发送了SYN报文,并等待服务器发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
  • SYN_RCVD:表示接受到了SYN报到,该状态是SOCKET建立TCP的连接时的三次握手会话过程的一个中间状态,很短暂,基本上很难通过netstat观察到。
  • ESTABLISHED:表示客户端和服务器连接建立。
  • FIN_WAIT_1:该状态与FIN_WAIT_2状态都是表示等待对方的FIN报文。但是FIN_WAIT_1状态是ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入FIN_WAIT_1状态。而FIN_WAIT_2状态是服务器回应ACK报文进入的状态。
  • FIN_WAIT_2:是socket的半连接状态,也就是一方要求close连接,但另外自己还有数据要传送给对方。
  • TIME_WAIT:表示收到了FIN报文,并放松ACK报文,接着就等待2MSL后进入CLOSED可用状态。如果FIN_WAIT_1状态下,收到了FINACK,那将直接进入TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
  • CLOSING:这种比较特殊,实际情况很少出现,一方发送一一个FIN,同时另外一方也发送了一个FIN,而没有中间的ACK报文的发送。这种一般发生在双方同时关闭的情况下。
  • CLOSE_WAIT:等待关闭,表示对方close一个socket后放松FIN报文给自己,你发送一个ACK就进入了这个状态。如果你有数据发送那么就传送给对方,直到发送FIN给对方,进入关闭状态。所以在该状态下,需要完成的事情是等待你去关闭连接。
  • LAST_ACK:被动关闭的一方在发送FIN报文后,最后等待对方的ACK报文,当收到ACK报文,也就进入了CLOSED状态。
  • CLOSED:初始状态,也是结束状态。

 接下来使用netstat和linux下服务器和客户端程序来观察几个基本的状态,

  netstat在ubuntu下可以通过来安装

sudo apt install net-tools

 接下来 netstat的基本用法可以通过man netstat获得

首先查看当前的IP设置好server的监听端口

通过命令查看有一个ssh(22端口)服务器在运行

启动服务器,通过netstat查看172.16.196.100地址可以发现有一个端口号为8888的程序服务器在运行,就是刚才开启的服务器,最后一栏的LISTEN就是服务器的状态信息

先在启动一个client程序通过netstat查看可以知道出172.172.16.196.100:43942和172.16.196:8888(server)建立了连接,下图不只开了一个client与服务器建立连接。

接下来关闭服务器,发现客户端先进入了FIN_WAIT_2的状态,由于FIN_WAIT_1不好观察这里就不做处理。

服务器的状态进入了CLOSE_WAIT状态

接着下客户端端进入了TIME_WAIT状态,也就是等待2MSL后结束。

 

通过netstat可以了解TCP建立连接的不同状态,便于我们了解现在建立连接的情况,发现网络的问题。

 

posted on 2019-11-27 15:35  humanyang  阅读(273)  评论(0编辑  收藏  举报

导航