一、IP 不存在时
-
如果 IP 在局域网内,会发送 N 次 ARP 请求获得目的主机的 MAC 地址,同时不能发出 TCP 握手消息。
-
如果 IP 在局域网外,会将消息通过路由器发出,但因为最终找不到目的地,触发 TCP 重试流程。
二、IP 地址存在但端口号不存在时
-
不管目的 IP 是回环地址还是局域网内外的 IP 地址,目的主机的传输层都会在收到握手消息后,发现端口不正确,发出 RST 消息断开连接。
-
当然如果目的机器设置了防火墙策略,限制他人将消息发到不对外暴露的端口,那么这种情况,发送端就会不断重试第一次握手。
最后留个问题,连一个 不存在的局域网外 IP的主机时,我们可以看到 TCP 的重发规律是:开始时,每隔 1s 重发五次 TCP SYN
消息,接着 2s,4s,8s,16s,32s 都重发一次;
对比连一个 不存在的局域网内 IP的主机时,却是每隔 1s 重发了 4 次ARP请求
,接着过了 32s 后才再发出一次 ARP 请求。已知 ARP 请求是没有重传机制的,它的重试就是 TCP 重试触发的,但两者规律不一致,是为什么?
答案:在这两种情况下,TCP SYN消息和ARP请求的重发规律之所以不一致,是因为它们针对的是不同的网络层协议和问题。
-
对于TCP SYN消息的重发规律:
TCP协议是在传输层工作的,用于建立可靠的连接。当尝试连接到一个不存在的IP地址时,TCP协议会根据指数退避算法进行重试,即每次重试的间隔时间会指数级增加。这样做是为了避免网络拥塞和资源浪费。 -
对于ARP请求的重发规律:
ARP协议是在数据链路层工作的,用于解析IP地址到MAC地址的映射关系。当主机要发送数据到另一个主机时,首先需要知道目标主机的MAC地址,而ARP请求就是用来获取目标主机的MAC地址的。当ARP请求没有收到响应时,主机会重发ARP请求。但ARP请求的重试机制不同于TCP的指数退避算法,通常由操作系统或网络设备设置一个固定的超时时间来确定何时重新发送ARP请求。
因此,尽管两者都是重试机制,但TCP SYN消息和ARP请求的重发规律因其所解决的问题和所处的网络层而有所不同。
参考:连接一个 IP 不存在的主机时,握手过程是怎样的?