什么是IP路由

7/14/2023

当我刚接触计算机网络领域时,我总是把两台机器的通信简单地理解为IP地址同网段才可以通信,以至于后来我做开发之后、老是有一个念头不得通达,为什么公网上的IP和我的也不是一个网段却可以通信?为什么连接VPN就可以访问一个公司的内网?所谓知识的学习都是业务驱动的果然没错,当我想独立开发属于我自己的VPN时,我就不得不了解其中的原理了。

# 为什么需要IP地址和MAC地址?

首先我们要了解一下事情,TCP/IP通信中,为什么需要IP地址和MAC地址?两台机器要进行通信,首先要解决的事情是,我如何知道你是你?这就是MAC地址的作用,**一般设备会有一个固定的mac地址,他决定了二层协议数据包的归宿,而IP地址,是三层协议中的概念。可以理解为mac地址是第一次过滤规则,而IP地址,是第二次过滤规则。**以太网在广播以及组播方面具有特定的特性。当一个主机发送数据包时,它会在以太网段内进行广播,以确保所有其他设备都能接收到该数据包。这是因为以太网是一种共享介质的局域网技术,所有设备都连接到同一个物理网段上。

在这种情况下,主机 B 是数据包的目标,但其他主机也会收到该数据包。然而,每个主机都会检查数据包的目标 MAC 地址,只有主机 B 会接收并处理该数据包,其他主机会忽略它。需要注意的是,如果有交换机存在,交换机会根据交换表来决定将数据包转发到哪个端口。通常情况下,交换机会将数据包仅发送到目标主机所连接的端口,从而限制广播范围。但在同一个物理网段中,由于广播特性,其他主机仍然能够接收到广播的数据包。

# IP路由和NAT地址转换有关系吗?

可以明确的说,route和nat完全是两个不同的概念,nat要解决的问题是,IPV4的公网地址已经远远不够用的问题,所以我们需要让一个子网内的所有机器共享一个公网IP地址,这些子网内的设备在访问公网的时候,源地址会被转化为同一个公网IP地址,入站规则相反。

而IP路由解决的问题是如何连接两个子网的问题。首先需要了解的是两个网卡设备进行通信,需要使用以太网协议,而二层协议依赖于mac地址来发送消息,如果发送方设备的本地路由表中没有对方机器的mac地址,就会向他所在的广播域内发送一条arp reuqest消息来询问对方的mac地址。就像在一个大房子内,你大吼了一嗓子,谁TM的叫夏洛啊?不叫夏洛的人如果回复了他叫夏洛,那这就是arp欺骗了,是一种网络攻击类型。正常情况下如果有人回复了他叫夏洛,那我们就拿到了他的mac地址,就像我们记住了夏洛的脸一样。

# 位于路由两侧的通信

(未完待续)

参考文献:

1、https://www.firewall.cx/networking/routing-protocols/routing-process.html

2、https://www.jordanwhited.com/posts/wireguard-endpoint-discovery-nat-traversal/

嘉宾
路文飞