你不知道的数据包旅行😄😄😄

604 阅读10分钟

数据包旅行(packet Traveling)

网络的两种模型: TCP/IP 模型、OSI模型

概念 客户端是发起请求的实体,服务器是接收请求的实体, 网络只是两个或多个连接的设备连接起来

TCP/IP 模型与 OSI 模型的对比

packetModel.jpeg

OSI 模型:

  • 第一层物理层: 在两个节点之间携带 1 和 0 的任何东西,网线、中继器、wifi

  • 第二层数据链路层:将这些 1 和 0 组合成称为帧的块。存在一个寻址系统,称为媒体访问控制地址或 MAC 地址。MAC 地址唯一标识每个单独的 NIC(网卡)。每个网卡都由制造商预先配置了一个MAC地址;事实上,它有时被称为刻录地址 (BIA)。将数据包从一个 NIC 传递到另一个 NIC(将数据包从一跳传递到另一跳。)

  • 第三层网络层:负责端到端的数据包传递。使用 IP 地址( Internet 协议地址)的寻址方案,主要设备有路由器,主要作用促进网络间的通信。

  • 第四层传输层:负责区分网络流,使用称为端口号的寻址方案

  • 第五、六、七层:会话、表示和应用层处理在通过网络传输的数据(由第 1-4 层促进)显示给最终用户之前的最后步骤。

OSI 第2、3层

  • 第 2 层使用 MAC 地址并负责从一跳到另一跳的数据包传递。
  • 第 3 层使用 IP 地址 ,负责端到端的数据包传送。

IP 标头:包括源 IP 地址和目标 IP 地址 MAC 地址标头:包括源 MAC 地址和目标 MAC 地址

在每个路由器之间,MAC 地址标头被剥离并重新生成以使其到达下一跳。第一台计算机生成的 IP 报头仅被最后一台计算机剥离,因此 IP 报头处理“端到端”传递,而动画中涉及的四个 不同MAC 报头中的每一个都处理“跳到跳”传递.

packetMove.gif

概括

OSI 各层的主要目的

  • OSI 第1层是通过网络传输 1和 0 的物理介质
  • OSI 第2层负责 跳到跳交付并使用MAC 地址
  • OSI 第3层负责端到端交付并使用IP 地址
  • OSI 第4层 负责 服务到服务的交付并使用端口号

传递数据包的参与者

  • 交换机促进网络 内的 通信并在第2层运行
  • 路由器促进网络 之间 的通信并在第3层运行
  • ARP 使用已知IP地址解析未知MAC地址

存储的表

  • 交换机使用 MAC 地址表,该表是交换机端口到连接的MAC地址的映射
  • 路由器使用路由表,它是已知网络到接口或下一跳地址的映射
  • 所有 L3 设备都使用ARP 表,该表是IP 地址到MAC 地址的映射

地址解析协议(ARP)

  • ARP 通过 IP 地址,获取 MAC 地址,并且将获取的结果存储到 ARP 表中,该表是 IP 地址--MAC 地址的映射。 ARP 表是“按需”填充的。 ARP 的作用是帮助客户端根据 L3 标头创建正确的 L2 标头,以便将数据包从一跳传递到下一跳。 ARP 表:

arpTable.png

ARP 请求示例:

packetArp.png

  • 当客户端试图与同一网络中的主机通话时,客户端将发出主机 MAC 地址的 ARP 请求。

    第二层的标头:

arpPaket1.png

  • 当客户端尝试与外部网络中的主机通话时,客户端将发出默认网关 MAC 地址的 ARP 请求。

    第二层的标头:

arpPaket2.png

  • ARP 的操作 当客户端与 同一网络中的主机通话时,它将针对主机的 MAC 地址进行 ARP 当客户端与 不同网络中的主机通话时,它将针对默认网关的 MAC 地址进行 ARP

  • 注意 任何打算基于 IP 地址 (L3) 转发数据包的设备也必须具有将数据包传递到下一跳 (L2) 的能力。因此,任何使用 IP 地址的设备也必须使用 ARP 来使用 MAC 地址传送数据包。因此,所有第 3 层设备都必须维护一个 ARP 表。

