话题引入

在数通学习中,不可避免的会看到“二层交换机与三层交换机”、“二层转发与三层转发”这些名词,那么这里说的“二层”、“三层”究竟意味着什么呢?

我们知道,TCP/IP网络模型共有五层,其中第二层是数据链路层,第三层是网络层,简单来看,网络层负责封装 源IP地址以及 目的IP地址,而数据链路层负责封装 源MAC地址以及 目的MAC地址。(IP地址:标识一台网络设备;MAC地址:标识一台物理设备)

很显然,从应用层往下依次封装报文,在网络层和数据链路层分别获取 源IP地址源MAC地址是很容易的,那么目的IP地址目的MAC地址呢?目的IP地址很容易得到(这里面涉及到DNS服务器的作用),而目的MAC地址,则需要 ARP地址解析协议的帮助。

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。(摘自百度百科)

在讲二层、三层之前,我们得先理解一下局域网LAN广域网WANVLAN虚拟局域网这些概念。

局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。广域网(Wide Area Network,WAN),一般又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。(同样摘自百度百科,emm真香!)

也许你会在心里弱弱地想,为啥咱要弄这个局域网的概念?那么不妨逆向思维一下,在没有局域网这个概念的世界里,也就是全网任意两个网络设备都是直接互通的(Emmm…光想想就很可怕..),有一个广州的靓仔小Z想要去访问www.huawei.com,如果华为的服务器部署在北京,你的应用层数据经过传输层、网络层(也假设有台DNS服务器恰好成功解析了域名)封装后,在前往数据链路层封装时,会发送ARP广播消息向“全网”寻求位于北京的那台华为服务器的MAC地址。请注意,这里是广播,还只是靓仔小Z一个人的行为,在中国这么多网民、这么多网络设备,同一时刻会出现那么多上网行为,就算网络传输速率再快,同时出现如此数量的广播行为,COOL!200%会出现广播风暴!!!

从上面这段假(fei)想(hua)可以看出,局域网的其中一个作用便是分割出多个广播域,换句话来理解,一个局域网就是一个广播域,这样能将广播域控制在一定范围内,不然的话,数据完全处理不过来。另一方面,我们的网络世界毕竟还是互联的,那么众多局域网之间借助什么介质实现互相通信呢?答案是——路由器!众所周知,路由器有一个“知名”功能——隔离广播,也就是划分出若干个局域网(广播域),相反地,通过路由器连接起多个局域网就得到了广域网

思考一下:既然路由器隔离了广播,那么我又怎么和其他局域网通信呢?这里就涉及到网关(虚拟路由冗余协议VRRP、双向转发检测BFD)、IP路由表(静态路由、OSPF动态路由)、MAC地址表(地址解析协议ARP、泛洪、环路与生成树协议STP)等等这些新概念了,这些在后面具体都会讲到。

上面提到路由器,自然就不可避免地提到一个学习中常出现的设备——交换机,经常会在脑海中有这样的疑问——路由器和交换机的区别与联系在哪?

上面这个问题很重要,所以!我准备加粗了!
路由器是用于三层转发的(即工作于网络层),主要同IP地址、路由信息打交道,它可以隔离广播,提供路由表实现网络层数据报文的转发。而交换机是用于二层转发的(即工作于数据链路层),它主要同MAC地址打交道,提供MAC地址表实现数据链路层数据帧的转发。
可能有人会问,这两者有联系吗?当然有了,这两者都有着数据转发功能,这是最基本的功能,也很好理解。但两者转发机制又有所不同,对路由器而言,如果在路由表中没有查到对应表项,路由器会自动丢弃该报文。对交换机而言,如果MAC表中也没有查到对应表项,交换机会触发泛洪(注意,此泛洪非彼犯浑,具体也放后面讲),从而将数据帧发送出去。总之,交换机总是能将数据转发出去!

实例分析一波

在分析实例之前,给出二层转发、三层转发的解释(如果下面这段话你不理解,可以接着看完下面的内容再回过头来想):

没错!二层L2就是指数据链路层,三层L3就是指网络层!可以这样理解:在A与B数据通信的中间传送路径上经过的各个物理设备都没有“经过”网络层(这里的“经过”可以理解为数据帧没有被拆包),就可以称为L2转发,否则,也就意味着数据需要经过网络层,这就称为L3转发!
有一些很明显的特征,若通信的数据传送路径上有经过路由器,则可认定为L3转发,若只经过交换机转发,则认定为L2转发。L2转发只会依靠MAC地址表,L3转发主要依靠IP路由表,当然了也会涉及到MAC地址。
再换种表述方法,若通信的数据传送过程只在同一LAN内进行,则可认定为L2转发,若传送过程在LAN间进行,则可认定为L3转发。

先贴一张“老实本分”的网络拓扑结构图!

一张像模像样的网络拓扑结构图
一张像模像样的网络拓扑结构图

