如果您将 dst 端口为 80 的 TCP 数据包发送到在端口 80 处提供 http 请求的主机,会发生啥?

Posted

技术标签:

【中文标题】如果您将 dst 端口为 80 的 TCP 数据包发送到在端口 80 处提供 http 请求的主机,会发生啥?【英文标题】:if you send a TCP packet with dst port 80 to a host serving http request at port 80 what will happen?如果您将 dst 端口为 80 的 TCP 数据包发送到在端口 80 处提供 http 请求的主机,会发生什么? 【发布时间】:2021-12-03 14:58:16 【问题描述】:

我正在学习TCP三向握手,感觉有很多我不知道的隐藏知识。

我想知道如果我将 dst 端口为 80 的随机 TCP 数据包发送到在端口 80 处提供 http 请求的主机会发生什么?

有什么工具可以试用吗?

【问题讨论】:

如果您还没有 TCP 连接,您将返回一个 TCP RST。见RFC 793,这是TCP的定义,里面有TCP状态机的解释。 【参考方案1】:

...会发生什么?

这取决于具体的网络服务器和您发送的具体内容。例如,它可能会因为这是一个不完整的 HTTP 请求而等待,可能会因为它无效而关闭连接,可能会返回指出错误请求的 HTTP 响应...

...有什么工具可以试用吗?

有很多工具可以进行简单的 TCP 连接,例如 netcat、telnet ... 甚至是 Python 或类似的简单程序。

【讨论】:

【参考方案2】:

我想知道如果我将 dst 端口为 80 的随机 TCP 数据包发送到在端口 80 处提供 http 请求的主机会发生什么?

除非您首先完成了 SYN/SYN/ACK/ACK 握手,否则其他一切都被视为不同步并以 RST 回复。

检查 RFC 793(强调我的):

重置生成

作为一般规则,只要一个段到达,就必须发送复位 (RST) 这显然不适用于当前连接。重置 如果不清楚是这种情况,则不得发送。

有三组状态:

    如果连接不存在(CLOSED),则发送重置 响应任何传入的段,除了另一个重置。在 特别是,发送给不存在的连接的 SYN 被拒绝 通过这种方式。

如果传入的段有一个 ACK​​ 字段,则重置采用它的序列 段的 ACK 字段中的编号,否则复位有 序列号为零,并且 ACK 字段设置为总和 传入段的序列号和段长度。这 连接保持在 CLOSED 状态。

    如果连接处于任何非同步状态(LISTEN、 SYN-SENT, SYN-RECEIVED),并且传入的段确认 尚未发送的内容(该段携带不可接受的 ACK),或 如果传入分段具有安全级别或隔间, 与请求的级别和隔间不完全匹配 连接,发送重置。

如果我们的 SYN 没有被确认并且优先级 传入段高于然后请求的优先级 要么提高本地优先级(如果用户允许,并且 系统)或发送复位;或者如果 传入段低于请求的优先级然后 继续,就好像优先级完全匹配(如果远程 TCP 无法提高优先级以匹配我们的,这将是 在它发送的下一个段中检测到,连接将是 然后终止)。如果我们的 SYN 已经被确认(也许在这个 传入段)传入段的优先级必须 完全匹配本地优先级,如果它没有重置 必须发送。

如果传入的段有一个 ACK​​ 字段,则重置将使用它的 段的 ACK 字段中的序列号,否则 reset 的序列号为零,并且 ACK 字段设置为总和 输入段的序列号和段长度。 连接保持相同的状态。

    如果连接处于同步状态(ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT), 任何不可接受的段(超出窗口的序列号或 不可接受的确认号)必须只引出一个空的 包含当前发送序列号的确认段 以及指示下一个预期序列号的确认 被接收,并且连接保持在相同的状态。

如果传入分段具有安全级别或隔间,或 与级别和隔间不完全匹配的优先级, 并请求连接的优先级,发送重置并 连接进入 CLOSED 状态。重置采取它的顺序 来自传入段的 ACK 字段的编号。

【讨论】:

以上是关于如果您将 dst 端口为 80 的 TCP 数据包发送到在端口 80 处提供 http 请求的主机,会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

Wireshark 常用规则

wireshark怎么过滤端口

Wiresahrk抓包过滤技术

wireshark过滤规则

WireShark分析TCP HTTP

Wireshark常用过滤使用方法