zoukankan      html  css  js  c++  java
  • 网络相关的命令工具研究报告: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建立连接的不同状态,便于我们了解现在建立连接的情况,发现网络的问题。

  • 相关阅读:
    docker for windows 中挂载文件到容器
    docker for windows 中 镜像 microsoft/donet 的文件结构
    window7下docker toolbox 启用数据卷报错: Error response from daemon: invalid mode:
    无法创建虚拟目录
    docker 内时区和宿主机差8个小时,怎么办?
    多线程之同时更改数据问题--启用lock
    Linux shell Bash的基本功能1
    Linux shell 脚本执行方式
    Linux vim编辑器使用技巧
    Linux vim编辑器命令
  • 原文地址:https://www.cnblogs.com/HMYaa/p/11942681.html
Copyright © 2011-2022 走看看