数据链路层实现了链路接入功能,负责将数据从一个节点传输到相邻的节点。
数据链路层的协议很多,以太网是其中最为流行的一个。通过以太网通信的主机,需要连接到同一个以太网网络。不管采用何种设备,以何种方式连接,以太网从逻辑上都可以抽象成这样:
以太网中的主机都是邻居关系,任何主机都可以通过以太网帧与其他主机进行直接通信。
当然了,设备和连接方式会影响通信的效率,但不会改变通信逻辑。
单个以太网的规模是非常有限的,但我们可以用网络层设备—— 路由器 ,将多个以太网组织成更大的网络。大网络内的所有主机,都可以通过网络层协议—— IP协议 ,进行通信。
为了彻底理解网络层、IP协议以及路由器的工作原理,我们构建一个极简网络拓扑,深入研究:
图中有两个以太网络,分别是以太网①和以太网②。以太网①中有三台主机,分别是 ant 、bee 和 cicada ;以太网②中有两台主机,apple 和 banana ;中间的路由器,同时接入这两个以太网。
我们给以太网①中的通信实体,分配一个 192.168.1.x 段的 IP 地址:
通信实体 |
网卡 |
MAC地址 |
IP地址 |
---|---|---|---|
路由器 | eth1 | fa:1c:b2:d0:b0:01 | 192.168.1.1 |
ant | eth0 | 1e:1f:84:08:d2:aa | 192.168.1.2 |
bee | eth0 | e6:04:b1:10:f1:bb | 192.168.1.3 |
cicada | eth0 | ce:ba:ec:ff:fd:cc | 192.168.1.4 |
同样,给以太网②中的通信实体,分配一个 192.168.2.x 段的 IP 地址:
通信实体 |
网卡 |
MAC地址 |
IP地址 |
---|---|---|---|
路由器 | eth2 | ee:21:30:4a:5a:02 | 192.168.2.1 |
apple | eth0 | b6:f1:81:44:21:11 | 192.168.2.2 |
banana | eth0 | 22:5b:7c:b3:d6:22 | 192.168.2.3 |
此外,每个通信实体还需要配置路由表,我们列举几个例子:
通信实体 |
规则 |
---|---|
ant | 192.168.1.x 直接从eth0网卡发出去;192.168.2.x 先发给192.168.1.1,由它负责转发 |
bee | 192.168.1.x 直接从eth0网卡发出去;192.168.2.x 先发给192.168.1.1,由它负责转发 |
apple | 192.168.2.x 直接从eth0网卡发出去;192.168.1.x 先发给192.168.2.1,由它负责转发 |
路由器 | 192.168.1.x 直接从eth1网卡发出去;192.168.2.x 直接从eth2网卡发出去 |
路由表准备好后,主机就可以互相通信了,分为两种不同场景:
主机 ant 和 bee 接入同一个以太网络,它们的 IP 地址也在同一段,这样与主机直接连接的网络称为 本地网 。同一网络内的主机可以直接通信,无须借助第三方。具体如何进行呢?
假设主机 ant 通过 IP 协议向主机 bee 发送数据,数据封装成 IP 包,其中:
IP 包封装好后,主机查询路由表:去往 192.168.1.x 网段的 IP 包,可以直接从 eth0 网卡发出去。这表明:目标网络就是 eth0 网卡接入的本地网络,该 IP 包可以通过以太网帧直接发给目标主机。
接着,主机将 IP 包封装到以太网帧中,从 eth0 网卡发送出去,其中:
那么,主机 ant 怎么知道 192.168.1.3 这台主机( bee )的 MAC 地址呢?实际上,主机 ant 内部需要维护一张映射表,记录本地网主机 IP 到 MAC 地址的映射关系:
IP地址 |
MAC地址 |
备注 |
---|---|---|
192.168.1.1 | fa:1c:b2:d0:b0:01 | 路由器 |
192.168.1.3 | e6:04:b1:10:f1:bb | bee |
192.168.1.4 | ce:ba:ec:ff:fd:cc | cicada |
至于这个映射表是如何获得的,谜底将在 ARP 协议一章揭晓。
主机 bee 接到以太网帧后,即可取出 IP 包,进而取出封装在其中的数据。
这就是本地网主机通过 IP 协议通信的全过程,请结合下图理解,重点体会 IP 包和以太网帧的地址:
主机 ant 和 apple 位于不同的网络中,IP 地址也不在同一段,无法直接通信。这种跨网络通信称为 网际通信 ,需要借助 路由器 来实现。具体步骤又是怎样的呢?
假设主机 ant 通过 IP 协议向主机 apple 发送数据,数据封装成 IP 包,其中:
IP 包封装好后,主机查询路由表:去往 192.168.2.x 网段的 IP 包,需要先发给路由器 192.168.1.1 ,由它负责转发。由于路由器 192.168.1.1 位于本地网,主机可以将 IP 包搭载在以太网帧中,通过 eth0 网卡发给它。
主机先根据路由 IP 地址从映射表中取出路由的 MAC 地址,然后完成以太网帧封装,其中:
当路由器接到以太网帧后,从中取出 IP 包,发现它是发往 192.168.2.2 的。路由器同样查询路由表,发现: 192.168.2.x 是个直连的本地网络,可以通过 eth2 网卡直接通信。
路由器从内部映射表中查到 192.168.2.2 对应的 MAC 地址,并将 IP 封装在以太网帧中从 eth2 网卡发出去:
主机 apple 接到以太网帧后,即可取出 IP 包,进而得到 ant 发给它的数据。
这就是网际主机通过 IP 协议通信的全过程,请结合下图理解,重点体会 IP 包和以太网帧封装和转发步骤:
route -n
tracert命令,通过向目标IP地址发送不同TTL值的Internet控制消息协议ICMP回应数据包,发送规则是:先发送TTL为1的回应数据包,并在随后的每次发送过程将TTL递增1,直到目标IP地址响应或TTL达到最大值。路径上的每个路由器,在转发数据包之前至少将数据包上的TTL递减1,直到TTL减为0时,路由器将ICMP超时消息发回源地址。通过检查ICMP超时信息,tracert命令就可以显示出目标IP地址所经过的路径。Tracert命令格式如下:Tracert[-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name如果不带选项的话,会将IP地址解析成主机名,因为需要查询DNS,所以速度比较慢。
这里说明下松散源路由和严格源路由,严格源路由是指,相邻路由器之间不得有中间路由器,并且所经过路由器的顺序不可更改。而松散源路由,则相反,相邻路由器之间可以有中间路由器。一般的路由追踪,也用不到-j这个选项。除非是针对大的网络故障,需要检测几条路径到达同一个目的地址,才需要使用-j选项。所以,通常情况下,我们使用tracert–d这种格式就可以了。我们以追踪抖音网站为例。
172.16.31.1 二级路由,192.168.50.1 一级路由,113.248.162.65 公网路由
Pathping命令的格式如下:pathping [-g host-list] [-hmaximum_hops] [-n] [-p period] [-q num_queries] [-w timeout] target_name
因此,在通常情况下,我们使用pathping -n格式就行了,路由追踪速度更快。下面,还是以百度为例:Pathping运行的第一个结果就是路由表,这个和tracert的结果是一致的。
https://blog.xqlee.com/article/2506171640272388.html