SYN 消息是否总是用 SYN/ACK 消息响应?

网络工程 通讯协议 传输协议
2021-07-23 21:42:27

如果服务器接受 TCP 连接,它是否总是通过发送 SYN/ACK 消息来响应 SYN 消息,或者它是否曾经有一个它不响应的 IP 地址黑名单?也就是说,TCP 协议是否规定所有打开和侦听端口都必须响应 SYN 消息?

任何澄清将不胜感激

4个回答

否。有时没有到目标的 IP 连接,因此响应永远不会到达,或者目标上可能没有 TCP 协议堆栈,或者可能有其他协议/服务来禁止特定连接。但是,如果有 IP 连接、两台主机上的 TCP 协议栈和默认实现,则是:

连接建立

为了建立连接,TCP 使用三向握手。在客户端尝试与服务器连接之前,服务器必须首先绑定并侦听端口以打开连接:这称为被动打开。一旦建立了被动打开,客户端就可以发起主动打开。要建立连接,会发生三向(或 3 步)握手:

SYN:主动打开是由客户端向服务器发送一个 SYN 来执行的。客户端将段的序列号设置为随机值 A。 SYN-ACK:作为响应,服务器回复 SYN-ACK。确认号设置为比接收到的序列号大1,即A+1,服务器为数据包选择的序列号是另一个随机数B。

ACK:最后,客户端向服务器发送一个 ACK​​。序列号设置为接收到的确认值,即A+1,确认号设置为比接收到的序列号大一,即B+1。此时,客户端和服务器都已收到连接确认。步骤 1、2 为一个方向建立连接参数(序列号)并确认。步骤 2、3 为另一个方向建立连接参数(序列号)并得到确认。有了这些,就建立了全双工通信。

TCP 在第 4 层,而 IP 在第 3 层。TCP 没有任何类型的黑名单,也不特别关心 IP 地址。不要将主机中的 TCP 与防火墙保护主机的方式混淆。您应该阅读RFC 793, TRANSMISSION CONTROL PROTOCOL,它定义了 TCP,以了解 TCP 的工作原理。第 3.4 节,建立连接,详细介绍了发生的情况,包括异常情况。

就 TCP 而言,是的,SYN将始终跟随SYN/ACK响应。

当使用服务器或防火墙(或软件防火墙),并且特别列入黑名单的 IP 正在发送 SYN 时,在这种情况下,就像关闭 TCP(针对该 IP 地址)一样。因此,SYN 将“置若罔闻”,并且不会产生任何响应。

但请注意,这是代表 TCP 行事的外部实体。TCP 本身并不是为了安全而存在的,它的工作只是简单地创建一个可靠的数据流。如果其他东西想要决定应该与谁形成可靠的数据流,那么这超出了 TCP 的范围。

设置了 SYN 标志的 TCP 段可以用设置了 RST 标志的 TCP 段进行回复。如果服务器没有侦听设置了 SYN 标志的 TCP 段中提到的特定目标端口,就会发生这种情况。这意味着连接从服务器端中止。

希望这会有所帮助。