Featured image of post BUAA CN Week2 N层

BUAA CN Week2 N层

愈加混乱的报文

说在前面

做实验的时候我就在想,我是否有能力写好这篇博客。

本次实验做完之后,没有充沛的分享欲,而只是劫后余生的感慨。

明明是N层实验,但整体来说和D层实验的感觉十分相似,你需要熟练展现上次实验所培养你的能力与素养。

但除此之外,本次实验还要求你熟络ARP和ICMP,尤其是它们在报文中的封装。

一些提醒:

  1. 小程序传图片时一定要及时,晚一点就无法再上传。

  2. 传的图片尽可能展示核心内容,若缺乏重点可能拿不到9.5。

  3. 报文直接筛选好 arp or icmp。本次实验就只涉及这两种。

  4. 如何修改PC的IP地址

    控制面板->网络和共享中心->左侧栏“更改适配器设置”->右键“本地连接”->点击属性->双击IPv4项即可进入修改,可修改本机IP地址、子网掩码和缺省网关。

  5. 不同网段为啥还要分不同VLAN?

    不同网段确实拥有不同的广播号,但是不同广播号不代表不同广播域!!

    不加处理的话,大家都在缺省VLAN里,处于同一广播域

    广播号只能决定我是否接受,但是仍然会被泛洪到!

    N层的IP管理当然管不到D层的传输。

ARP

在理论课上,我们只是知道:

  1. A想要B的MAC地址,发出ARP报文,上面写着A的IP地址、A的MAC地址以及B的IP地址。
  2. ARP报文被广播,同广播域内如果有B,B将单播回一个ARP报文。

但在实验课,你需要掌握:

  1. ARP有一个缓存的表
  2. PC的ARP缓存表在cmd直接arp -a就可以看到。中间设备则需要在PuTTY上display arp
  3. 如果下一跳不在ARP缓存表里,我就要发ARP去找到下一跳的MAC地址。
  4. 对于跨网段的ping,下一跳当然是缺省网关
  5. ARP request 广播时,目标MAC地址是ffff-ffff-ffff,不过在报文中目标MAC地址显示为全0

ICMP的理论课讲得倒比较详细,实验涉及的也很浅,不作解释。

跨交换机VLAN间路由实验

下面重点讲这个实验的ARP与ICMP报文分析。

组网图

首先这道实验题以分析为主。因为有大量步骤,凭实验不能单步观测变化情况。

此外,要知道S1是三层交换机,有跨网段路由功能。S2是双层交换机,只是个同网段内引路的。

接下来,我们就从理论角度,分析这样一个删去全部缓存的组网如何实现PCC ping PCD。

PCC想知道下一跳

PCC和PCD经过计算发现属于不同网段。

PCC要把ICMP(ping request)发给缺省网关——192.168.2.1,也就是S1的VLAN2接口。

PCC的下一跳就是192.168.2.1。

PCC的ARP Cache是空的。

PCC要向192.168.2.1发送ARP request报文

Source: 192.168.2.11 PCC_MAC

Dest: 192.168.2.1 FFFF-FFFF-FFFF

路过交换机S2

要知道这个ARP报文的信息很明确,不会再改变了

S2只是一个路由,一个搬运工,告诉你往哪个端口走,仅此而已。

MAC表也是这样简单,谁给我发了东西,我就把source(mac+vlan)和它进来的端口学习下来。

不过交换机还有一个功能,就是管理VLAN。毕竟VLAN是D层的事情。

交换机的端口就是划分VLAN的工具。你从这个口进来,那你就是这个VLAN。

端口分为access/trunk/hybrid这三种。

  • access是我们一般理解的那种,一个端口只对应一个vlan,广播泛洪的时候只对同VLAN的全部端口。

    所以一进来我就知道你是哪个VLAN,就先给你打上tag

    相应地,从access口出去**不需要打(需要去掉)**tag,同样因为从我这出去的VLAN号是可以确定的。

  • trunk的特点是一个端口支持多种vlan。因此从它出去要带上vlan tag。

    需要注意其实也不需要注意,每对trunk端口都有一个PVID,PVID用于适配无VLAN时代的设备。所以如果VLAN号为PVID,就相当于无Tag,出去的时候也要去掉tag。

  • hybrid更自由,可以指定出去时某些vlan带tag,某些vlan不带tag。

好嘞,铺垫这么多,一鼓作气讲清楚吧!

Step 1

首先是PCC发了ARP广播,只可惜只广播到了S2这里。

此为Step1。

Step 2

S2首先收到报文先学习MAC表,PCC_MAC对应GE1/0/1。

