rfc793-page36

在这里插入图片描述

  • rfc793原文

      If the connection is in any non-synchronized state (LISTEN,
     SYN-SENT, SYN-RECEIVED), and the incoming segment acknowledges
     something not yet sent (the segment carries an unacceptable ACK), or
     if an incoming segment has a security level or compartment which
     does not exactly match the level and compartment requested for the
     connection, a reset is sent.
    

翻译:
如果连接处于任何非同步状态(LISTEN,SYN-SENT,SYN-RECEIVED),并且传入的数据段确认了尚未发送的内容(即传入的数据段携带了一个不可接受的确认),或者如果传入的数据段具有与连接请求的安全级别或隔间不完全匹配的安全级别或隔间,那么将发送一个复位(reset)。

Linux的实现中,reset报文分为auto-reset和active-reset,其中auto-reset仅仅根据引发reset的报文构造一个附带RST位的TCP回复报文,它并不和任何的socket相关联,发送了reset报文之后也不会针对本地的连接进行任何操作,这种方式reset报文有一个假设,那就是它将引发auto-reset的“坏报文”的产生归结为两点:
1.远端主机的“异常行为”或者是有人没有按照TCP规范而有意为之,比如establish状态时收到一个syn;
2.本端实在没有可以和该坏报文相关联的TCP连接,比如连接了一个不存在或未开启的端口。
对于active-reset,则是在可以将坏报文和既有连接联系的可预知事件发生时发送的,比如重传定时器连续超时超过了一定的次数等,当这种active-reset发送之后,本端的连接也随之烟消云散。在Linux中,auto-reset是由tcp_v4_send_reset来执行的,我想其注释已经阐述的很清晰了:

/*
 *    This routine will send an RST to the other tcp.
 *
 *    Someone asks: why I NEVER use socket parameters (TOS, TTL etc.)
 *              for reset.
 *    Answer: if a packet caused RST, it is not for a socket
 *        existing in our system, if it is matched to a socket,
 *        it is just duplicate segment or bug in other side's TCP.
 *        So that we build reply only basing on parameters
 *        arrived with segment.
 *    Exception: precedence violation. We do not implement it in any case.
 */
static void tcp_v4_send_reset(struct sk_buff *skb)
{
    ...
}

相关推荐

  1. <span style='color:red;'>32</span><span style='color:red;'>RTC</span>&BKP

    32RTC&BKP

    2024-03-23 14:00:01      54 阅读
  2. 【ESP32 IDF】RTC时钟

    2024-03-23 14:00:01       42 阅读
  3. 30RPC概述

    2024-03-23 14:00:01       27 阅读
  4. hal_stm32_RTC函数

    2024-03-23 14:00:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 14:00:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 14:00:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 14:00:01       87 阅读
  4. Python语言-面向对象

    2024-03-23 14:00:01       96 阅读

热门阅读

  1. Linux初学(五)正则表达式

    2024-03-23 14:00:01       43 阅读
  2. Ubuntu下采用VSCode调试C/C++ (1)

    2024-03-23 14:00:01       38 阅读
  3. 并行流实现两个double [][] 数组相加,加快速度

    2024-03-23 14:00:01       35 阅读
  4. 什么情况下要做艾森克人格测试?

    2024-03-23 14:00:01       37 阅读
  5. 【PostgreSQL的指标采集工具--pgmetrics】

    2024-03-23 14:00:01       37 阅读
  6. Oracle增加节点标准方法, /u01 损坏的处理

    2024-03-23 14:00:01       33 阅读
  7. 面试宝典:MySQL-深度分析可重复读原理

    2024-03-23 14:00:01       37 阅读
  8. LeetCode 热题100 图论专题解析

    2024-03-23 14:00:01       39 阅读
  9. LeetCode-热题100:131. 分割回文串

    2024-03-23 14:00:01       47 阅读
  10. web学习笔记(四十二)

    2024-03-23 14:00:01       41 阅读