主机间通信

两个主机直接连接

  • 主机 A 向主机 B 发送请求 atobArp.png 主机是 L3 设备,有 ARP 表初始为空,发送请求需要构造 L3 L2 标头,构造 L2 标头,发送 ARP 请求,ARP 请求作为广播发送(ARP 请求是一个单独的数据包,本质上是询问:“如果有人使用 IP 10.10.10.20,请将您的 MAC 地址发送给我。“),主机收到请求,发送 ARP 响应作为单播消息,并添加主机 IP-MAC 地址存储到 ARP 表中

通过交换机连接主机

  • 主机 A 向主机 B 发送请求 transAToB.gif 交换机是 L3 设备,ARP 表初始为空,发送 ARP 请求,交换机泛洪获取 MAC 地址,主机 B 将IP-MAC 地址存储到 ARP 表中,主机 A 获取到 MAC 地址,构造请求发起请求。

交换机

  • 主要目的是促进网络内的通信,通过维护 MAC 地址表(映射插入每个交换机端口的设备的 MAC 地址)运行,MAC 地址表是通过查看任何接收帧的源 MAC地址字段来填充的。 为了转发帧,交换机会查找 MAC 地址表找到目标 MAC 地址使用的端口,如果找不到目标 MAC 地址的端口,就泛洪获取 MAC 地址的端口
  • 功能 (1)学习:创建MAC 地址表,将其每个交换机端口映射到所连接设备的 MAC 地址。

(2)泛洪:交换机不可避免地会在某些时候收到一个帧,该帧的目的地是交换机不知道其位置的 MAC 地址。 在这种情况下,交换机的唯一选择是简单地复制帧并将其发送到所有端口。每个连接设备的 NIC 将接收该帧并查看目标 MAC 地址字段。 如果他们不是预期的接收者,他们只会默默地丢弃帧。当目标设备接收到该帧时,将生成一个响应,该响应在发送到交换机时将允许交换机学习并创建一个 MAC 地址表,将该未知设备映射到其交换机端口。

(3)转发:交换机可以通过三种方法转发帧:

  • 存储和转发。交换机将整个帧(报头+数据)复制到内存缓冲区中,并在转发之前检查帧是否有错误。速度最慢

    • 直通。交换机不存储任何内容,只检查读取目标 MAC 地址和转发帧所需的最低限度。速度快
  • 前两种方法的混合。在转发帧之前,交换机仅检查帧的第一部分(64 字节)。如果发生传输错误,通常会在前 64 个字节内注意到。提供了“足够好”的错误检测,获得了在转发之前避免将整个帧存储在其内存中的速度和效率。

    • 在现代,通过线速交换,这三者之间的速度差异可以忽略不计,并且大多数交换机在存储和转发模式下运行。 (4)过滤:交换机永远不会将帧转发回发送方的同一端口。

(5)广播:广播帧是发给本地网络上每个人的帧。目标 MAC 地址字段填充了一个特殊地址:ffff.ffff.ffff。“全F”地址是专门为广播目的而保留的。由于地址 ffff.ffff.ffff 被保留,交换机无法为其学习 MAC 地址表映射。因此,任何发往该 MAC 地址的帧将始终被泛洪。

路由器

  • 主要目的是促进网络之间的通信,维护路由表运行,路由表是包含路由器知道如何到达的所有网络的路径的表。

  • 路由自学习: 直连路由,静态路由,动态路由

  • 从每个路由器的角度来看, 路由表是存在的每个网络的映射。因此,当路由器接收到发往不在其路由表中的网络的数据包时,该数据包将被丢弃。

  • 功能 (1)填充和维护路由表、ARP 表

routeTable.png

(2)填充路由

  • 直连路由:当路由器接口配置了特定的 IP 地址时,路由器将知道它直接连接到的网络。

  • 静态路由:静态路由是由管理员手动配置的路由。

  • 动态路由:路由器自动检测并相互交谈,以告知对方他们的已知路由。有多种协议可用于动态路由,每种协议代表不同的策略

