(主机)ARP表(ip/mac)、(交换机)交换/转发/MAC表(mac端口 同一网段)、(路由器)路由表(不同网段)

reference
转发表(Forwarding Table)
MAC地址

以太网地址或物理地址
它是一个用于确认网络设备位置的地址

每个网络设备(如网络适配器(Network Adapter),
即网卡(Network Interface Card, NIC))都有世上唯一的MAC地址,

一台设备若有多张网卡,
则每个网卡都必须具有一个唯一的MAC地址,
这个是在网络设备出厂时由厂商烧制确定。

工作流
转发表,又称MAC表–交换表

交换机就是根据转发表来转发数据帧的。

维护记录着局域网主机端口MAC地址与交换机端口对应的表,
交换机就是根据这张表负责将数据帧传输到指定的主机端口上的。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述步骤如下:

主机A会将一个源MAC地址为本机网卡物理地址,
目的MAC地址为主机B网卡物理地址的数据帧发送给交换机1;

交换机收到此数据帧后,
首先将数据帧中的源MAC地址和对应的输入端口0
记录到交换机维护的MAC地址表中;

然后交换机会检查自己的MAC地址表中
是否有数据帧中的目的MAC地址的信息,
如果有,则从MAC地址表中记录的对应端口发送出去,
如果没有,则会将此数据帧从非接收端口的所有端口发送出去,
这里仅从端口1发出;

这时,局域网的所有主机(通过交换机相连的全部主机)
都会收到此数据帧,
但是只有主机B收到此数据帧时会响应这个广播帧
并回应一个数据帧
(这个回应由什么机制确定的,需要再查资料确定一下~TCP的ACK包?),
此数据帧中包括主机B网络设备的MAC地址;

当交换机收到主机B回应的数据帧后,
也会记录数据帧中的源MAC地址,
即主机B网络设备的MAC地址
这时,再当主机A和主机B相互通信时,
交换机就根据MAC地址表中的记录实现单播了,
一趟转发流程实际交换机就“学习”到了两个转发表条目。

小结

从以上两幅图可以看出,
交换机具有动态自学习源MAC地址与物理端口映射的功能,
并且交换机的一个端口可以对应多个MAC地址,
但是一个MAC地址只能对应一个端口。


ARP表(Address Resolution Table)
首先明确一点,
在以太网环境下,
同一个网段的主机之间需要知道对方的MAC地址,
(通过交换机相连的节点处于同一网段)
才能进行通信。

了解到交换机是根据MAC寻址,
查表确认输出端口以完成本节点转发任务的。
看到这里其实应该可以抛出从一开始就被我们忽视了的问题:
在初始构造数据包准备发送时,
源主机究竟要如何获得目的主机网络设备MAC地址的呢?

这时,就需要使用到ARP协议。
在网络拓扑中的每个节点或说主机上, 实际都维护有一张ARP表,
它记录着主机的IP地址(网络地址)到MAC地址(物理地址)的映射关系。
ARP协议,
即地址解析协议,它是一个网络层协议,
运行在各网络节点上,负责完成主机IP地址到MAC地址的映射。

工作流
接下来根据下图,详细讲解一下ARP协议的工作原理:
在这里插入图片描述步骤如下:

如果主机A想发送数据包给同一网段内的另一台主机B(通过交换机相连的节点处于同一网段),
很明显,A的用户应用程序要么已经知道B的IP地址,
或者说域名(Domain Name,DNS协议会完成主机名到IP地址的映射,这里不是重点),
那么主机A首先会检查自己的ARP缓存表(ARPCache),
查看是否有主机B的IP地址与其MAC地址的对应关系,
如果有,则直接将主机B网络设备的MAC地址作为目的MAC地址封装到数据帧中,
无需进一步操作即获取到数据帧封装所需的全部信息,
此后完成封装并发送数据帧到目的MAC地址。

如果没有,主机A则会发送一个ARP请求信息(ARPRequest),
请求的目的IP地址是主机B的IP地址,
目的MAC地址是MAC层的广播地址(即ff:ff:ff:ff:ff:ff),
源IP地址和MAC地址是主机A的IP地址及其MAC地址;
当交换机接收到此数据帧之后,发现此帧是广播帧,
因此,会将此数据帧从非接收的所有端口发送出去;

同一网段中的所有节点都会接收到该ARP请求数据包,
目的IP不匹配的节点会直接忽略该请求,
而当主机B接收到此数据帧后,
解析到IP地址与自己的IP地址一致,
先将主机A的IP地址及其MAC地址的对应关系
记录到自己的ARP缓存表中
同时会发送一个ARP应答(ARPResponse),
应答数据包源MAC地址即主机B自身网络设备的MAC地址,
该应答通过交换机转发至主机A;
主机A在收到这个回应的数据帧之后,
在自己的ARP缓存表中记录
主机B的IP地址和MAC地址的对应关系。
而此时主机A已经可以继续封装准备发往主机B的数据帧,
而交换机也已经学习到了
主机A和主机B的MAC地址与其端口的对应关系