图中已经标明了主机以及各个设备物理端口的IP地址、网络掩码SM的配置信息。可以看出:

  • (主机PC3、PC4、交换机SW1、SW2、SW3以及路由器R1的Eth 0/0/0物理端口)处于同一LAN1;
  • (主机PC1以及路由器R1的GE 0/0/0物理端口)处于同一LAN2;
  • (路由器R1的Eth 0/0/1物理端口以及路由器R2的Eth 0/0/0物理端口)处于同一LAN3;
  • (主机PC2以及路由器R2的Eth 0/0/1物理端口)这些处于同一LAN4。
为了你能看得具象些,我尽力了
为了你能看得具象些,我尽力了

很显然,处于同一LAN内的任意两台设备都能ping通(这主要因为我们在规划网络时,遵循这样的原则——同一LAN内的网络设备的IP地址必须处于同一网段。具体为什么要这样后面会提到)。

实例一

结合上面的拓扑图来分析一下“PC3 上发一条微信给PC4”这个业务流程

PC3上的微信数据信息经过传输层TCP头部、网络层IP头部封装后,准备封装源MAC地址以及目的MAC地址(也就是数据链路层头部),源MAC很容易获得,而目的MAC地址的话,PC3会首先在自己本机的ARP缓存(目的IP地址、目的MAC地址)这样的映射表文件中查找是否有能匹配上目的IP地址的表项,若有,直接拿来用即可;若没有,则需要由PC3发送一个ARP请求帧(广播)到同一LAN内的所有主机。

注意:这个ARP请求帧中包括源主机PC3的IP地址、源主机PC3的MAC地址、目的主机PC4的IP地址,而“目的主机的MAC地址部分”用“0XFF FF FF FF”表示,从而实现广播功能。

从上面这个拓扑图可以看出,PC3发送的ARP请求帧(广播消息)会经过SW2,而SW2在收到ARP请求帧(广播消息)后,首先会在自己的MAC地址表中记录下(PC3的MAC地址,SW2的GE0/0/1)这样一条表项,然后再分析ARP请求帧(广播消息)具体往GE0/0/2还是GE0/0/3转发。

这里要给出一个新的概念——生成树协议STP,STP的目的是为了避免出现环路,试想一下,从SW2发出的广播可能会选择GE0/0/2发往SW1,而SW1发出的广播也可能会选择到GE0/0/2发往SW3,更糟糕的是,SW3发出的广播也可能会选择到GE0/0/3从而又回到了SW2,这样就形成了一个环路,而交换机并不知道,这严重消耗了带宽资源,甚至会产生广播风暴,导致交换机死机。
对于所有的环路问题,最直接、最容易想到的一种环路避免方法就是“破环”,在这里具体就是手动随机关闭交换机的某个端口,让环路不得存在!很显然,对于结构复杂的现网,这样手动随机关闭的方法是不现实的,所以,我们这才有了生成树协议STP,STP协议是在逻辑上断开网络的环路,防止广播风暴的产生,而一旦正在用的线路出现故障,逻辑上被断开的路线又被连通,继续传输数据。
其实这个协议,我们是可以在空闲状态下,SW2的GE0/0/2端口抓包分析看到,STP协议是一直在处于不间断运行状态的。

在SW2的GE0/0/2抓包分析
在SW2的GE0/0/2抓包分析

我们假设STP协议机制选择了在逻辑上断开SW2的GE0/0/2端口(环路便不存在了),那么SW2只能向SW3发送ARP请求帧(广播消息),SW3收到ARP请求帧(广播消息)后,也会在自己的MAC地址表中记录下(PC3的MAC地址,SW3的GE0/0/3)这样一条表项,然后就会将ARP请求帧(广播消息)分别向SW1和PC4方向转发,当主机PC4接收到ARP请求,并且检查到这个ARP请求帧中所包含的目的IP地址与自己的IP地址匹配上了,它首先会将主机PC3的IP地址和MAC地址映射添加到它自己本地的ARP缓存中,然后再将包含PC4主机MAC地址的ARP回复消息直接发送回主机PC3(注意,此时不再是广播回复,而是单播)。而送往SW1方向的ARP请求会首先经过SW1(当然SW1也会记录下(PC3的MAC地址,SW1的GE0/0/2)到它的MAC地址表中),最终会到达路由器R1的Eth0/0/0端口,而路由器是会隔离广播消息的,所以无法传输过去,当然也不会给出任何回复消息。

那么PC4返回的ARP回复消息是怎么回送给PC3呢,具体回送过程如何?

PC4返回的ARP回复消息中包含PC4的IP地址、PC4的MAC地址、PC3的IP地址、PC3的MAC地址。当这条消息发送到SW3时,会在SW3的MAC地址表中添加一条(PC4的MAC地址,SW3的GE0/0/2)表项,同时,根据消息帧中的目的MAC地址(即上句话中的PC3的MAC地址)查询SW3的MAC地址表,匹配到之前记录下的一条表项(PC3的MAC地址,SW3的GE0/0/3),故此,这条ARP回复消息会从SW3的GE0/0/3端口转发,到达SW2后同理,首先在SW2的MAC地址表中添加一条(PC4的MAC地址,SW2的GE0/0/3)表项,再根据消息帧中的目的MAC地址(同样也是PC3的MAC地址)查询SW2的MAC地址表,匹配到之前记录下的一条表项(PC3的MAC地址,SW3的GE0/0/1),故此,这条ARP回复消息从SW2的GE0/0/1端口转发,这样就将ARP回复消息送到了主机PC3。

