转自微信,原文链接
Q1:客户端连接一个不存在的 IP 地址,会发生什么?
第一个情况:目标 IP 地址和客户端的 IP 地址是同一个局域网(网络号相同)。
第一种情况,客户端无法发出 SYN 报文,主要卡在数据链路层。
因为目标地址不存在 IP 地址,客户端的内核在发 arp 请求的时候,广播询问这个目标 IP 地址是谁的,由于网络中不存在该目标 IP 地址,所以没有设备应答客户端的 arp 请求。
由于客户端无法拿到目标设备的 MAC,这样就没办法组装 MAC 头的信息,所以 SYN 报文无法发送出去。
第二个情况:目标 IP 地址和客户端的 IP 地址不在同一个局域网(网络号不同)。
第二种情况,客户端会先将 SYN 报文发给路由器,然后路由器会继续转发。
由于目标 IP 地址是不存在的,该 SYN 报文会在网络中消亡,因此客户端是不会收到对 SYN 报文的确认报文的,接着客户端会触发超时重传,重传 SYN 报文,直到重传的次数达到最大次数后,客户端的连接就会被释放。
Q2:客户端连接一个存在的 IP 地址但是端口不存在,会发生什么?
客户端连接的目标 IP 地址是存在的,那么 SYN 报文就能正确的抵达到目标设备。
目标设备收到 SYN 报文后,发现端口号并没有被进程监听,如果使用TCP,这时候目标设备的内核就会回 RST 报文。
客户端收到 RST 报文后,就会释放连接。