之后主机A发送的数据帧通过交换机转发至主机B。

这里有一点值得注意的是传输过程中IP地址与MAC的地址的变化问题:
?????

MAC地址在同一个广播域中传播时始终不变,
但在跨越广播域(即经过路由器)时,
会由于重新封装而改变,
源MAC地址将变为路由器的输出端口的MAC地址,
目的MAC地址随网络拓扑实际情况而定,

若路由器与目的主机所在网段直连,
此时目的MAC地址就是目的主机的MAC地址;
而不管是源IP地址还是目的IP地址,
在数据包传输过程中都始终不会改变。

小结

网络中每个节点都会通过运行ARP协议
而维护节点内部的一张ARP缓存表,
用于完成从IP地址到MAC地址的映射

在发送数据之前往往会先查询本地ARP表中对应目的IP地址的MAC地址,
若没没有表项则会发起ARP广播请求直至获取对应主机响应并发来应答
将该应答中包含的目的IP地址与MAC地址的映射关系
添加到ARP缓存表之后,

在数据链路层就可以以该MAC地址为目的MAC地址封装数据帧并发送。在这里插入图片描述在这里插入图片描述

在这里插入图片描述路由表(Routing Table)

IP地址

IP地址(Internet Protocol Address),
即互联网协议地址,也称为网络层地址或主机地址,
是分配给网络上的各个网络设备的地址。

现在流行的IP协议有两个版本:
IPv4(Internet Protocol Version 4) 和IPv6(Internet Protocol Version 6)。

其中,IPv4地址为32位,
即4个字节,为便于使用, 常以xxx.xxx.xxx.xxx
每个字节8位从二进制表示为十进制数, 这种表示方法称为点分十进制,
地址可分为A、B、C、D、E五大类,
32位全为1的IP地址: 255.255.255.255
称为“受限广播地址” (Limited Broadcasr Destination Address),
用于将一个分组以广播方式发送给本网络中的所有主机,
路由器则阻挡该分组通过,将其广播功能限制在本网内部,
因此可以说路由器隔离了广播域(交换机隔离了冲突域)。

随着网络规模和节点数量的不断扩展,
出于32位的IPv4将很快被分配使用殆尽的担忧,
又推出了IPv6地址,128位,16个字节,
通常每4位表示为一个16进制数,16个字节分为8组,
每组包含2个字节即4个16进制数,
组与组之间以冒号分割:
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff为IPv6协议下的广播地址。

IP VS MAC

MAC地址和IP地址本质都是网络设备物理端口的性质,
都可用于寻址网络设备
但如果它们功能类似,仅是工作的层次不同的话,
两者之间应该可以通过某种机制实现相互替换,
但为什么它们能共存至今呢?

对于MAC地址和IP地址的比较,
有人曾这么比喻:一个人已经有了手机号(IP地址),
为什么还要有身份证号呢(MAC地址)?
身份证号是一个人的唯一标识号,只要有这个号码就能找到该人,
但是为啥他的朋友们不用身份证号来寻找该人而用手机号呢?
对,因为方便。

但是如果该人犯罪,警察用手机号呼叫寻找该人,傻子才会接吧…
而且换了号码怎么办?
那不就得用你的身份证号在全国发布通缉令ip
利用身份证号在全国各种系统范围(消费、社交、医疗)内
搜索该人的记录,
才能最终定位该人实施有效逮捕嘛。

上述例子实际就契合了两种地址存在的意义:
IP地址是逻辑地址,
根据网络协议,
在不同的地理位置加入互联网
就会分配到完全不同的IP地址(DHCP动态分配IP地址)
但由于属于网络层,
相对较高的抽象层次设计的初衷就是为了简化通信,方便使用,
尤其对于用户进程而言;

MAC地址是物理地址,工作在数据链路层,
一旦出厂时由厂商确定并烧制入网络设备的EPROM中,
就具有了固定的全球唯一的地址,
任何时候任何条件都不会改变,
虽说使用起来不太方便,
且描述的是较低层的数据链路通信细节,
但在任何时候都可用于数据通信寻址。

更严谨完善的解释如下:
问题:
既然每个以太网设备在出厂时都有一个唯一的MAC地址了,
那为什么还需要为每台主机再分配一个IP地址呢?
或者说为什么每台主机都分配唯一的IP地址了,
为什么还要在网络设备(如网卡,集线器,路由器等)
生产时内嵌一个唯一的MAC地址呢?
解答:主要原因基于以下几点:
(1)
IP地址的分配是根据网络的拓扑结构,
而不是根据谁制造了网络设置。

