【网络】Wireshark分析RST消息

文章目录

        前言
        1、定义:
        2、有三个条件可以产生RST:
        3、说明
        4、RST数据报文产生情况
                1 端口未打开


系列文章:
《Wireshark分析Netty建链过程( tcp三次握手、osi模型)》

《IPV4数据报头部格式》

《Wireshark分析RST消息》
前言

RST是TCP/IP可靠传输协议的协议头的字段。

TCP报头位置如下图所示。


RST在TCP报头中位置:

1、定义:

RST表示复位,RST=1表示TCP中出现严重错误(由于主机崩溃或其它原因),必须释放连接。RST=1还可用来拒绝一个非法的报文段或拒绝打开一个连接。发送RST后不会再有正常的四分组终止序列(Unix网络编程so_linger选项)。
2、有三个条件可以产生RST:

*SYN到达某端口但此端口上没有正在监听的服务器(针对TCP而言,UDP则返回端口不可达ICMP错误)。
*TCP想取消一个已有连接(使用套接字SO_LINGER选项)。
*TCP接收了一个根本不存在的连接上的分节。
3、说明

RST报文段不会导致另一端产生任何响应,另一端不进行确认,收到RST的一段将终止该连接,并通知应用层连接复位。

RST会造成丢弃任何待发数据并立即发送复位报文段。正常终止连接是在所有排队数据都已经发送之后才发送FIN,正常情况下没有任何数据丢失(TCP/IP详解p187)
4、RST数据报文产生情况

其实在网络编程过程中,各种RST错误其实是比较难排查和找到原因的。因此我们需要在编程时尽可能规避不合理的操作,而导致的RST数据包,而分析那些真正有异常的RST数据包。下面我列出几种会出现RST的情况:
1 端口未打开

服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种了。去telnet一个未打开的TCP的端口可能会出现这种错误。这个和操作系统的实现有关。在某些情况下,操作系统也会完全不理会这些发到未打开端口请求。

比如在下面这种情况下,命令行向8089端口发送一个SYN请求,表示想要连接主机的8089端口,但是主机上根本没有打开8089这个端口,于是就向发送了一个RST。这种情况很常见。特别是服务器程序core dump之后重启之前连续出现RST的情况会经常发生。

 

————————————————
版权声明:本文为CSDN博主「云川之下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_45406092/article/details/105519472

posted @ 2023-02-17 15:26  jiftle  阅读(707)  评论(0编辑  收藏  举报