唐伯虎 发表于 2021-7-30 18:48:04

交换的江湖

目录

[*]交换的江湖

[*]交换分层
[*]交换机的工作原理
[*]通信流程
[*]案例


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
交换的江湖
交换分层
核心层:core layer
核心层的设计和改造都应该以快速转发和容错为首要目标。因此核心层要选择性能高的设备,并且不要在核心层做任何降低速度的事情,比如ACL、接入PC等,并且应该避免网络随着网络的增大而增大。
汇聚层: aggregate Layer
汇聚层是实现网络策略的地方,路由选择,acl,nat,vlan,路由重分发,防火墙都应该在汇聚层做,不用做的就是其它层的专属功能.
接入层: Access Layer
主要用于接入终端 ,端口安全,延续汇聚层的访问控制和策略,网络分段,接入层的交换机如果端口不够的话不要再向下接入交换机,而是使用堆叠技术,堆叠就是把多个交换机当做一个使用,之间有专门的连接线。
NOTE:3



交换机的工作原理
交换机的行为有三种行为:泛洪(flooding),转发(forward),丢弃(discrad)
有广播包或者或者mac表里面没有目标mac时才会泛洪,两种情况.

如果进入交换机的一个单播帧,就查找mac地址表

[*]​ 通过mac地址表比较目标mac地址是不是就是进来的接口对应pc的mac地址,如是就丢弃
[*]​ 如不是,并且在mac地址找取目标mac对应的接口就转发
[*]​ 如果在mac地址表查不到就泛洪查找
如果是广播帧,不查找mac地址表,直接泛洪
NOTE:

[*]mac地址表当中不仅有mac和对应的接口,还有vlan
[*]有多少vlan就有多少mac地址表,因为交换机是从二层来隔离广播的.

通信流程

PC-1的IP:192.168.1.1/24
PC-2的IP:192.168.1.2/24
当PC-1 ping PC-2通讯过程详解:

[*]pc-1会先用自己的掩码与192.168.1.2做与运算得出网络位为192.168.1.0,然后用此网络位与自己的网络位做对比,会得出结论:”192.168.1.2与本地192.168.1.1在同一个网段”.
[*]既然在同一个网段,那么首先就会查看本地的arp缓存,看看之前有没有与192.168.1.2通讯过,如果有会直接把192.168.1.2的mac地址封装到二层.
[*]如果arp缓存当中没有就要使用arp广播直接在本网段内询问:”who has 192.168.1.2 tel 192.168.1.1”,由于这是一个广播,在同个广播域的所有设备都可以收到,那么就让我们来看一下每个设备收到这个arp广播的时候有什么反应:
首先第一个收到广播的是交换机一,那么交换机一收到这个广播帧会怎样做呢?它会采取两种措施,因为是广播,所以它不会查询自己的mac地址表,会直接泛洪出去,这是第一种反应。另一种反应是在泛洪的同时还会学习,我们之前讲过,交换机是通过源mac地址进行学习的,广播当中的目标mac全是1,源mac地址还是有的,所以交换机会把pc1的mac地址与g0/0/2做一个对应存放到mac地址表。
因为同一个广播域,交换机二也会收到,它收到之后同样也会有两种反应:广播、学习。
pc3和pc4也会收到这个广播信息,由于这个广播人家问的是谁是192.168.1.2?pc3和pc4并不是192.168.1.1要找的机,所以不会响应的,会把这个帧丢弃,但是在丢弃之前会做一次“废物利用”,因为此次广播的携带有pc1的ip地址和mac地址,所以pc3和pc4会学习一下,即把pc的ip地址与其mac地址做一个对应放到自己的arp缓存当中。
pc2收到之后看到广播的目标IP就是找自己的,所以就会构建响应报文,源IP就是自己,目标IP就是192.168.1.1,源mac地址就是自己,而目标mac就是pc-1的mac地址,除了要构建响应报文之外,同样也会学习,把pc1的ip和mac做一个对应放到自己的arp缓存当中。

[*]当响应报文从pc-2发出之后,首先到达的还是交换机一,交换机还是会进行学习,把pc-2的mac与G0/0/3做一个对应存放到mac地址表里面。由于交换机一这次收到的是一个单播帧,所以除了会学习之外,重要的是要转发或者泛洪,那么到底是转发还是泛洪呢?这取决于交换机一的mac地址当中有没有目标mac的对应的记录,此次单播的目标mac的pc1,而pc-1的mac在第一次广播的时候就已经被交换机给学习到了,所以交换机的mac地址当中是有pc-1的记录的,所以交换机会直接把此次的单播帧直接转发给G0/0/2接口。
[*]pc1收到pc2的单播帧之后就可以在二层封装好目标mac,在封装之余也会把pc2的ip与其mac地址做一个对应,放到自己的arp缓存当中,以便下次使用。
由于这次是单播帧,所以仅仅途中的交换机和目标pc能够收到,其余的网络设备都不会收到。
通信总纲(极度重要,相当于linux启动过程一样重要,真正入门的标志):


案例

A到B的通信过程:

[*]A首先判断B是否在同一个网段。用255.255.255.224与192.168.1.129得出B的网络位是192.168.1.128,而主机A自己的网络位是192.168.1.0,判定不在一个网段,所以下一步要查找网关的MAC。
[*]A查看本地ARP缓存,如果没有网关的MAC,发arp广播“who has 192.168.1.1 tel 192.168.1.2”,沿途交换学习并泛洪,非目标主机学习并丢弃数据帧。
[*]网关收到之后学习并构建单播的响应报文回复A自己的MAC地址。沿途交换机学习并转发。
[*]A主机收到网关的回复的MAC地址后封装在自己的二层链路,网络层的源IP是192.168.1.2,而目标IP是192.168.1.129,交给网关,沿途交换机由于之前学习过了,这次直接转发给网关。
[*]网关收到拆开此帧,通过目标MAC地址发现就是给自己的,然后接着拆网络层,发现目标IP是给192.168.1.129,网关会通过路由表选择最佳匹配进行转发,发现自己直连的接口就属于该网段,于是通过arp广播直接询问:“who has 192.168.1.129 tel 192.168.1.1”沿途交换机由于之前学习过所以不学习直接泛洪,B主机收到之后会给网关回复自己的MAC地址,交换学习并转发给网关。
[*]网关收到B主机回复的MAC地址后,对数据重新进行封装,网络层的源IP和目标IP不会变,TTL会减1,链路层源/目标MAC会替换,源MAC替换成网关的MAC,而目标MAC替换成B主机的MAC,FCS会重新计算,然后将此此帧通过其直连接口单播给B主机。
[*]B主机收到之后通过发现此帧就是找自己的,同样的,还是会拿着A主机的IP与自己掩码做与运算,由于网络位是一样的,得出结论“A主机与自己在同一个网段”,直接发arp广播询问”who has 192.168.1.2 tel 192.168.1.129“,A主机收到之后单播回复自己的MAC地址,于是B主机便把A主机的MAC地址封装在二层链路当中单播给A,沿途交换机直接转发给A,于是完成一次通信。
总结:

[*]A主机到B主机要过路由,而B主机到A主机直接通过交换即可,不用过路由。
[*]到底是否要过路由取决于源主机判定是否与目标主机在同一个网段,在同一个网段通过交换机,不在同一个网段通过路由。



文档来源:51CTO技术博客https://blog.51cto.com/u_11580232/3213267
页: [1]
查看完整版本: 交换的江湖