若将高效的路由选择方案建立在设备制造商的基础上
而不是网络所处的拓扑位置基础上,这种方案是不可行的;
(2)
当存在一个附加层的地址寻址时,设备更易于移动和维修。
例如,如果一个以太网卡坏了,可以被更换
而无须取得一个新的IP地址。
如果一个IP主机从一个网络移到另一个网络,
可以给它一个新的IP地址,而无须换一个新的网卡;

(3)
无论是局域网,
还是广域网中的计算机之间的通信,
最终都表现为将数据包从某种形式的链路上的初始节点出发,
从一个节点传递到另一个节点,最终传送到目的节点。
数据包在这些节点之间的移动
都是由ARP协议负责将IP地址映射到MAC地址上来完成的。

下面再通过一个例子看看IP地址和MAC地址
是怎样结合起来传送数据包的:

假设网络上要将 一个数据包(名为PAC)
由北京的一台主机(名称为A,IP地址为IP_A,MAC地址为MAC_A)
发送到
纽约的一台主机(名称为B,IP地址为IP_B,MAC地址为MAC_B)。

这两台主机之间不太可能是直连起来的,
因而数据包在传递时
必然要经过许多中间节点(如路由器,网关服务器等),
假定在传输过程中要经过C1、C2、C3
(其输入、输出端口的
MAC地址分别为M1_In/M1_Out,M2_In/M2_Out,M3_In/M3_Out)三个节点。

A在将PAC发出之前,先发送一个ARP请求,
找到其要到达IP_B所必须经历的第一个中间节点C1的到达端口MAC地址M1_In,
然后在其数据包中封装地址:IP_A、IP_B,MAC_A和M1_In。
当PAC传到C1后,再由ARP根据其目的IP地址IP_B,
找到其要经历的第二个中间节点C2的到达端口MAC地址M2_In,
然后再封装目的MAC地址为M2_Out的数据包传送到C2。

如此类推,
直到最后找到IP地址为IP_B的B主机的MAC地址MAC_B,
最终传送给主机B。
在传输过程中,数据包源IP地址IP_A、目的IP地址IP_B不变,
而源MAC地址和目的MAC地址,
由于中间节点重新封装数据帧而不断改变,
直至目的地址MAC地址为MAC_B,
数据包最终到达目的主机B。

综上所述,
IP地址和MAC地址相同点是它们都可以作为设备地址标识,
不同则主要体现以下几个方面:

对于网络上的某一设备,
如一台计算机或一台路由器,其IP地址可变(但必须唯一),
而MAC地址不可变。

我们可以根据需要给一台主机指定任意的IP地址,
如我们可以给局域网上的某台计算机分配IP地址为192.168.0.112 ,
也可以将它改成192.168.0.200。
而任一网络设备(如网卡,路由器)一旦生产出来以后,
其MAC地址永远唯一且不能由用户改变;

长度不同。IP地址为32位4字节,MAC地址为48位6字节;

分配依据不同。
IP地址的分配是基于网络拓朴,
MAC地址的分配是基于制造商;

寻址协议层不同。
IP地址应用于OSI第三层,即网络层,
而MAC地址应用在OSI第二层,即数据链路层。
数据链路层协议mac
可以使数据从一个节点传递到同一段链路的另一个节点上(通过MAC地址寻址),

而网络层协议ip使数据可以从一个网络传递到另一个网络上(ARP根据目的IP地址,
找到中间节点的MAC地址,通过中间节点转发,从而最终到达目的网络)。

工作流
在以太网环境下,
同一个网段的主机之间需要知道对方的MAC地址,
(通过交换机相连的节点处于同一网段)

路由器负责不同网段(Subnet, 子网)之间的通信,
每个与路由器端口相连的网络被称为一个子网或网段, 也就是一个广播域。
在路由器中也有一张表,这张表叫做路由表,
通过在网络节点上运行路由协议,记录并更新去往不同网段的路径信息。

路由表中的信息分为直连路由和非直连路由:
直连路由:直接连接到路由器端口的网段,该信息由路由器自动生成;
非直连路由:不是直接连接到路由器端口的网段,此记录需要手动添加或使用动态路由生成。

本机Linux系统下,
双网卡em1(114.212.84.179)与virbr0(192.168.122.1),
执行命令:route -n,获取到内核IP路由表的数值展示形式如下:

table th:nth-of-type(1) { width: 100px; } table th:nth-of-type(2) { width: 100px; } table th:nth-of-type(3) { width: 100px; }
在这里插入图片描述

解析上述路由表:

第一项:目的网络为114.212.80.0/21,
网关地址为0.0.0.0(“…“的数值形式),
这表示该网段属于与路由器某端口直连的网段,

数据包将从路由器em1接口输出;

第二项:目的网络为192.168.122.0/24,
网关地址同样为0.0.0.0,
表示该网段属于与路由器某端口直连的网段,