当主机PC3收到从主机PC4发来的ARP回复消息时,首先会用(主机PC4的IP地址,主机PC4的MAC地址)映射关系更新它自己本地的ARP缓存,至此,也就算完成了上面的ARP请求。其次,主机PC4既然拿到了PC3的MAC地址,那么我们回过头再看前面的数据封装步骤,这时就可以进行数据链路层的头部封装了。

更新一下经过上面ARP请求后,各个交换机的MAC地址表状况,如果你看懂了上面的ARP过程,那么这些表项如何添加进来应当就不难理解了!

各个交换机的MAC地址表以及各主机ARP缓存表情况
各个交换机的MAC地址表以及各主机ARP缓存表情况

数据链路层封装的头部主要包含:目的MAC地址即PC4的MAC地址、源MAC地址即PC3的MAC地址,(数据链路层封装的数据信息称为帧),再然后,数据帧经过物理层转换为比特流形式通过物理层设备传输,具体在我们这个实例中,就是从PC3到SW2的数据比特流的传输,到了SW2后,这些比特流又会反过来转换为数据帧的形式,这样交换机SW2就能从中读出目的MAC地址,(其实,交换机真正感兴趣的、能处理的也就只有这个目的MAC地址,这点必须要理解清楚!!!),SW2会根据这个目的MAC地址即PC4的MAC地址在自己的MAC地址表中查找是否有对应项,很显然,能找到表项匹配上(可以参照着看上面的MAC地址表图),即依次经过SW2、SW3转发(依靠MAC地址表),能实现PC3与PC4间的数据通信过程。

从网上找了一下ARP报文格式,我们可以结合这个部分再回顾一下前面的ARP请求帧:

ARP报文格式
ARP报文格式

首先,可以看到ARP报文是由14位的以太网首部和28位的以太网ARP请求/应答字段构成的。按顺序来看,首先看以太网首部:

  • 第一部分,以太网目的地址,也就是目的MAC地址,这是一个广播地址,所以就是用0XFF-FF-FF-FF-FF-FF表示目标是网络上所有的主机。
  • 第二部分,以太网源地址,也就是源MAC地址,这是请求端(发送端)的MAC地址。
  • 第三部分,帧类型,表明这个以太网帧的类型,其中0x0806代表这是ARP协议帧,即后面的数据是属于ARP包的。

再看以太网ARP请求/应答字段:

  • 第一部分,硬件类型,其中1代表是以太网。
  • 第二部分,协议类型,表明上层协议的类型,其中0x0800表示上层协议是IP协议
  • 第三部分,硬件地址长度,这很显然是6个字节
  • 第四部分,协议地址长度,其中IP协议的长度是4个字节
  • 第五部分,操作类型,在报文中占2个字节,其中1表示ARP请求,2表示ARP应答,3表示RARP请求,4表示RARP应答。这前五个部分就是ARP首部。
  • 第六部分,发送者硬件地址,即发送方(源)MAC地址。
  • 第七部分,发送者IP地址,即发送方(源)IP地址。
  • 第八部分,目标硬件地址,即目的MAC地址。
  • 第九部分,目标IP地址,即目的IP地址。

实例二

结合上面的拓扑图来分析一下“PC3 上发一条微信给PC2”这个业务流程

在分析这个业务流程之前,应当有这样的认识,主机PC3、PC2的IP地址不在同一LAN,那么数据信息应当首先转发到网关(通过MAC地址),这属于L2转发,跨过网关后就进入了L3转发(通过IP路由转发)。具体看下面:

传输数据之前,PC3能判断出自己与PC2不在同一LAN内,那么PC3发出的微信消息依次经过传输层、网络层、数据链路层会经过类似如下封装(草图):

TCP/IP协议栈的封装过程
TCP/IP协议栈的封装过程

从上面这个图也可以看出,TCP/IP协议数据整体封装方式如下:

TCP/IP协议数据整体封装方式
TCP/IP协议数据整体封装方式

其中,应用层(第一层)提供应用程序网络协议端口号,区分不同的应用进程,例如HTTP(80)、HTTPS(443)、Telnet(23)、FTP(21)、SMTP(25)、DNS(53)、TFTP(69)、SNMP(161)等等;

传输层(第二层)位于应用层和网络层之间,存在一个复用和分用的功能(应用层所有的应用进程都可以通过传输层再传到网络层,这就是复用。传输层从网络层收到发送给各应用进程的数据后,必须分别交付给由端口号指明的各应用进程,这就是分用),也就是说传输层协议(TCP或UDP)用端口号来标识和区分各种上层应用程序;

TCP/UDP报文格式
TCP/UDP报文格式

