为什么网关与主机可以不在同一个网段?

为什么网关与主机可以不在同一个网段?

这个话题很经典,所以想分享一下我的观点。

IPoE (IP over Ethernet )

公司局域网里,PC通过DHCP服务器拿到IP/mask/ Default gateway,举个例子:

IP:10.1.1.2Mask: 255.255.255.0Default gateway: 10.1.1.1

这三个参数可以满足

1)同网段10.1.1.0/24通信

由于以太网头部封装需要对方的MAC,所以需要ARP广播

2)跨网段通信(除了10.1.1.0/24的所有网段)

任何跨网段的通信需要发给网关,那自然需要通过ARP广播来发现网关,关键的地方到了,主机必须和网关在一个广播域里,不是吗???一个广播域意味着什么???主机与网关必须在同一个网段,同一个掩码,否则无法发现网关的MAC,通信会失败。

互联网世界里,谁负责分配IP,谁来全权负责双向路由的打通,IPoE里是这样,PPPoE里也是这样,接下来谈谈PPPoE

PPPoE (PPP over Ethernet )

PPPoE只是一个适配层,其目的是在Ethernet物理介质上传输PPP协议,其封装格式为:

Ethernet + PPPoE + PPP + IP + Payload

所以我们先忽略它,只讨论PPP,PPP协议分两个阶段:

1 控制协议传输

1.1 LCP

主要用于协商用什么协议认证用户,协商结果为1.2的协议

1.2 CHAP

用于认证用户是否合法,如果通过,进入1.3;否则认证失败

1.3 IPCP

用于为主机分配IP/mask/ Default gateway,比如:

IP:175.9.254.138

Mask: 255.255.255.255

Default gateway: 175.9.252.1

PPP(Point to Point Protocol)是点对点协议,一端是主机,另一端就是网关,主机像飘在海中的一个个小船,通过一根根缆绳(PPP连接)连在港口的锚点(网关)上,小船的装卸货物(IP流量)全部通过锚点。

由于PPP头部封装没有地址段,所以无需像以太网那样用ARP来解析网关MAC地址,所以也无需主机与网关在同一个网段,主机的任何出口流量全部发给PPP虚拟接口(Virtual Access),虚拟接口完成必要的封装,虚拟接口的流量顺着物理光纤,到达PPP服务器,完成解封装得到IP包,然后再依据IP路由表来继续转发。

2 数据传输

封装格式为:

Ethernet + PPPoE + PPP + IP + Payload

有同学肯定会说,PPP没有地址,但以太网头部不是需要知道Destination MAC 的嘛?这个MAC通常是PPPoE服务器的,PPPoE通常与PPP是一体的,PPP服务器通常是网关,所以最终这个Destination MAC 还是网关的MAC,那这个MAC是如何知道的呢?

通过PPPoE Discovery / PPPoE Offer 这个过程发现、握手来发现网关的MAC,这个过程早于PPP协议。

这里PPPoE耍了一个鬼把戏,通过以太网广播PPPoE discovery(不是ARP,因为主机接口还没有配置任何IP地址)去发现网关的MAC,最终还是要知道网关的MAC地址的。