• 为何电脑要设置网络掩码?


    问题描述

    既然子网掩码是为了让路由器能够决定一个数据包在局域网内发送还是发到公网,那么按道理只有路由器需要知道子网掩码,为什么在固定IP时每台计算机都需要单独设置子网掩码?有没有什么情况同一局域网内各计算机所设置的子网掩码有不同的?

    正文

    有一种网络场景,电脑其实不需要要用网络掩码的,这个网络场景就是电脑通过PPP拨号上网。
    电脑PPP拨号上网
    同学们会很疑惑,为何PPP拨号上网,就不需要网络掩码?
    在电脑眼里只有2种通信

    • 自己与自己的通信
    • 与其它电脑的通信

    还有吗?没有了!

    电脑通过拨号上网获得IP = 6.6.6.6,不需要网络掩码,看看电脑能否判断出是以上哪种通信方式?
    简单的二叉树判断逻辑,如果电脑访问 IP = 6.6.6.6,那么就是和自己通信。TCP/IP协议栈将要发送的IP报文在体内循环一下,又被自己接收了回来。
    如果电脑访问的IP ≠6.6.6.6,那么就是与其它电脑通信。TCP/IP协议栈将要发送的IP报文,朝着拨号接口的方向向下流动,顺着网线/光纤流动到尽头。至于对端如何处理,压根不需要关心,也关心不了。如同射出去的箭、泼出去的水,天要下雨,女神要嫁人,随她去吧。。。是不是这样?

    但是,电脑连入以太网、或无线局域网,却面临着三种通信方式。

    • 自己与自己的通信
    • 与自己相同网段的电脑通信
    • 与除了以上两种的其它电脑通信

    这里有三个判断分支,不依靠网络掩码的帮助,单纯依靠对方IP是否和自己相同的时代结束了!

    脑连入以太网,获得IP = 6.6.6.6,网络掩码 = 255.255.255.0,网关 = 6.6.6.1,看看电脑是如何完成三个分支的判断逻辑。

    自己与自己的通信

    电脑访问 IP = 6.6.6.6,那么就是和自己通信,和上文一样的处理。

    与自己相同网段的电脑通信

    电脑访问 IP = 6.6.6.8,使用网络掩码255.255.255.0的“255.255.255”,从左到右对齐掩盖6.6.6.8,被遮住的数字为“6.6.6”,这个“6.6.6”就是对方的网段,和自己的是相同的

    相同网段的通信,需要使用ARP广播获取对方的MAC地址。成功获得之后,TCP/IP协议栈完成了以太网头的封装,就可以将封装好的报文朝着网卡接口的方向向下流动,顺着网线/无线流动出去,最后被对方接收。

    与除了以上两种的其它电脑通信

    电脑访问IP = 8.8.8.8,使用网络掩码255.255.255.0的“255.255.255”,从左到右对齐掩盖8.8.8…8,被遮住的数字为“8.8.8”,而自己的却是“6.6.6”,很显然8.8.8 ≠6.6.6,这是不同网段的通信。

    既然被访问的主机位于另外的网段(广播域),很显然不可能通过ARP广播来发现对方的MAC地址,对吗?

    电脑遇到这种情况,唯一的选择就是求助网关。网关的存在价值,就是帮助电脑完成不同网段的通信,否则要你网关有何用啊?

    既然求助于网关,需要先知道网关的MAC地址。

    网关的网段 = 6.6.6,和自己是一模一样的,所以是相同网段(广播域),那么使用ARP广播就可以获得了。

    成功获得了网关的MAC地址,就可以将访问IP = 8.8.8.8的IP报文打包了,目的MAC = 网关的MAC。TCP/IP协议栈就将打包好的报文,朝着网卡接口的方向向下流动,顺着网线/无线流动到网关。

    至于网关如何处理,也不需要关心,因为电脑已经成功完成自己的判断逻辑,完成了自己的任务。

    网关的历史使命
    互联网由亿万万个不同网段(广播域)融合在一起的大型网络,网关通常连接着多个广播域,使得不同广播域主机之间的通信成为可能。

    广播报文到了网关,生命就走到了终点。只有单播报文才有可能跨越网关,在不同广播域之间传播!

  • 相关阅读:
    模式分类与“组件协作模式”
    SpringBoot打包部署最佳实践
    2024全国水科技大会暨新能源及电子行业废水论坛(十一)
    通过 Canal 将 MySQL 数据实时同步到 Easysearch
    (22)STM32——RTC时钟笔记(基于正点原子探索者)
    net自动排课系统完整源码(适合智慧校园)
    C++静态成员变量必须在类的定义之外进行声明 (error LNK2001: unresolved external symbol)
    链表面试题(图文详解)
    idea中 maven 本地仓库有jar包,但还是找不到,解决打包失败和无法引用的问题
    算法-二叉树-leetcode.114 二叉树展开为链表 题解
  • 原文地址:https://blog.csdn.net/kaszxc/article/details/134373662