数据包将从路由器virbr0接口输出;

第三项:目的网络为0.0.0.0(“default”的数值形式)时,
即匹配任意网段,由于路由表匹配执行最先匹配策略,
第三项就是当目的IP地址无法与前两项匹配时的成功匹配项,
对应的网关称为默认网关,
即路由器中没有存储某个目的网络的表项时
应该转发至的下一跳地址,从em1端口输出

路由器中记录的条目有的需要手动添加,称为静态路由;有的则是动态获取的,称为动态路由。表中的每个条目都有以下属性:

在这里插入图片描述

目的网络地址(Destination):
网络地址和网络掩码相与的结果
用于定义本机可以达到的目的网络范围,

通常情况下,目的网络范围包含以下几种情况:
(1) 主机地址:某个特定主机的网络地址;
(2) 子网地址:某个特定子网的网络地址;
(3) 默认路由:所有未在路由表中指定的网络地址,
用0.0.0.0统一匹配,用于配置默认网关;


网络掩码(Genmask):
又称为子网掩码(Subnet Mask),是一个32位地址, 作用是将一个同样也是32位的IPv4地址 划分成网络地址(Network Address)和主机地址(Host Address)。
子网掩码不能单独存在,它必须结合IP地址一起使用。

子网掩码是用来判断任意两台主机是否处于同一网段的根据,
简单来说就是两台主机各自的IP地址与本机配置的子网掩码做按与操作,
如果结果相同,则说明这两台主机是处于同一网段,
可以进行直接的通讯,而无需路由器的转发;


网关(Gateway,
又被称为下一跳服务器(Next Hop Server)):
发送IP数据包时,网关定义了针对特定的网络目的地址,
数据包将要被发送到的下一跳IP地址。(1.网络端口ip2.路由器ip)

如果是与路由器直接相连的网段,
网关通常就是路由器对应的网络端口的IP地址
但是此时接口必须与网关一致。

如果是远程网络或默认路由,
网关通常是与路由器相连网络上的某个服务器或路由器
如果目标是本主机所属网络,不需要路由,网关显示为”*“;


利用下图详细介绍路由器的工作原理:
在这里插入图片描述小结

路由表负责记录一个网络到另一个网络的路径,
路由器依赖路由协议及其确定的路由表完成三层,
即网络层的数据转发工作。

路由表项中最重要的信息在于目的网段和网关
即下一跳IP地址的对应关系,

网关通常是专门的网关服务器或者路由器,
而网关会负责将该数据包最终转发至目的网段。

综上,看似较为“简单”的跨网段主机通信,
真也不是太容易的一件事儿。

步骤如下:

主机A在网络层将来自上层的报文封装成IP数据报,
IP首部中的源IP地址为自己的IP地址,
目的IP地址为主机B的IP地址。
主机A会用本机配置的24位子网掩码与目的地址进行“与”运算,
得出目的地址与本机不在同一个网段
(主机A位于192.168.1.0/24网段,
主机B位于192.168.2.0/24网段,
或称属于不同子网),
因此发送给主机B的数据包需要经过网关路由器1的转发;

主机A通过ARP请求获得网关路由器1的E0端口的MAC地址,
并在数据链路层将路由器E0端口的MAC地址封装成
以太网帧首部中的目的MAC地址,
源MAC地址是自己的MAC地址,
随后发送数据帧给路由器1;

路由器1从端口E0接收到该数据帧,
随后执行解析,将数据链路层的首部剥落去掉,
并在路由表中检查是否有目的IP地址的网段对应表项
(即192.168.2.2/24和其所在192.168.2.0/24网段),
根据路由表中记录,
发往192.168.2.0/24网段(中主机)的数据包的下一跳(NextHop)
或称网关地址为10.1.1.2/8(实际是路由器2的E1端口的IP地址),
而路由器发现下一跳地址
正好位处与自己E1端口直连的网段(10.0.0.0/8),
于是数据在路由器1的E1端口重新封装,
此时,以太网帧的源MAC地址是路由器1的E1端口的MAC地址,
目的MAC地址则是路由器2的E1端口的MAC地址,
通过ARP广播得到,封装完毕发送数据帧给路由器2;

路由器2从端口E1接收到该数据帧,
随后执行解析,将数据链路层的首部剥落去掉,
对目的IP地址进行检测,并与路由表进行匹配,
此时发现目的主机IP地址所在网段正好是自己E0端口的直连网段,
路由器2于是通过ARP广播,获知主机B的MAC地址,
此时数据包在路由器2的E0端口再次封装,
源MAC地址是路由器2的E0端口的MAC地址,
目的MAC地址是主机B的MAC地址,随后发送数据帧给主机B

完成以上1~4,主机B终于接收到来自主机A的数据包。
  • 15
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值