一、链路层转发
交换机:根据Mac地址转发数据帧。交换机内有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。
工作原理:交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(单播),如果没有,则会将该数据帧从非接受接口发送出去(广播)。
单个交换机传输数据帧过程:
- 在pc1上ping pc2的ip,在构造icmp报文前,需要知道目标主机的mac地址,由于此时pc1上没有匹配的mac地址条目,pc1将会先发送广播报文。
- 交换机收到此数据帧后,首先将数据帧中的源MAC地址和对应的接口(接口为feth26) 记录到MAC地址表中。
- 然后交换机会检查自己的MAC地址表中是否有数据帧中的目标MAC地址的信息,如果有,则从MAC地址表中记录的接口发送出去,如果没有,则会将此数据帧从非接收接口的所有接口发送出去(也就是除了feth26接口)。
- 这时,局域网的所有主机都会收到此数据帧,但是只有主机B收到此数据帧时会响应这个广播,并回应一个数据帧,此数据帧中包括主机B的MAC地址。
- 当交换机收到主机B回应的数据帧后,也会记录数据帧中的源MAC地址(也就是主机B的MAC地址),这时,再当主机A和主机B通信时,交换机根据MAC地址表中的记录,实现单播了。
多个交换机互联传输数据帧过程:
- 主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机。
- 交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。
- 交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。
- 主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机1都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。
- 这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口feth26。
总的来说就是如果交换机上没有相应记录的Mac关系,就广播,所有与该交换机相连的交换机都能收到该数据帧,匹配不成功依次广播...匹配成功响应该数据帧并回复源MAC地址为自己的数据帧。
总结:
- 交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。
- 交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。
ARP缓存表
在每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系。
ARP协议:ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址。
1.如果主机A想发送数据给主机B,主机A首先会检查自己的ARP缓存表,查看是否有主机B的IP地址和MAC地址的对应关系,如果有,则会将主机B的MAC地址作为源MAC地址封装到数据帧中。如果没有,主机A则会发送一个ARP请求信息,请求的目标IP地址是主机B的IP地址,目标MAC地址是MAC地址的广播帧(即FF-FF-FF-FF-FF-FF),源IP地址和MAC地址是主机A的IP地址和MAC地址,主机A发送的广播报文如下。其中二层报文头中目的mac为全F的广播mac地址,arp报文中封装的目的mac地址为全0的mac地址。
2.当交换机接受到此数据帧之后,发现此数据帧是广播帧,因此,会将此数据帧从非接收的所有接口发送出去。
3.当主机B接受到此数据帧后,发现目的IP地址是否是自己的,并将主机A的IP地址和MAC地址的对应关系记录到自己的ARP缓存表中,同时会发送一个单播响应报文(ARP应答),其中包括自己的MAC地址。
4.主机A在收到这个回应的数据帧之后,在自己的ARP缓存表中记录主机B的IP地址和MAC地址的对应关系。而此时交换机已经学习到了主机A和主机B的MAC地址了。
二、网络层转发
路由器负责不同网络之间的通信。在路由器中也有一张表,这张表叫路由表,记录着到不同网段的信息。路由表中的信息分为直连路由和非直连路由。
- 直连路由:是直接连接在路由器接口的网段,由路由器自动生成。
- 非直连路由:就是不是直接连接在路由器接口上的网段,此记录需要手动添加或者是使用动态路由。
路由表中记录的条目有的需要手动添加(称为静态路由),有的测试动态获取的(称为动态路由)。直连路由属于静态路由。
路由工作原理:路由器是工作在网络层的,在网络层可以识别逻辑地址。当路由器的某个接口收到一个包时,路由器会读取包中相应的目标的逻辑地址的网络部分,然后在路由表中进行查找。如果在路由表中找到目标地址的路由条目,则把包转发到路由器的相应接口,如果在路由表中没有找到目标地址的路由条目,那么,如果路由配置默认路由,就按照默认路由的配置转发到路由器的相应接口;如果没有配置默认路由,则将该包丢弃,并返回不可到达的信息。这就是数据路由的过程。
1.PC1将来自上层的报文在网络层封装成IP数据包(其中源、目的IP地址分别为PC1、PC2的IP地址),让源、目的IP地址进行“与”运算来得出是否为同一网段,此时发现PC1/PC2主机不在同一网段,故数据包将经由网关A进行转发。
2.由于PC1没有记录网关A(即路由器R1)的mac地址,将会发送ARP请求来获取,并将网关A的mac地址封装为目的mac地址,源mac为主机A。
3.网关设备在收到arp广播报文后,发现报文的目的ip就是自己,将会发送arp报文(单播)报文进行响应。PC1收到报文后会记录源mac到自己的mac表中。
4.PC1在学习到mac地址后,封装icmp报文发送出去,此报文中源ip、目的ip分别为PC1和PC2的主机ip,源mac为PC1的mac地址,目的mac为网关接口的mac地址。
5.路由设备会解封装报文,发现目的ip不是自己同时也不同网段,此时将会检查自己的路由表中是否记录匹配目的ip网段的路由条目,发现存在此路由信息,然后将数据包交给对应的接口feth27进行转发。
6.路由设备转发报文前需要知道目的mac地址,因此将会从接口feth27发送arp广播,PC2上获取的广播报文如下:
7.PC2会学习arp请求包中的源mac地址,查看报文的目的ip就是自己,将会发送arp响应报文回应,此时设备上也已经学习到完整的arp表。
8.网关设备在学习到mac地址后,封装icmp报文发送出去,此报文中源ip、目的ip分别为P和PC2的主机ip,源mac为网关接口feth27的mac地址,目的mac为目标主机PC2的mac地址。如此报文就会从接口发送到目标设备上,成功转发icmp报文。
来源:https://www.cnblogs.com/tianzeng/p/12367379.html