为何主机的IP地址和网关一样还能上网? 发表于2021/3/3 22:26 861浏览 0评论 15分钟阅读 为什么IP地址和网关一样还能上网,这样默认路由不就是自己了吗? 电信的网,固定IP,给了一个公网地址,IP地址(中间隐藏了):60.*.*.239,掩码:255.255.255.0,网关:60.*.*.239,网关的地址和IP是一样的,这样的话默认路由的下一跳不就是自己了吗,但是可以上网,百度搜索IP显示的地址也和电信给的一样60.*.*.239。 这里的网关,可以是任何IP地址,如果你喜欢,可以换成6.6.6.6或8.8.8.8等幸运数字也是可以上网的。 为什么呢?这里使用了PPPoE拨号技术,在这台网络设备与电信NAS网关之间动态创建了一条P2P(Point to Point)的隧道。隧道的本地虚拟接口假设为VA1,所有非60.x.x.0/24网段的流量都会通过VA1接口流出本地。 为何要从VA1流出本地?因为系统创建一条默认路由,类似于: 0.0.0.0/0 ------------ > VA1 VA1其实类似与ethernet接口。当我们使用ethernet接口来上网时,IP报文需要通过ethernet接口流出时,ethernet接口必须做的一件事是封装(Encapsulation): Ethernet+ IP报文 有读者说,封装之前,至少还需要目的MAC地址,不是吗?是的,需要ARP广播来发现网关的MAC地址,然后“Ethernet + IP报文“就可以流出网口了,对吗? Okay,当用户的IP报文需要从VA1接口流出时,VA1接口必须做的一件事也是封装: PPPoE + IP报文 然后呢,这个“PPPoE + IP报文“能长出翅膀飞走? 不能。 既然不能,那么这个报文最终还是要乖乖地从ethernet接口(网口)这个物理接口流出。既然要从ethernet接口流出,一定要遵守ethernet接口的潜规则,必须完成封装: Ethernet + PPPoE + IP报文 这里ethernet封装也需要目的MAC地址,对吗? 是的。 是否也需要使用ARP广播来发现NAS网关的MAC地址? 不需要。 为什么? 因为PPPoE握手协商阶段,已经通过Discovery、Offer等报文提前获得了PPPoE服务器(NAS网关)的MAC地址。既然知道了,就没有必要ARP广播了。 于是就发生了神奇的一幕,报文最终通过ethernet接口流出,但是竟然没有使用ARP广播。 当报文顺着ISP的接入网络一路流到NAS网关时,NAS网关干两件事: 剥离Ethernet封装,因为目的MAC地址是自己的,否则直接丢弃 剥离PPPoE封装,根据剩下的IP裸报文继续路由转发 网关的地方既然任何IP地址都可以,那能否是空白的? 应该不可以,如果空白,将不会有上文那条默认路由。 最后一点,NAS网关的下行方向的路由是什么样子的? 60.x.x.239/32 ------------ > VAn 这里的网络掩码为何是32,而不是24? 欢迎加入交流群一起讨论!