Bootstrap

【翻译】数据包的旅程 - 关键角色

互联网将数以十亿计的设备连接在一起,创造了一个世界范围内的网络的网络。

下面讨论互联网中的几个关键部分,以辅助对数据包在互联网中如何传递进行更好的了解。

主机 - Host

host表示互联网中的任何终端设备。任何流量的发起方或者流量传输的终端都可以被视作host.

最普通的例子便是个人计算机。如今,有更多新的形式,例如:智能手机,智能电视,智能手表,部分汽车,甚至部分电冰箱等。

host通过运行软件实现与终端用户的交互,同时完成通过传输介质发送数据的职责。因此,host的职责跨越了OSI模型的所有七层。

在典型的计算机网络通信模型中,通信的双方通常被分别称作客户端(client)和服务端(Server)。

客户端发起请求,期望获取数据或者服务;而服务端接收并处理请求,并且返回客户端所需要的数据或者服务。

需要注意的是,这种角色划分是相对的。

例如,在浏览网页时,笔记本电脑承担客户端的角色,而Web Server承担服务端的角色;而当Web Server下载软件更新时,其本身则是客户端,而更新服务器为服务端。

网络 - Network

Network由两个或者更多相互连接的设备构成,这些设备通常要么共同完成职责,要么处于同一个物理位置。Network可以以不同的形式存在:

  • 处于同一间教室中的计算机

  • 家庭中由多台笔记本、智能手机、打印机组成的网络

  • 提供wifi的咖啡店,所有连接至这个wifi的设备构成了一个网络

  • 大型公司中可能会存在多个网络,通常按照工作角色的不同划分。例如,会计师属于一个网络,而所有工程师属于另一个网络

根据组网目的的不同,网络中的设备可能会与同一个网络中的其他设备进行通信,也可能会与其他网络中的设备通信。

互联网可以简单理解为一系列相互连接(Inter-connected)的网络(networks).

交换机 - Switch

交换机是一种主要负责实现网络内部通信的网络设备

在OSI模型中,交换机工作于Layer 2,这意味着交换机只会解析到数据包中的Layer 2包头。Layer 2 包头包含了一跳(hop to hop)中数据传输所需要的必要信息,例如源端和目标端的MAC地址。

交换机会维护一个MAC地址表,主要映射接入交换机的MAC地址和设备接入端口之间的关系。典型的交换机有多个端口,从24到48,96或者更多。

MAC地址表主要通过接收到的数据中的源端MAC地址进行填充

在转发数据帧时,交换机通过查找MAC地址表来决定需要转发的端口

如果交换机收到一个数据帧,并且不知道其目的MAC地址的位置,则会向所有端口都进行复制发送(除了接收到的端口)。

路由器 - Router

路由器的主要职责是实现网络间的设备通信。路由器在每个接入其的网络上都创建出了一个边界。

路由器工作在OSI模型的Layer 3. 这意味着路由器会解析到Layer 3的报文头。Layer 3报文头包含着实现端到端(end to end)数据传输所需要的信息,例如源端和目的IP地址。

在上面的图片中,路由器R1和R2隔离开了三个不同的网络(11.11.11.x,22.22.22.x 和 33.33.33.x)。R1的右端接口和R2的左端接口处于同一网中。

位于11.11.11.x网络中的终端要与位于33.33.33.x网络中的设备通信,则必须首先将数据发送给R1,R1将数据发送给R2,然后R2再将数据发送给目标设备。

路由器通过维护**路由表(Routing Table)**实现其主要功能。路由表包含着到达所有网络的路径信息。这些路径被称作路由信息,每条路由信息都包含一个IP网络,和一个到达目标设备路径上路由地址或路由接口。

路由表的填充有多重实现方式。

需要记住的是,从路由器的角度看,路由表是所有存在的网络的映射关系。如果一个路由器收到一个发送到未知网络的数据包,该数据包将会被丢弃。

地址解析协议 - Address Resolution Protocol, ARP

前面讨论了MAC地址和IP地址分别是属于L2和L3的寻址体系。

ARP协议实现对L2和L3寻址体系的连接。

一般来说,通信双方在通信时已经知道了对方的IP地址。这可以通过多种手段实现,如:用户手动提供,DNS解析等等。这里实际如何实现无关紧要。

但是,一般通信开始时,目标MAC地址是未知的。host会通过ARP协议寻找恰当的MAC地址。换句话说,ARP协议通过已知的IP地址,来找到未知的MAC地址。找到后,会添加到ARP表中,这个表维护着IP地址和关联MAC地址的映射关系。

通过下图来详细讨论ARP协议的工作过程。

在上图中,有紫色、灰色、红色三个网络。下面通过两个场景:网络内部通信和跨网络通信来讨论ARP协议。

当Client需要与紫色Server通信时,通过已知的紫色Server IP地址,可以得知该Server位于当前网络中。当客户端试图与位于同一个网络中的服务端通信时,客户端通过发送ARP请求来获得服务端的MAC地址

ARP协议使得Client可以完成如下的Layer 2包头填充:

当Client需要与红色Server通信时,通过已知的红色Server IP地址,可以得知该Server位于外部网络中。此时,必须首先将数据包发送到最近的路由器 (或默认网关)。

通常,Client都会配置一个默认网关,在上图中是R1. 当客户端试图与位于外部网络中的服务端通信时,客户端通过发送ARP请求来获取默认网关的MAC的地址

此时,ARP协议使得Client可以完成如下图所示的Layer 2包头填充:

总结ARP的功能:

  • 当与同一网络中的设备通信时,通过ARP获取该设备的MAC地址

  • 当与外部网络中的设备通信时,通过ARP获取默认网关的MAC地址

需要记住的是,Layer 2负责数据包的传递,其主要目标是实现每跳(hop to hop)的传递。Layer 3 则负责端到端(end to end )的数据传递,并不能实现将数据通过网卡进行发送和接收。ARP的角色是:基于L3包头,帮助客户端创建正确的L2包头,从而实现hop to hop的数据传递。

此外,所有基于IP地址实现通信的设备,必须具备通过L2实现hop to hop数据传递的能力。因此,所有使用IP地址的设备都必须使用ARP来填充MAC地址。从而,所有L3设备都必须维护一个ARP表(ARP Table)。

总结

本文和上一篇文章介绍了一系列概念(大部分都可以独立成书),主要是为了这一系列文章的后续内容进行铺垫。在进一步讨论之前,需要比较好地掌握这些概念。

我们论了OSI模型中每一层的主要职责:

  • OSI Layer 1: 传输0和1组成数据的物理介质

  • OSI Layer 2: 实现hop to hop的数据传递,使用MAC地址寻址

  • OSI Layer 3: 实现end to end的数据传递,使用IP地址寻址

  • OSI Layer 2: 实现service to service的数据传递,使用端口号(Port Numbers)寻址

同样,还讨论了数据包在互联网中传递过程中的关键角色:

  • 交换机,主要负责网络内部通信,工作于Layer 2.

  • 路由器,主要负责网络之间通信,工作于Layer 3.

  • APR协议通过已知的IP地址解析未知的MAC地址。

我们还讨论了三种不同的映射表:

  • 交换机使用MAC地址映射表,维护交换机端口和MAC地址之间的映射关系

  • 路由器使用路由表,维护网络和路由接口或者下一跳地址间的映射关系

  • 所有工作于L3的设备都需要维护一个ARP表,维护IP地址和MAC地址之间的映射关系

如果上述任何一个关键概念不清晰,请重新阅读本篇和上篇文章。