(主机)ARP表(ip/mac)、(交换机)交换/转发/MAC表(mac端口)
转发表(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地址封装数据帧并发送。