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的数据包。

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

  1. 网络与安全1【什么ARP***,IP地址欺骗都是浮云】买台300元的交换机搞定

    今天看到PConline上的相关文章,感觉写得不错,在这里分享给大家. 至于相关的配置命令,我也会紧接着跟进,与大家分享,若有什么不正确的地方,也欢迎大家多多交流. 首先限定一下话题的范围,本贴谈论的 ...

  2. 什么是交换机?描述一下工作过程?交换机基本功能、交换机是如何转发数据包的,什么是三层交换机?和二层交换机有什么区别?三层交换机是否可以代替路由器?为什么?

    ** 14. 什么是交换机?描述一下工作过程? ** 交换机是一种工作在数据链路层对流量进行转发的网络设备.主要应用于延长传输距离,解决冲突域,实现单播等功能. ** 工作过程: **当流量进入交换机 ...

  3. 如何通过IP定位交换机

    1. show ip arp | in  IP 在汇聚交换上查找MAC 2. show mac address-table | in MAC 查找从哪一个端口进来的 3. show cdp neigh ...

  4. gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_ARP协议在同网段及跨网段下的工作原理...

    前言:ARP协议是在链路层通讯中,已知目标IP地址,但是,仅有IP 地址是不够的,因为IP数据报必须封装成帧才能通过数据链路进行发送,而数据帧必须要有目的MAC地址,每一个网络设备在数据封装前都需要获 ...

  5. gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_TCP/IP协议知识总结...

    总体 首先,展示下总体的思维导图.接下来,按照每个点解释. OSI七层模型 开放式系统互联模型(英语:Open System Interconnection Model,缩写:OSI:简称为OSI模型 ...

  6. 71张图详解IP地址、IP 路由、三层转发、ARP、ICMP

    71张图详解IP地址.IP 路由.三层转发.ARP.ICMP 架构师之道2021-04-07 13:51:24 https://www.toutiao.com/i6948285918986027531 ...

  7. 02. MAC地址 · ARP · ICMP · IP地址 · 子网 · 超网 · 端口

    MAC · IP · 子网 · 超网 MAC地址 MAC地址的表示格式 MAC地址操作(查看.修改)[实践] MAC地址的获取[实践] ARP ICMP IP地址 · 子网掩码 IP地址的组成 IP地 ...

  8. Python获取本地mac地址、主机名、IP地址

    1 在windows系统,命令行输入 ipconfig /all 此处获得mac地址. 2 在Python中获取mac地址 import uuid mac = uuid.UUID( int=uuid. ...

  9. ARP绑定IP与MAC地址

    1.首先确认需要进行ARP绑定的 IP地址以及mac地址(FPGA的ip 和mac) 2.电脑通常有多个网卡,无线.有线,确定好要绑在哪个接口.举例,第一个是无线网卡,第二个是有线网卡. C:\Use ...

最新文章

  1. MRTG—网络监控工具
  2. DLL load failed while importing _pywrap_tensorflow_internal
  3. 8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授
  4. python备份cisco交换机_Python备份Cisco交换机配置 | CN-SEC 中文网
  5. 计算机系统应用的书,基于领域本体与上下文感知计算的智能图书-计算机系统应用.PDF...
  6. 在Linux平台使用VNC连接树莓派
  7. Word中 Visio 图片到 LaTeX PDF
  8. 一、数据挖掘—初识数据挖掘
  9. Springboot毕设项目基于批示的督查督办管理系统c6m0djava+VUE+Mybatis+Maven+Mysql+sprnig)
  10. 三线压力传感器原理_压力传感器怎么接线 每根线都是干什么的
  11. Mac mini7.1 2014年末 安装单windows 10系统
  12. 输入身高体重测身材_【测试】你的身材标准吗? 附赠20-39岁成年人身高体重评分标准...
  13. Linux 只可以找到 lo 网卡,没有eth0 or eth1网卡的解决方法
  14. Git You have to resolve all merge conflicts before checkout.
  15. 【秋招】计算机视觉面试题
  16. flash钢琴自动弹奏之Python实现
  17. 矩形法求定积分通用函数
  18. 求解1000以内的质数
  19. 数说故事车企数字化转型案例分享——内容营销如何促进品牌增长
  20. Windows命令行的使用

热门文章

  1. Matlab中解决pcolor和imagesc格网显示问题
  2. 工科研究生常用的网站
  3. stm32f103从安装MDK5到烧录第一个亮灯程序
  4. 山东大学软件学院网络攻击与防范2022-2023林丰波100词详解
  5. 关于学习JavaScript!
  6. python catia_使用Python脚本的CATIA V5自动化
  7. Openssl中的Libcrypto API
  8. JavaScript循环语句(二)
  9. js视频背景切换js特效代码
  10. 开源:一款开源的高颜值现代化桌面美化工具