连接一个IP不存在的主机,TCP的三次握手会成功吗?

答案

连一个 IP 不存在的主机时,如果目的IP在局域网内,则第一次握手会失败,接着不断尝试重发握手请求。同时,本机会不断发出ARP请求,企图获得目的机器的 MAC 地址。并且,因为没能获得目的 MAC 地址,这些 TCP 握手请求最终都发不出去。

目的IP在局域网外, 如果目的 IP 跟本机 IP 不在同一个局域网下,那么会去获取默认网关的 MAC 地址,这里就是指获取家用路由器的MAC地址。于是TCP第一次握手的包是可以发出去的,但始终收不到响应(也就是第二次握手无法发出)

查看TCP重传次数

cat /proc/sys/net/ipv4/tcp_syn_retries

查看arp表中的ip和mac映射

arp -a

口水话

客户端和服务端要建立通信,需要tcp三次握手。客户端第一次发出SYNC包后,在传输层确认端口组装TCP头,在网络层确认IP组装IP头,在数据链路层需要确认目标MAC,组装上目标MAC,但是因为IP地址不存在,所以MAC地址也无法得到,于是第一次发出的SYNC包一直得不到响应。而TCP具有重传机制,又多次发出SYNC包,多次重试超时后包被丢弃。

为什么会达到传输层?

因为http协议是在tcp协议的基础上完成,而传输层中的重要协议是tcp协议。

为什么网络层能组装上IP头?

IP地址不存在,要包发出去才知道,只要格式正确,那么在客户端发出的包就会组装上IP头

为什么是从应用层到数据链路层这样来推测数据?

网络通信必须是通过网卡发出二进制数据,最终通过光纤传输的都是0和1, 而服务端是相反的过程。

为什么IP地址不存在,MAC地址就无法得到?

知晓ip地址,如果目标IP与客户端IP在同一个局域网内,那么会先在本地的arp表中寻找ip和mac地址的关系。

arp表是局域网内各机器定期广播各自的信息并记录在册

表中没有,就主动发起arp广播询问目标ip机器的mac地址,鉴于ip不是真实存在,所以无机器响应。 因为TCP有重传机制,所以第一次发出的握手消息包会多次间隔1秒重传,重复多次后按照间隔1s,2s,4s,8s,16s,32s规律重传。

如果ip地址是局域网外的地址,那么第一次握手包会发送给默认网关,由网关去获取路由的下一跳,直到寻找到mac地址。 但是ip地址不真实存在,所以最终在互联网中也会丢包。

科普

1.在一个局域网是一个物理概念,表示我们在物理链路上是联通了的
2.同一个网段是软件层面上的,协议规定,只允许在同一个网段的ip才能进行tcp通信

本作品采用《CC 协议》,转载必须注明作者和本文链接
学过的东西能说出来那是最妙的,能复盘写下来那也不错
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!