如果服务器接受 TCP 连接,它是否总是通过发送 SYN/ACK 消息来响应 SYN 消息,或者它是否曾经有一个它不响应的 IP 地址黑名单?也就是说,TCP 协议是否规定所有打开和侦听端口都必须响应 SYN 消息?
任何澄清将不胜感激
如果服务器接受 TCP 连接,它是否总是通过发送 SYN/ACK 消息来响应 SYN 消息,或者它是否曾经有一个它不响应的 IP 地址黑名单?也就是说,TCP 协议是否规定所有打开和侦听端口都必须响应 SYN 消息?
任何澄清将不胜感激
否。有时没有到目标的 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 节,建立连接,详细介绍了发生的情况,包括异常情况。
设置了 SYN 标志的 TCP 段可以用设置了 RST 标志的 TCP 段进行回复。如果服务器没有侦听设置了 SYN 标志的 TCP 段中提到的特定目标端口,就会发生这种情况。这意味着连接从服务器端中止。
希望这会有所帮助。