网络层位于数据链路层和传输层中间,接收传输层的数据报文,分段为合适的大小,封装上IP报文头部,交给数据链路层。网络层为了保证数据包的成功转发,主要涉及了这些协议:IP(IPv4/IPv6)协议、ARP协议(工作于网络层与数据链路层之间)、RARP、ICMP、IGMP等。

IP报文格式
IP报文格式

数据链路层主要功能就是保证将源端主机网络层的数据包准确无误地传送到目的主机的网络层。数据链路层的帧使用物理层提供的比特流传输服务来到达目的主机数据链路层。

数据链路层对网络层数据(IP数据报文)长度的限制——MTU
数据链路层对网络层数据(IP数据报文)长度的限制——MTU

物理层的功能是在终端设备间传输比特流,目前常用的数据信号传输介质主要有同轴电缆(coaxical cable)、双绞线(twisted pair)、光纤(fibre)、无线电波(wireless radio)等,常见的网络设备有:中继器、集线器等。传输数据的方式能满足点到点,一点到多点,串行或并行,半双工或者全双工,同步或异步传输的需要。

上面这些内容其实只是“九牛一毛”,详细的各层封装处理还有很多细节值得深抠,我这里也就不做这些拓展了,以后有时间一点一点来。

回到我们这个实例,PC3想要发送的微信消息会在传输层封装上包含源端口号(一般由操作系统给应用进程自动分配一个)以及目的端口号(根据你想要的的应用服务来生成,比如你想要的获取HTTP服务,那么就是80)的传输层头部,然后在网络层封装上包含源主机PC3的IP地址(这个很容易得到)以及目的主机PC2的IP地址(DNS解析)的网络层头部,再然后,应当进行数据链路层的封装了,PC3通过目的IP地址发现这个目的主机PC2与我不在同一LAN内,那么PC3会首先在自己本地的ARP缓存映射表中找到就会发出一个ARP请求网关的MAC地址(过程类似于PC3向全网广播说:“我的IP是192.168.1.1/24,我的MAC地址是XX XX XX XX XX XX,我想知道IP地址为192.168.1.3/24的网关的MAC地址是多少?”,而只有这条广播消息帧到达路由器R1的Eth0/0/0接口才能匹配上,它就会回复:“我的IP地址是192.168.1.3/24,我的MAC地址是XX XX XX XX XX XX”,具体ARP过程这里就不再赘述了)。

这里提到了网关GateWay这个概念,对于网关,我们需要知道这几点:
1. 网关这个概念是相对于主机而言的;
2. 主机想要访问不属于本LAN内的网络设备时,必然会选择从网关出去;
3. 最常见的网关设备便是路由器;
4. 不难发现,主机IP地址及其网关IP地址应该处于同一LAN内(即同一网段内);
5. 在谈及网关时,我们常常会碰到虚拟路由冗余协议VRRP和双向转发检测协议BFD(具体可以通过看我在这里介绍的——VRRP虚拟路由冗余协议的配置来帮助理解这两者)!

当PC3收到了包含网关MAC地址(即路由器R1的MAC地址)的ARP回复消息时,首先会将(R1的MAC地址,R1的Eth0/0/0端口IP地址)这条映射关系添加到自己本地的ARP缓存表中,然后就可以在数据链路层对之前从网络层送来的IP数据报文进行封装成帧,主要包含源主机PC3的MAC地址以及路由器R1的MAC地址(这就是这个数据帧的目的MAC地址)

到了这一步,数据帧就会转换成比特流形式(高低电频表示二进制)通过物理层传输介质到达SW2,SW2接收到数据流又会转换成数据帧,从中读出目的MAC地址(即R1的MAC地址)并在自己的MAC地址表查找能匹配上的表项,选出从哪个端口转发,按照我们前面的描述,这个比特流向应当是“SW2->SW3->SW1->R1”。

到达R1后,R1会首先将(PC3的MAC地址,PC3的IP地址)这样一条表项添加进R1自己的ARP缓存中去,然后,R1会发现这个数据帧头部包含的目的MAC地址与自己的MAC地址是一致的,那么R1就会“解一层包”(因为单从这一层来看,R1就是这个数据帧的目的地),但解开后,很快R1就会发现IP数据报文首部中的目的IP地址为192.168.2.3/24(很容易得出目的网络地址为192.168.2.0/24),这显然不是发给自己的。故有随后的转发判断规则与流程如下:

  • ① 若该目的网络地址192.168.2.0/24就是与路由器R1直接相连的某个网络地址(路由表中为Direct类型),则不需要经过其他路由器,直接把这个IP数据报文封装成帧(这里封装的数据链路层头部包括源MAC地址即R1的MAC地址,目的MAC地址即目的主机的MAC地址,同样的,路由器中也是有一个ARP高速缓存表,所以如果路由器所保存的ARP缓存中如果没有目的IP地址对应的表项,那么也会使用ARP),交付给目的主机,否则,执行② ;
  • ② 若R1的路由表中有某个特定表项的目的IP地址与该目的主机PC2的IP地址192.168.2.3/24一致,则把数据报转发给路由器表中所指明的下一跳路由器,否则,执行③ ;
  • ③ 若R1的路由表中有到达目的网络地址192.168.2.0/24的路由,则把数据报传送给路由表中所指明的下一跳路由,否则,执行④;
  • ④ 若R1的路由表中有一个默认路由(缺省路由,即目的地址为0.0.0.0),则把数据传送给路由表所指明的默认下一跳,否则,执行⑤;
  • ⑤ 报告路由器R1转发出错,数据无法转发出去,丢弃处理。

