好问题!
这个问题的答案,我认为如果不好好说一说“吓一跳”(划掉)“下一跳”(或称:网关、闸道器)的意义,是不能从根本上说清楚的。
〇、前提知识
我首先假定读者知道路由表以及路由查找的基本概念,也了解网络的层次模型。
一、术语
为了避免歧义,我先把后文中的术语在此罗列如下,你可以跳过该部分,而是在遇到术语时返回查阅。
数据包(packet):IP 协议传送数据的单位;帧(frame):链路层传送数据的单位;节点(node):实现了 IP 协议的设备;路由器(router):可以转发不是发给自己的 IP 包的设备;主机(host):不是路由器的节点;链路(link):一种通信机制或介质,节点可以通过它在链路层通信。比如以太网、PPP 链接,也包括隧道;接口(interface):节点与链路的连接(可以理解为抽象的“网卡”);链路层地址(link-layer address):接口的链路层标识符(如以太网的 mac 地址);
二、以太网络中包的转发
要想讲清楚这个问题,我们要从 IP 的工作过程说起。来看网络拓扑:
192.0.2.0/24 203.0.113.0/24| |+-----+ | | +------+| A |----+ +----| B |+-----+ | | +------+192.0. | | 203.0.2.3 | 192.0.2.1 +-----+ 203.0.113.1 | 113.4+-----------| R |-----------------+| en0 +-----+ en1 || |
我们现在考虑这样的一个网络,这个网络中有两个链路(介质是以太网),分别是 192.0.2.0/24 和203.0.113.0/24。两个链路中各有一个主机,接口的地址分别是 192.0.2.3 与203.0.113.4,子网掩码都是 /24。有一个路由器 R,有两个接口,分别与这两个链路相连,地址分别是 192.0.2.1 和203.0.113.1 ,子网掩码都是 /24。A 和B都把 R 作为自己的默认网关。
今A要给 B 发送一个数据包。按照 IP 协议的工作过程,发生的事情应该是这样的:
A 生成一个数据包,目的地址填 203.0.113.4,源地址填 192.0.2.3