(3)如果路由器接收到一个不在路由表中的网络中的数据包,那么就该路由器而言,该网络一定不存在。

数据包的封装与解封装

数据在发送时如何从上到下以及在接收时如何从下到上移动。

当数据从一层传递到另一层时,每一层都会添加完成其目标所需的信息,然后才能将完整的数据报转换为 1 和 0 并通过线路发送。例如:

  • 第 4 层将添加一个 TCP 标头,其中包括源端口和目标端口
  • 第 3 层将添加一个 IP 标头,其中包括源 IP 地址和目标 IP 地址
  • 第 2 层将添加一个以太网报头,其中包括源 MAC 地址和目标 MAC 地址

解封装时反向剥离以太网报头、IP 标头、TCP 标头

packetEncode.gif

数据包的传递

  • 网络拓扑图如下: packetRouter.png

为了简单方便,以下 MAC 地址都是四位十六进制简写

  • 1. 主机 A 向主机 B 发送数据 过程: 主机 A 封装数据包并发送到路由器 R1,R1 转发数据包到主机 B,主机 B 接收到数据包并解封装

    主机 A 发数据包到路由器 R1 路由器 R1 是 11.11.11.x 的默认网关,主机 A 的 ARP 表可能已经有了路由器 R1 的记录,如果没有记录,则发送 ARP 请求获取路由器 R1 的 MAC 地址,数据报文如下:

    L3L2
    SRC(源 IP): 11.11.11.17SRC(源 MAC 地址): aaaa
    DST(目标 IP): 22.22.22.88DST(目标 MAC 地址): aa11

    R1 转发数据包到主机 B 路由器 R1 的 ARP 表如果有主机 B 的 MAC 地址(无 MAC 地址则发送 ARP 请求获取),则剥离 L2 标头重新生成新的 L2 标头(MAC 地址负责从这一跳传递到下一跳)。重新生成的数据报文如下:

    L3L2
    SRC(源 IP): 11.11.11.17SRC(源 MAC 地址): bb11
    DST(目标 IP): 22.22.22.88DST(目标 MAC 地址): bbbb
  • 2. 主机 A 向主机 C 发送数据 过程: 主机 A 发数据包到路由器 R1,R1 转发数据包到路由器 R2,R2 转发数据包到主机 C, 主机 C 接收到数据包并解封装

    主机 A 发数据包到路由器 R1 路由器 R1 是 11.11.11.x 的默认网关,主机 A 的 ARP 表可能已经有了路由器 R1 的记录,如果没有记录,则发送 ARP 请求获取路由器 R1 的 MAC 地址,数据报文如下:

    L3L2
    SRC(源 IP): 11.11.11.17SRC(源 MAC 地址): aaaa
    DST(目标 IP): 22.22.22.88DST(目标 MAC 地址): aa11

    R1 转发数据包到路由器 R2 路由器 R1 的 ARP 表如果有路由器 R2 的 MAC 地址(无 MAC 地址则发送 ARP 请求获取),则剥离 L2 标头重新生成新的 L2 标头(MAC 地址负责从这一跳传递到下一跳)。重新生成的数据报文如下:

    L3L2
    SRC(源 IP): 11.11.11.17SRC(源 MAC 地址): bb11
    DST(目标 IP): 22.22.22.88DST(目标 MAC 地址): bb22

    R2 转发数据包到主机 C 路由器 R2 的 ARP 表如果有主机 C 的 MAC 地址(无 MAC 地址则发送 ARP 请求获取),则剥离 L2 标头重新生成新的 L2 标头(MAC 地址负责从这一跳传递到下一跳)。重新生成的数据报文如下:

    L3L2
    SRC(源 IP): 11.11.11.17SRC(源 MAC 地址): cc22
    DST(目标 IP): 22.22.22.88DST(目标 MAC 地址): cccc

本文绝大多数资料来源网上,只是为了自己加深理解才写篇博客整理总结,若是哪里有不足之处请评论区指出。