网络包到底是如何传输的?

288 阅读5分钟

网络包到底是如何传输的?

网络这块具体实现确实复杂,以下仅代表个人理解,如有错误恳请大家指正。

1. OSI 模型 和 TCP/IP 模型

Untitled.png

2. 网卡、交换机、路由器?

本节图片全部来自参考文献,如有侵权,立即删除。

  • 网络传输主要网络设备其实就三个:网卡、交换机、路由器

  • 信息在传输过程通过操作系统网络协议栈不断加头部会有不同的名称,一般来说称呼如下:

    原始信息(应用层)— payload(有效负载)

    报文(传输层)— payload + TCP/UDP header

    数据包(网络层)— payload + TCP/UDP header + IP header

    数据帧(数据链路层)— payload + TCP/UDP header + IP header + MAC header + 帧尾

    数据帧到达网卡后,就发送出去了。

    其实也不用太在意如何称呼,传输过程中 MAC header 会不断更新。

2.1 网卡是什么?它起着什么作用?

  1. 网卡是什么?
  • 网卡是 接受和发送网络数据包 的设备。
  • 操作系统安装网卡驱动后通过 I/O 总线 通信与网卡交互。
  • 网卡一般实现以太网协议,对数据帧进行校验。
  1. 网卡的作用
  • 接收到正确的数据帧,以中断方式通知计算机。
  • 发送数据帧时,接受操作系统协议栈给的数据包,组装成帧(加上 MAC header 和 帧尾),发送出去。

2.2 为何要发明交换机?它解决了什么问题?

介绍交换机之前,我们先假设下列情况

  1. 一根网线 + 两个网卡 就可完成两台电脑的通信,如下所示:

Untitled 1.png

  1. 那只有网线(或者任何能够传输二进制信息的媒介)和网卡实现 N 台电脑通信,需要(N*N - 1)/2 根网线 + N -1 * N 个网卡,但电脑插不了这么多网卡,如下所示:

Untitled 2.png

  1. 为了解决 O(N^2) 的布线问题,引入了集线器(广播),通过 MAC 地址唯一标识每个电脑上的网卡,如下所示:

Untitled 3.png

  1. 但集线器每次都是广播,浪费网络资源,这个集线器能否智能一点,广播变成单播呢?交换机应运而生,它相当于 集线器 + MAC 地址表,MAC 地址表的初始化也是通过广播填充的。

Untitled 4.png

2.3 为何要发明路由器?它解决了什么问题?

交换机的出现已经解决了 PC 之间的通信,为何还需要路由器这种设备呢?IP 地址在链路传输有用吗?IP 地址存在的意义到底是什么?

  1. 假如世界上所有电脑都只通过 交换机 互联,会有什么问题?

Untitled 5.png

这跟红线在 MAC地址表内是 4 条记录。

Untitled 6.png 想想交换机后面连了多少台电脑,与之相连的交换机就有多少个地址项,这庞大的映射关系交换机无法存储。

  1. 问题出在 MAC 地址项 随着接入主机数量的增多而增加,如何解决这个问题?路由器出现了,路由器是拥有 MAC 地址的设备,可以进行包的转发。(交换机其实不需要MAC地址,但现在交换机大多也有MAC地址便于配置和通信 )

Untitled 7.png

  1. 路由器如何做到把发给 C 和 D 的数据包发送给路由器呢?路由器如何转发呢?IP地址应运而生。

    IP地址 是软件层面上的,可以随时修改。MAC地址一般是不可以修改的。

Untitled 8.png

现在由于引进了 IP 地址,C和D处在同一个网络,我们就可以将 发给 C 和 D 的数据包发给路由器 ,然后路由器进行转发。

  1. 路由器如何转发?

    • A 给 C 发数据包,如何知道是否需要通过路由器转发?

    子网,若在同一子网,直接交换机出去,IP header 对链路传输没有作用,若不在同一子网,发送给路由器。

    • A 如何知道那个设备是路由器?

    在 A 上设置默认网关,默认网关的作用就是,A 在自己电脑配的 一个 IP地址,当发给不同子网的机器时,发给这个 IP 地址。

    • 路由器如何知道 C 在哪里?

    路由表,由路由算法生成。

    • 链路传输是,需要MAC,如何知道链路上点对点的 MAC 地址?

    ARP

3. 总结

  • 常见的一个问题是:有了 IP 地址,为什么还要用 MAC 地址?这样提问可能是由于网络模型(自上而下)先入为主的影响,网络分层只是逻辑上的分层,各个网络设备其实在现实生活中就是平铺组织的。个人觉得提问可以改成 有了MAC 地址 为何还需要 IP地址? 这样子更符合网络发展历史。
  • IP地址的发明用于解决路由转发问题,MAC 地址用于唯一标识一台网络设备,它们两是互相配合的。
  • 交换机解决同一子网的数据转发,路由器解决不同子网的数据转发。

Untitled 9.png

Untitled 10.png

参考文献

有了 IP 地址,为什么还要用 MAC 地址?