具体在我们这个实例中,显然路由器R1会符合②或③(或④)这两种情况之一,但其实不论哪种情况,都会向下一跳路由器R2转发,转发之前,路由器R1应当将这个IP数据报文头部中的源IP地址改为路由器R1的Eth 0/0/1端口的IP地址,目的IP地址依然是PC2的IP地址,重新封装成帧(这里封装的数据链路层头部包括源MAC地址即R1的MAC地址,目的MAC地址即R2的MAC地址,同样的,路由器中也是有一个ARP高速缓存表,所以如果路由器所保存的ARP缓存中如果没有对应的表项,那么也会使用ARP以获取想要知道的MAC地址。比如这里,R1就会在LAN3这个局域网内产生一个ARP广播消息去拿到R2的MAC地址的)。

上面这段话还有两个前面一直在提的细节没有描述:

  1. 为什么我们在IP数据报文封装成帧和路由转发之前要将IP数据报文头部中的源IP地址修改成路由器R1的Eth 0/0/1端口的IP地址?这是因为,为了让R2在接收到我这个IP数据报文时,能够更新它的ARP缓存,即添加(R1的MAC地址,R1的Eth0/0/1端口IP地址)这样的一条表项。
  2. R2收到ARP广播请求消息后,会首先在自己的ARP缓存中添加(R1的MAC地址,R1的Eth0/0/1端口IP地址)这样的一条表项,而R1在收到R2回复的ARP回复消息后,也会首先在本地ARP缓存中添加(R2的MAC地址,R2的Eth0/0/0端口IP地址)这样的一条表项,这点是ARP协议的重要部分,别给轻易忘了。

上面的步骤已经让比特流流向路由器R2了,R2同样在将比特流转换为数据帧后,发现这个帧头部中的目的MAC地址和自己的MAC地址是一致的,也会拆一层包,那么看到的便是IP数据报文了,这时,R2会首先在自己的ARP缓存中添加(R1的MAC地址,R1的Eth0/0/1端口IP地址)这样的一条表项,而且,路由器R2会发现IP数据报文中所指明的目的IP地址符合①这种情况,也就是同R2直接相连(路由表中为Direct类型),那么直接把这个IP数据报文封装成帧(同理,在封装成帧和路由转发之前要将IP数据报文头部中的源IP地址修改成路由器R2的Eth 0/0/1端口的IP地址192.168.2.1/24,目的IP地址依然是PC2的IP地址),在这里封装的数据链路层头部包括源MAC地址即R2的MAC地址,目的MAC地址即目的主机PC2的MAC地址(同样可以通过ARP得到),这样封装成帧后经物理层转换为比特流从而抵达目的主机PC2!

PC2在将比特流转换为数据帧后,发现这个帧头部中的目的MAC地址和自己的MAC地址是一致的,会拆一层包,那么看到的便是IP数据报文了,这里同样会首先将(R2的MAC地址,R2的Eth 0/0/1端口的IP地址)添加到自己的ARP缓存中,然后又发现这个IP数据报文首部中的目的IP地址和自己的IP地址也是一致的,会再拆一层包,那么看到的便是了TCP数据段了,这个时候它会从TCP数据段的头部中识别出目的端口号是啥,去掉这些头部信息后,从而交付给由端口号指明的上层各应用进程。

当然了,PC2也是需要给PC3回复消息的,在前面这些步骤描述中,其实一些配置信息包括路由器R1、R2和主机PC2的ARP缓存映射表,交换机SW1、SW2、SW3的MAC地址表也随之建立完善了起来,也就是说PC2给PC3回复消息的过程会免去这些ARP请求步骤(但对用户来说,这是透明的,因为用户是感受不到也完全看不到ARP请求过程的)。

实例小结

