
这个话题很经典,所以想分享一下我的观点。
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地址的。
