计算机网络|自底向上实践

网线直连

物理层面的端到端连接

+实现简单粗暴

-设备数量上升时布线混乱,物理线路数量几何式增长

集线器

中央设备无脑转发,通过接收方的MAC地址进行区分

类似同一个房间说话所有人都能听得到,但是每个人都会去”检查”喊的是不是自己,不是的话就不予理会

+物理层面广播,实现较为简单

-只支持单工通信。同一个时间只能有一个人在房间内说话

-带宽浪费,由于是广播因此会浪费不必要的通信成本

-性能问题,所有设备共享一个相同的集线器带宽,设备越多,网络越拥挤

交换机

“智能学习”、精确通知的集线器

相比于集线器的广播,交换机内部维护了一个MAC地址映射表,Map<MAC, portNumber>

一开始表没数据,还是通过广播的方式,收到接入设备的应答后更新表数据用于下次精准转发;

随着接入物理设备的变动,这张表会动态变更。最终实现通信数据的精准转发(指定端口)

交换机位于计算机网络模型中的数据链路层

IP&路由

基本组成

随着接入设备的上升,仅靠交换机也不够了。毕竟如果1000多个人,就需要几百个交换机。数据传输开销上而言、以及网络环境复杂度而言都是极为复杂不能接受的。

要是能将1000多个人分组,组内通过MAC进行学习并精准转发指定端口;组与组之间通过某个”管理员”进行消息传递就好了。

关键是如何设计一个地址系统,让设备既知道自己属于哪个小区,管理员又能据此找到目标小组?

由于MAC地址本质上是扁平的(因为每一个设备都有唯一的MAC地址),就像是身份证号,全国所有人只靠身份证号去检索依然十分困难。而通过精确到省——市——区的层级搜索方式,能够更快且精准定位:这就是ip地址系统的设计思想。而那个根据 IP 地址在小组之间转发消息的管理员就是路由器

IP基础计算

1)IP地址构成:

  • IP地址(如192.168.1.11)是32位二进制数,分 4 段显示(四个 8 bit)
  • 每段0-255,称为”点分十进制”

在同一个小组(小区),我们一般叫做一个子网:

  • 同子网内的设备可以直接通信
  • 不同子网要通过路由器转发

2)那么怎么判断是不是在一个子网呢?这就需要提到子网掩码了:

子网掩码也是由 32 位二进制数组成,连续的 1 表示网络部分,连续的 0 表示主机部分。

如 255.255.255.0 转为二进制就是 24个1和 8 个 0,简写为 /24,表示前面 24 位都是网络部分。

判断同网段:

  • 将IP地址和子网掩码做”与”运算,结果相同的IP就在同一网段
  • 如:192.168.1.11和192.168.1.22都与255.255.255.0运算后得到192.168.1.0

3)网关:

  • 通常是路由器的IP地址,作为子网对外的”门户”
  • 不同子网之间进行通信时,数据先发给网关
  • 比如192.168.1.1常作为默认网关

需要注意的是,路由器的引入只是随着计算机网络系统复杂度上升所引入的新系统。在之前的例子中,一开始我们通过直连、然后是集线器广播,再到交换机,这些都是通过MAC寻址。而路由器最终发送数据也需要借助MAC地址通过网线。随着层次上升,对于下层的系统技术只是进行了增强,在最终依赖的路径上并未舍弃。就像寄快递:

  • IP 地址相当于城市、街道:决定包裹该送到哪个区域
  • MAC 地址相当于收件人身份信息:最后一步实际交付

由于最终上层的协议/系统技术还是需要下层来进行落地交付,因此位于分层模型中 下层的数据包,数据部分总是会包含完整的上一层的header和数据。

局域网内数据包传输

我们假设有两个设备,设备A(IP:192.168.1.11 MAC:AA-11)和设备B(IP:192.168.1.22 MAC:BB-22),现在设备A要向设备B发送数据,忽略更高层的数据包细节,我们现在已经到了网络层。

  1. A要判断B是否和自己在一个局域网内,子网掩码都是/24,计算得出在一个子网内。

  2. 但是要发送数据,光知道 IP 地址是不够的,在同一个子网内,计算机之间要用 MAC 地址通信。

  3. 所以电脑 A 想:“我得先知道电脑 B 的 MAC 地址”。于是它在局域网内大喊一声(发送ARP广播):**”谁是192.168.1.22啊?请告诉我你的MAC地址!”**

  4. 同一个子网的所有电脑都收到了这个广播,但发现叫的不是自己,都默默丢弃了,只有设备 B 回应道:**”192.168.1.22 是我!我的MAC地址是BB-22。”**

  5. 电脑 A 收到这个回应后,会把 192.168.1.22-BB-22 这个映射关系记在自己本机缓存中,这个就叫 ARP 缓存。

    而这个过程就是 ARP 协议的作用 - 通过IP地址找到对应的MAC地址

  6. 有了 MAC 地址后,设备A就可以直接发送数据包了,它把业务数据包封装成一个特殊的”双层信封”:先在内层信封上写上IP地址”192.168.1.22”(这就是IP头),然后把它放入外层信封,在外层信封上写上”收件人MAC地址:BB-22”(这就是MAC头)。

    这样的双层结构保证了数据包既能通过 IP 地址确定目的地,又能通过 MAC 地址在本地网络中准确投递。

  7. 路由器(携带交换机功能)看到 MAC 地址,立刻就知道该从哪个端口转发出去,于是数据包就准确送达了设备B。

由于是同一个局域网内,因此在IP包的下一层,也就是数据链路层的时候只需要拿到设备B的MAC地址即可


计算机网络|自底向上实践
http://example.com/2025/11/17/计算机网络-自底向上实践/
作者
Noctis64
发布于
2025年11月17日
许可协议