然后为报文打上VLAN Tag=2(因为S2的GE1/0/1是access VLAN 2)。

然后S2要继续广播,发现支持VLAN2的只有GE1/0/1和GE1/0/13,除了自己之外,就只能给trunk口GE1/0/13了。

从trunk口出,不去除tag。

因此从GE1/0/13发送了含tag VLAN id=2的报文。

此为Step2。

S1回应PCC的ARP报文

Step 3

首先S1作为交换机,收到报文肯定也是先学习MAC表,PCC_MAC对应GE1/0/13。

但同时作为N层相关设备,随便收到一个报文也会直接学习ARP Cache,192.168.2.11对应PCC_MAC。

PCC向192.168.2.1发送的ARP request报文是:

Source: 192.168.2.11 PCC_MAC

Dest: 192.168.2.1 FFFF-FFFF-FFFF

而S1的VLAN2接口就是192.68.2.1。

所以S1应当把VLAN2接口的MAC地址传回PCC。

因为刚学到MAC表里PCC_MAC对应GE1/0/13,所以ARP reply直接从这个trunk口发出去。

从trunk口出去要带tag,因为是从VLAN2接口发的,所以VLAN id = 2。

192.168.2.1向192.168.2.11发送的ARP reply报文是:

Source: 192.168.2.1 VLAN2_MAC

Dest: 192.168.2.11 PCC_MAC

此为Step3。

再次路过S2

Step 4

S2首先收到报文先学习MAC表,VLAN2_MAC对应GE1/0/13。

S2要继续单播,发现PCC_MAC对应GE1/0/1。

从access口出,去除tag

此为Step4。

PCC向下一跳发出ICMP-ECHO-REQUEST

Step 5

PCC收到了报文,直接学习ARP:192.168.2.1对应VLAN2_MAC。

这下终于知道了,我要去ping PCD了!

之前我知道N层的Source和Dest,但是一直不知道D层对应的下一跳应该是谁,现在终于可以封装报文了。

  • Source IP:192.168.2.11

  • Dest IP:192.168.3.11

  • Source MAC:PCC_MAC

  • Dest MAC:VLAN2_MAC

此为Step5。

Step 6

依旧经过交换机S2。

S2首先学习:PCC_MAC,啊嘞,这个学过了。

然后access口进,所以带tag vlan2。

接下来和Step2不同的是,现在是单播

所以要查表,目标是VLAN2_MAC,这个也学过。那很好!不然就又要广播了。

直接从trunk口GE1/0/13出,不去tag。

此为step6。

ICMP报文更改!

ICMP报文发了一半,把第一段D层打通了。

接力棒传到S1的interface vlan2这里来了。

接下来经过某种判断逻辑你可以不知道,但很显然S1知道。

S1知道它该把报文交付给网络层处理了。

然后ICMP报文成功地从interface vlan3出来了。

ICMP报文的N层没有改变,而外部的D层则换成了路由器选择的新路由:

VLAN3_MAC,到它的下一跳:PCD。

ICMP报文的内容正式变为:

  • Source IP:192.168.2.11

  • Dest IP:192.168.3.11

  • Source MAC:VLAN3_MAC

  • Dest MAC:PCD_MAC

int VLAN3想知道下一跳

Step 7-8

再次审视报文内容。

PCD_MAC是未知的。

我需要——ARP!

接下来便是和Step1-2如出一辙。

此为step7-8。

PCD回应S1的ARP报文

Step 9-10

其实你知道这个和Step3-4如出一辙。

但是为了标题工整一点,就写这么几句话占个位置。

此为step9-10。

int VLAN3向下一跳发出ICMP-ECHO-REQUEST

Step 11-12

以防你不知道,在刚刚ARP的request与reply中,PCD和int VLAN3学到了ARP Cache,S2学到了MAC表。

这一段和Step5-6也只能说如出一辙了。

此为step11-12。

PCD向下一跳发出ICMP-ECHO-REPLY

诶诶你PCD怎么就能直接发reply?不用ARP?

好吧我写这个问题纯粹无聊打几个字。。

都叫reply了,PCD早就学进ARP Cache了。

Step 13-16

哎哟我真不想写了。

Step13-14就是Step5-6,Step15-16就是Step11-12。

此为step13-16。

后记

一写就又写了三个小时。

不过确实是弄明白了不少当时不太清楚的问题。

我特意把StepX也写进了标题里,方便你直接去跳转~

写博客本意是对问题的再思考,但如果还能帮到你们就太好了!

comments powered by Disqus
Easy Life and Easy Learning
使用 Hugo 构建
主题 StackJimmy 设计