下面,我们就这两个例子总结一下知识点以及还需要注意的地方:

  • ARP是解决同一局域网上的主机或路由器的IP地址和MAC地址的映射问题,对于主机而言,它是不知道这种地址解析过程的,只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器通信,ARP协议就会自动把这个IP地址解析为数据链路层封装是所需要的MAC地址;

  • 通常,主机和路由器所拥有的ARP缓存是有生存期的,这是很有必要的,设想有一种情况,主机A和B通信,A的ARP缓存中保存有B的硬件地址。但B的网络适配器突然坏了,B立即更换了一块,因此B的MAC地址就改变了,假定A还要和B继续通信,A在其ARP缓存中查找到B原先的MAC地址,并使用该MAC地址向B发送数据帧,但B原先的MAC地址以及失效了,因此A无法找到主机B。但是过了一段不长的生成时间,A的ARP缓存中已经删除了B原先的MAC地址,于是A重新广播发送ARP请求消息,又找到了B;

  • ARP广播消息帧中的“目的MAC地址部分”是0XFF FF FF FF FF FF,所以交换机对于这样的目的MAC地址,可不必去MAC地址表中查询(当然也不可能有表项能匹配上),而是统一会向其他端口广播发出;

  • 我们在理解“封装”时,需要知道,有时也可能在数据尾部加上某些报文信息,这种也可称为封装,比如在数据链路层封装成帧时,就会在头部、尾部都会加上一些报文信息;

  • “封装”的另一个重要认知:以数据链路层封装为例,如果网络层传来的IP数据报文比较长(超出上限),那么是无法套在一个TCP头部之后的,这个时候需要需要对数据分片处理, , 然后在组装成多个帧(而不是一个)。其他各层也有类似特点。

  • 路由器很明显的一个特性是,同一路由器各个端口所在的网段是不可以冲突的,也就是必须互相位于不同网段。从最上面那张网络拓扑图也可以看出,在规划网络时,我们始终遵循这样的原则——同一LAN内的网络设备的IP地址必须处于同一网段。这也符合路由器隔离广播域、划分出各个LAN的特性。

  • 实例二涉及到“路由表”这个概念,我们需要知道,路由分为静态路由(手动配置添加路由)、动态路由(主要有四种RIP、OSPF、IS-IS、BG)。具体路由表配置可以参看我的这篇文章——静态路由表的配置(含负载分担、路由备份) 以及 多区域OSPF动态路由协议的配置

  • 关于L2转发、L3转发,我们上面所描述的实例一便属于L2转发,而实例二属于L3转发。可以借助下面这个图来帮助理解(其中1-5依次表示TCP/IP协议五层模型):

L2转发、L3转发
L2转发、L3转发

补充内容

局域网&以太网

局域网是在20世纪70年代末发展起来的,局域网技术在计算机网络中占有非常重要的地位。其主要特点是:网络为一个单位所拥有,且地址范围和站点数目均有限。局域网刚出现的时候,局域网比广域网具有较高的数据率、较低的时延和较低的误码率。但随着光纤技术在广域网中普遍使用,现在广域网也具有较高的数据率和较低的误码率。

必须指出,局域网工作层次跨越了数据链路层和物理层。局域网可使用多种传输媒体,其中双绞线已成为局域网中的主流传输媒体,当数据率很高时,往往需要使用光纤作为传输媒体。

