数据包旅行(packet Traveling)
网络的两种模型: TCP/IP 模型、OSI模型
概念 客户端是发起请求的实体,服务器是接收请求的实体, 网络只是两个或多个连接的设备连接起来
TCP/IP 模型与 OSI 模型的对比
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 报头中的每一个都处理“跳到跳”传递.
概括
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 表:
ARP 请求示例:
-
当客户端试图与同一网络中的主机通话时,客户端将发出主机 MAC 地址的 ARP 请求。
第二层的标头:
-
当客户端尝试与外部网络中的主机通话时,客户端将发出默认网关 MAC 地址的 ARP 请求。
第二层的标头:
-
ARP 的操作 当客户端与 同一网络中的主机通话时,它将针对主机的 MAC 地址进行 ARP 当客户端与 不同网络中的主机通话时,它将针对默认网关的 MAC 地址进行 ARP
-
注意 任何打算基于 IP 地址 (L3) 转发数据包的设备也必须具有将数据包传递到下一跳 (L2) 的能力。因此,任何使用 IP 地址的设备也必须使用 ARP 来使用 MAC 地址传送数据包。因此,所有第 3 层设备都必须维护一个 ARP 表。
主机间通信
两个主机直接连接
- 主机 A 向主机 B 发送请求
主机是 L3 设备,有 ARP 表初始为空,发送请求需要构造 L3 L2 标头,构造 L2 标头,发送 ARP 请求,ARP 请求作为广播发送(ARP 请求是一个单独的数据包,本质上是询问:“如果有人使用 IP 10.10.10.20,请将您的 MAC 地址发送给我。“),主机收到请求,发送 ARP 响应作为单播消息,并添加主机 IP-MAC 地址存储到 ARP 表中
通过交换机连接主机
- 主机 A 向主机 B 发送请求
交换机是 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 表
(2)填充路由
-
直连路由:当路由器接口配置了特定的 IP 地址时,路由器将知道它直接连接到的网络。
-
静态路由:静态路由是由管理员手动配置的路由。
-
动态路由:路由器自动检测并相互交谈,以告知对方他们的已知路由。有多种协议可用于动态路由,每种协议代表不同的策略
(3)如果路由器接收到一个不在路由表中的网络中的数据包,那么就该路由器而言,该网络一定不存在。
数据包的封装与解封装
数据在发送时如何从上到下以及在接收时如何从下到上移动。
当数据从一层传递到另一层时,每一层都会添加完成其目标所需的信息,然后才能将完整的数据报转换为 1 和 0 并通过线路发送。例如:
- 第 4 层将添加一个 TCP 标头,其中包括源端口和目标端口
- 第 3 层将添加一个 IP 标头,其中包括源 IP 地址和目标 IP 地址
- 第 2 层将添加一个以太网报头,其中包括源 MAC 地址和目标 MAC 地址
解封装时反向剥离以太网报头、IP 标头、TCP 标头
数据包的传递
- 网络拓扑图如下:
为了简单方便,以下 MAC 地址都是四位十六进制简写
-
1. 主机 A 向主机 B 发送数据 过程: 主机 A 封装数据包并发送到路由器 R1,R1 转发数据包到主机 B,主机 B 接收到数据包并解封装
主机 A 发数据包到路由器 R1 路由器 R1 是 11.11.11.x 的默认网关,主机 A 的 ARP 表可能已经有了路由器 R1 的记录,如果没有记录,则发送 ARP 请求获取路由器 R1 的 MAC 地址,数据报文如下:
L3 L2 SRC(源 IP): 11.11.11.17 SRC(源 MAC 地址): aaaa DST(目标 IP): 22.22.22.88 DST(目标 MAC 地址): aa11 R1 转发数据包到主机 B 路由器 R1 的 ARP 表如果有主机 B 的 MAC 地址(无 MAC 地址则发送 ARP 请求获取),则剥离 L2 标头重新生成新的 L2 标头(MAC 地址负责从这一跳传递到下一跳)。重新生成的数据报文如下:
L3 L2 SRC(源 IP): 11.11.11.17 SRC(源 MAC 地址): bb11 DST(目标 IP): 22.22.22.88 DST(目标 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 地址,数据报文如下:
L3 L2 SRC(源 IP): 11.11.11.17 SRC(源 MAC 地址): aaaa DST(目标 IP): 22.22.22.88 DST(目标 MAC 地址): aa11 R1 转发数据包到路由器 R2 路由器 R1 的 ARP 表如果有路由器 R2 的 MAC 地址(无 MAC 地址则发送 ARP 请求获取),则剥离 L2 标头重新生成新的 L2 标头(MAC 地址负责从这一跳传递到下一跳)。重新生成的数据报文如下:
L3 L2 SRC(源 IP): 11.11.11.17 SRC(源 MAC 地址): bb11 DST(目标 IP): 22.22.22.88 DST(目标 MAC 地址): bb22 R2 转发数据包到主机 C 路由器 R2 的 ARP 表如果有主机 C 的 MAC 地址(无 MAC 地址则发送 ARP 请求获取),则剥离 L2 标头重新生成新的 L2 标头(MAC 地址负责从这一跳传递到下一跳)。重新生成的数据报文如下:
L3 L2 SRC(源 IP): 11.11.11.17 SRC(源 MAC 地址): cc22 DST(目标 IP): 22.22.22.88 DST(目标 MAC 地址): cccc
本文绝大多数资料来源网上,只是为了自己加深理解才写篇博客整理总结,若是哪里有不足之处请评论区指出。