按拓扑结构划分,局域网可以分为星形网(集线器Hub的大量应用)、环形网(与令牌机制相关)、总线网(以传统的以太网最为出名)。局域网经过四十多年的发展,尤其是在快速以太网(Fast Ethernet,100Mbit/s)和吉比特以太网(Gigabit Ethernet,1Gbit/s)、10吉比特以太网(10 Gbit/s)相继进入市场后,以太网已经在局域网市场占据绝对优势。可以这样说,现在的以太网几乎成了局域网的同义词。(由于以太网的传输速率已演进到每秒吉比特甚至100Gbit/s,因此通常用“传统以太网”来表示最早流行的10Mbit/s速率的以太网

以太网的发展与两个标准

最开始的以太网是一种基带总线局域网(数据率为2.94Mbit/s),于1975年由美国施乐公司研制成功。1980年,DEC公司、英特尔公司和施乐公司联合提出了10Mbit/s以太网规约的第一个版本DIX V1。1982年修改为第二版规约(实际上也是最后的版本),即DIX Ethernet V2,成为世界上第一个局域网产品的规约。
在此基础上,IEEE 802 委员会的802.3工作组与1983年制定了第一个IEEE的以太网标准 IEEE 802.3,数据率为10Mbit/s。但实际上,以太网的两个标准 DIX Ethernet V2 和 IEEE 802.3标准只有很小的差别,因此很多人也会把802.3局域网称为“以太网”(严格来讲,“以太网”应当指符合DIX Ethernet V2标准的局域网)。

出于有关厂商在商业上的竞争,IEEE 委员会未能形成一个统一的、“最佳的”局域网标准,而是被迫制定了几个不同的局域网标准,如802.4令牌总线网、802.5令牌环网等。

为了使数据链路层更好地适应不同的局域网标准,IEEE 802委员会就把局域网的数据链路层拆成两个子层,即逻辑链路控制子层LLC(Logical Link Control)和媒体接入控制子层MAC(Medium Access Control)。 与接入到传输媒体有关的内容都放到MAC子层,而LLC子层则与传输媒体无关,不管采用何种传输媒体和MAC子层的局域网对LLC子层来说都是透明的。


但需要注意的是,局域网市场的竞争在20世纪90年代逐渐明朗。以太网在局域网市场已经取得了垄断地位,并且几乎成为了局域网的代名词。TCP/IP体系中经常使用的局域网只剩下DIX Ethernet V2 而不是 802.3标准中的局域网,因此,IEEE 802委员会制定的逻辑链路控制子层LLC的作用也就消失了。现在的很多厂商生产的适配器上就仅安装有MAC协议而没有LLC协议。(回顾我们上面的两个分析实例,就没有考虑LLC子层)

网络适配器

从一般概念上理解,计算机同外部局域网的连接是通过适配器进行的,而最开始适配器是在主机箱内插入的一块网络接口卡(简称“网卡”)。但现在的计算机大都将这种适配器嵌入计算机主板,不再单独使用单独的网卡,所以,“网络适配器”的说法会比“网卡”说法更精确

适配器和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行的。因此,适配器一个重要功能就是要进行数据串行传输和并行传输的转换

网络上的数据率和计算机总线上的数据率并不相同,因此是适配器中必须装有对数据进行缓存的存储器模块

在主板插上适配器后,还必须把管理该适配器的设备驱动程序安装在计算机的操作系统中,这个驱动程序以后就会告诉适配器,应当从存储器的什么位置把多长的数据块发送到局域网,或者应当在存储器的什么位置上吧局域网发过来的数据块存储下来。

计算机的硬件地址固化在了网络适配器的ROM中,故硬件地址的概念等同于物理地址、MAC地址。这和IP地址这种逻辑上的概念不同,所以IP地址则会保存在计算机的存储器中

根据上面的内容表述,总结:适配器所实现的功能包含了数据链路层和物理层,适配器上装有处理器模块和存储器模块(包括RAM和ROM)。

(摘自《计算机网络》谢希仁版)
适配器接收和发送各种帧时不使用计算机的CPU。这时CPU可以处理其他任务。
当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。
当适配器收到正确的帧时,它就使用中断来通知该计算机并交付协议栈中的网络层。
当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。

计算机通过适配器和局域网进行通信
计算机通过适配器和局域网进行通信

三层交换机

三层交换机就是指具有部分路由器功能的交换机。

(再次摘自百度百科)出于安全和管理方便的考虑,主要是为了减小广播风暴的危害,必须把大型局域网按功能或地域等因素划成一个个小的局域网,这就使VLAN技术在网络中得以大量应用,而各个不同VLAN间的通信都要经过路由器来完成转发,随着网间互访的不断增加。单纯使用路由器来实现网间访问,不但由于端口数量有限,而且路由速度较慢,从而限制了网络的规模和访问速度。基于这种情况三层交换机便应运而生,三层交换机是为IP设计的,接口类型简单,拥有很强二层包处理能力,非常适用于大型局域网内的数据路由与交换,它既可以工作在协议第三层替代或部分完成传统路由器的功能,同时又具有几乎第二层交换的速度,且价格相对便宜些。

三层交换机出现最重要的目的是加快大型局域网内部的数据交换,所具备的路由功能也多是围绕这一目的而展开的,所以它的路由功能没有同一档次的专业路由器强。毕竟在安全、协议支持等方面还有许多欠缺,并不能完全取代路由器工作。

在实际应用过程中,典型的做法是:处于同一个局域网中的各个子网的互联以及局域网中VLAN间的路由,用三层交换机来代替路由器,而只有局域网与公网互联之间要实现跨地域的网络访问时,才通过专业路由器。

VLAN

虚拟局域网VLAN,英文全称为Virtual Local Area Network,很显然,“虚拟”意味着不存在物理实体的,因此在理解VLAN的时候,需要我们有一定的逻辑思维。我们前面一直有提到——一个局域网LAN就是一个广播域,这种观点在VLAN出现后就应当有所改变了,VLAN技术就是将一个物理的局域网LAN在逻辑上划分成多个广播域,每一个广播域就是一个VLAN。可以根据交换机的端口,或每个主机的MAC地址,或每个主机的网络层地址或协议类型(如果支持多协议)等来进行划分。

上面这段解释透露了这样一个信息——虚拟局域网只是局域网提供给用户的一种“技术服务”,而并不是一种什么“新型局域网”。

(摘自《计算机网络》谢希仁版)有这样一个网络拓扑如下图,设有10台主机分配在三个楼层中,构成三个局域网(由此可知这里使用的以太网交换机是指带路由功能的三层交换机),即:LAN1;(A1,A2,B1,C1),LAN2:(A3,B2,C2),LAN3:(A4,B3,C3)。但这10个主机划分为三个工作组,也就是说划分为三个虚拟局域网。即:VLAN1:(A1,A2,A3,A4),VLAN2:(B1,B2,B3),VLAN3:(C1,C2,C3)。

三个虚拟局域网VLAN1、VLAN2、VLAN3的构成
三个虚拟局域网VLAN1、VLAN2、VLAN3的构成

从图中可以看出,每个VLAN的主机可以在同一局域网LAN中,也可以处在不同的局域网LAN中,也可以不在同一楼层中。这说明同一个VLAN内的各个工作点没有限制在同一个物理地址范围,也没有限制在同一物理的LAN网段。
利用以太网交换机(带路由功能的三层交换机)可以很方便地将这10台主机划分为三个虚拟局域网:VLAN1、VLAN2、VLAN3。在虚拟局域网上的每一个工作点都可以收到同一虚拟局域网上的其他成员所发出的广播。例如,主机B1~B3同属于虚拟局域网VLAN2,那么A1、A2和C1都不会收到B1发出的广播消息,虽然他们与B1连接在同一个以太网交换机上。这样,虚拟局域网限制了接收广播信息的主机数,使得网络不会因传播过多的广播消息而引起性能恶化(广播风暴)。

从上面这个例子可以看出,由于虚拟局域网是用户和网络资源的逻辑组合,因此可以按照需要将有关设备和资源非常方便地重新组合。例如,某个单位拥有财物、开发和办公三个部门,出于安全和管理方面的考虑,希望每个部门的计算机可以无障碍通信,部门之间的通信则需要进行控制。采用VLAN技术就可以容易地实现这种用户需求。

可能你有发现上面那张拓扑图中有这样一行小字“使用802.1Q帧格式”,这是IEEE为支持虚拟局域网,对标准以太网的帧格式进行了拓展。由于这部分拓展给以太网帧的首部增加了4个字节,因此以太网的最大帧长从原来的1518字节(1500字节的数据加上18字节的“首部”封装)变成了1522字节。

插入VLAN标记TAG的802.1Q帧格式
插入VLAN标记TAG的802.1Q帧格式

在大型局域网中,VLAN技术给网络管理员和网络用户都带来了许多好处。归纳起来主要有以下几点:

  • 减少移动和改变的代价,即所说的动态管理网络,也就是当一个用户从一个位置移动到另一个位置时,他的网络属性不需要重新配置,而是动态地完成,这种动态管理网络给网络管理者和使用者都带来了极大的好处。一个用户,无论他到哪里,他都能不作任何修改地接入网络。当然,并不是所有的VLAN定义方法都能做到这一点。
    * 虚拟工作组(Grouping)。使用VLAN的最终目标就是建立虚拟工作组,例如,在企业网中,同一个部门好像在同一个LAN上一样,很容易互相访问、交流信息,同时,所有的广播包也都限制在该虚拟LAN上,而不影响其他VLAN的人。一个人如果从一个办公地点换到另外一个办公地点,而他仍然在该部门,那么,该用户的配置无须改变。同时,如果一个人虽然办公地点没有变,但他更换了部门,那么,只需网络管理员更改一下该用户的配置即可。这个功能的目标就是建立一个动态的组织环境。
  • VLAN的应用解决了许多大型二层交换网络产生的问题:限制广播包,提高带宽的利用率,有效地解决了广播风暴带来的性能下降问题。一个VLAN形成一个小的广播域,同一个VLAN成员都在由所属VLAN确定的广播域内。那么,当一个数据包没有路由时,交换机只会将此数据包发送到所有属于该VLAN的其他端口,而不是所有的交换机的端V1,这样,就将数据包限制在了一个VLAN内,从而在一定程度上可以节省带宽。
  • 增强通信的安全性。一个VLAN的数据包不会发送到另一个VLAN,这样,其他VLAN用户的网络上收不到任何该VLAN的数据包,这样就确保了该VLAN的信息不会被其他VLAN的人窃听,从而实现了信息的保密。
  • 由于VLAN是从逻辑上对网络进行划分,组网方案灵活,配置管理简单,从而降低了管理维护的成本

(再次摘自百度百科)大约有80%的通信流量发生在VLAN内,20%的通信流量要跨越不同的VLAN。目前,解决VLAN之间的通信一般采用两种路由策略,即集中式路由和分布式路由。

  1. 集中式路由
    集中式路由策略是指所有VLAN都通过一个中心路由器实现互联。对于同一交换机(一般指二层交换机)上的两个端口,如果它们属于两个不同的VLAN,尽管它们在同一交换机上,在数据交换时也要通过中心路由器来选择路由。
    这种方式的优点是简单明了,逻辑清晰。缺点是由于路由器的转发速度受限,会加大网络时延,容易发生拥塞现象。因此,这就要求中心路由器提供很高的处理能力和容错特性。
  2. 分布式路由
    分布式路由策略是将路由选择功能适当地分布在带有路由功能的交换机上(指三层交换机),同一交换机上的不同VLAN可以直接实现互通,这种路由方式的优点是具有极高的路由速度和良好的可伸缩性。

没讨论到的地方

  • 物理层知识

    • 曼切斯特编码
    • 信道复用技术(频分复用、时分复用、波分复用、码分复用CDMA)
  • 数据链路层知识

    • CRC(循环冗余检验)检错技术
    • PPP协议(点对点协议)
    • CSMA/CD协议(载波监听多点接入/碰撞检测协议)
  • 网络层知识

    • 路由动态协议(RIP、OSPF、IS-IS、BGP)
    • 虚拟专用网VPN
    • 网络地址转换协议NAT
  • 传输层知识

    • TCP/UDP各自工作特点
  • 应用层知识

    • 域名系统DNS
    • 文件传送协议FTP
    • 简单邮件传送协议SMTP
  • 网络安全知识

    • 防火墙策略

参考资料