본문 바로가기

네트워크/Network 가상화

Nexus - NX-OS 정리 Part 26(FabricPath - 3)

지난 포스팅에 이어서, 비교적 빠르게 이틀정도만에 새로운 포스팅을 하게되었습니다.

이번 내용은 FabricPath에서의 Packet Flow에 대한 대략적인 사항입니다.

그 동안 포스팅 전 단계로 정리했던 자료들이 있어서, 포스팅을 위해 조금 더 보완하면 그래도 예전보다는 조금이나마

자주 포스팅할 수 있지 않을까? 싶습니다.......만..

다른 것들도 해야할 것들이 있어서.. 어찌될지.. 모르겠네요. ^^;

내용 중에 이상한 점이나, 수정해야할 사항 있으시면 덧글 부탁드립니다.


 

 

 

Broadcast ARP Request

1.  Host AHost B와 같은 Subnet에 존재한 상태에서 통신하고자 할 때, Host AHost B와 통신하기 위해서, Host B IP Address

    ARP Request를 보내게 되고, 이는 Host ASource MACall-ones broadcast destination MAC(FFFF.FFFF.FFFF)로 설정되어

    전송한다.

 

2.  S500FabricPath Edge SwitchFabricPath mode VLAN으로 설정된 e1/13 edge port에서 Frame을 수신한 후에

     source/destination  MAC-AddressTable에서 Lookup한다.

    {VLAN 10, MAC A}에 대한 Source MAC Lookup이 실패하고,  S500Forwarding Engine에서 e1/13에 대한 MAC 정보를

    Local Entry로

    무조건 학습하게 된다

    NX-OS 6.1(2) 혹은 6.2(2) {F2/F2E & F1 모듈) 이전에서는 MAC A는 오직 Frame이 들어오는 Interface,   즉 여기서 e1/13

    Forwarding  Engine ASIC에서만 학습을 하고, 다른 Forwarding Engine 에서는 MAC A에 대해서는 학습을 하지 않는다.

     NX-OS 6.1(2) 혹은 6.2(2) 이후 버전에서는 MAC AFabricPath core port의 모든 Forwarding Engine과 동기화된다.

    Destination MACVLAN 10으로 Flooding 되며, S100FabricPathEncapsulation하여 Multi-destination으로 Flood한다.

 

3. S500Broadcast Frame을 전송하기 위해 Multi-Destination Tree를 선택한다.

  FabricPath Switch에서 broadcast/non-IP multicast, unknown unicast Traffic에 대해 어떤 Tree로 전송을 할지에 대해서 hash 함수에

  의해  결정한다. (HashDefault로 설정은 Source/Destination IP, Layer 4 Port 이다.)

  그러나, F1 Module에서는 항상 broadcast/non-IP multicast, unknown unicast Traffic 대해 Tree 1을 통해서 전송을 한다.

   (VPC+ 예외)

  예제에서 FabricPath Header를 구성하는 Frame은 다음과 같은 구성 요소를 가진다.

     - Outer DA : Broadcast를 전송 시에는 All-ones Broadcast MAC의 동일한 값으로 설정하게 된다.

     - Outer SA : SID-500 / sSID – 0 (vPC+사용안함) / LID – 12 (e1/13 포트. 0부터 13번째 값)

     - FabricPath TAG : EtherType - FabricPath (0x8903) / FTAG – 1 / TTL - 32

 

4. FabricPath-EncapsulationFrameneighbor switch로 전송되고, S10에서는 FrameLookup 한다.

   S10FabricPathHeader 값에 이미 Broadcast로 설정되어 있고 Ftag값도 결정되어 있기 때문에 이를 기준으로 Forwarding을 한다.

   S10에서 Ftag 1(Tree 1)에 대한 경로는 Po 500, 600, 700이 있기 때문에 이 쪽으로 Frame을 전송하면서 TTL 값을 1 낮춘다.

   S10에서는 어떠한 Mac 학습도 하지 않는다.

 

5. S600, S700에서는 각각 S10에서 보내온 FabricPath-EncapsulationFrame을 받게 된다.

   S600에서는 Tree 1 속한 다른 Interface에가 존재하지 않기 때문에 더 이상 FabricPath에 의한 Flood를 하지 않는다. 만약 VLAN 10

  대한 FabricPath Edge Port가 있는 경우에는 FabricPath HeaderDe-capsulation한 후에 Edge PortOriginal Broadcast Ethernet

  FrameFlood 한다.  S200에서는 어떠한 MAC도 학습하지 않는다.

   S700에서는 Tree 1에 속한 Interfacepo 20, 30, 40이 있기 때문에 해당 InterfaceFrameTTL 1 낮춘 이후에 다시 전송을 한다.

   S700도 마찬가지로 이 과정에서 어떠한 MAC도 학습하지 않는다.

   S20, S30, S40Tree 1에 대한 Interface가 존재하지 않기 때문에 S600과 마찬가지로 FabricPath에 의한 Flood를 하지 않으며,

   VLAN 10   대Interface도 없기 때문에 해당 FrameDiscard 된다. 마찬가지로 MAC 학습은 하지 않는다.

 

6. S700Fabricpath HeaderDe-capsulation한 후에 Edge PortOriginal Broadcast Ethernet FrameFlood한다.

   이 예에서는 Host A에 대한 Broadcast ARP에 대해서 Host B가 응답을 하게 되고, S700S500에 대한 MAC을 학습하게 된다

 

 

 

 

 

7. Host A로 부터 Broadcast ARP전송받은 Host BSource MAC은 자신의 MAC, Destination MACHost AMAC으로 하여

   Standard Ethernet frame으로 unicast ARP Reply를 보낸다. 

 

8. S700Fabricpath-mode vlan 10으로 설정된  FabricPath Edge port에서 Frame을 수신 받고, Source/Destination Mac Address

   Table Lookup한다. {VLAN 10, MAC B}에 대한 Source MAC Lookup이 실패하고 ,  S700Forwarding Engine에서 e2/29

    대한 MAC 정보를  Local Entry 정보로 무조건 학습하게 된다

 {VLAN 10, MAC A}에 대한 Destination MAC Lookup도 실패하게 되며, 이는 VLAN 10에 대해 Forwarding Engine

   unknown unicast로  S700Vlan 10 Edge PortMulti-Destination Tree로 각각 Flood한다.

 

9. S700unknown unicast frame을 전송하기 위해서 Tree 1을 선택했다고 가정을 하여, 해당 FrameTree 1Interface

   Po 10, 20, 30, 40 으로 전송을 한다.

  예제에서 FabricPath Header를 구성하는 Frame은 다음과 같은 구성 요소를 가진다.

     - Outer DA :  unknown unicast frame을 위해 reserved multicast MAC Address(010F.FFC1.01C0, MC1이라고도 함)로 설정

     - Outer SA : SID-700 / sSID – 0 (vPC+사용안함) / LID – 64

     - FabricPath TAG : EtherType - FabricPath (0x8903) / FTAG – 1 / TTL - 32

 

10.FabricPath-EncapsulationFrame은 인접 FabricPath SwitchS10, S20, S30, S40으로 전송 된다.

   S20, S30, S40Tree 1으로 구성된 추가적인 Interface도 없으며, Vlan 10에 대한 Interface도 없기 때문에 FrameDiscard되며

  Mac Address도 학습하지 않는다.

   S10에서는 Tree 1에 대한 2개의 Interface (Po500, Po600)이 있기 때문에 TTL1감소 시키고 해당 Interface로 전송한다.

 

11. S500, S600FabricPath-EncapsulationFrame에 대해서 Lookup을 수행한다. S600에서는 더 이상 Tree 1에 속한 Interface

     없기 때문에  Multi-Destination에 대한 전송을 종료된다. 만약 Vlan 10에 대한 Edge Port가 존재할 경우에는 Fabricpath Header

    De-capsulation한 후에  Edge PortOriginal Broadcast Ethernet FrameFlood한다.  S600은 이 과정에서 어떠한 MAC도 학습하지

    않는다.

 

12. S500에도 Tree 1에 속한 Interface없기 때문에 Multi-Destination에 대한 전송을 종료된다.  S500에는 Vlan 10에 대한 Edge Port

    있기 때문에 Fabricpath HeaderDe-capsulation한 후에 해당 Edge PortOriginal Broadcast Ethernet FrameFlood한다.

    Egress Forwarding Engine에서는 DMAC에 대해서 Local MAC Address로 이미 학습되어 있는지 MAC Lookup을 하고,

    만약 존재한다면 Outer SA의 값으로 SMAC 정보를 Remote MAC Entry로 학습하게 된다.  Host AForwarding Engine ASIC에서는

     inner DMAC(MAC A)에 대한 정보가 Local Entry로 이미 학습되어 있기 문에 Inner SMAC(MAC B) 대한 정보는 Outer SA의 정보

    (SID/sSID/LID) 700.0.64 학습하게 된다..

 

 

 

 

 

13. Host B로부터 unicast ARP Reply를 받게 되면, Host A Host B로 바로 Unicast를 전송할 수 있다.  이러한 Unicast 전송은 기존과

    마찬가지로 Standard Ethernet frame으로 Host A source MAC (SMAC)으로, Host BDestination MAC(DMAC)으로 설정한다.

 

14. S500 FabricPath-mode Vlan 10Edge port에서 frame을 수신 받고, Frame에 대해서 Source/Destination MAC Address

    대해서 MAC-Address TableLookup한다.

      {VLAN 10, MAC A}에 대한 Source MAC lookup 시에는 이미 기존 Table에 학습되어 있기 때문에 Lookup 되면서, Mac A에 대한

     Aging Timer Update하게 된다.

      {VLAN 10, MAC B}에 대한 Destination MAC Lookup 또한 기존의 SID,sSID, LID로 구성된 Remote 정보(700.0.64)Lookup을 한다.

 

15. Forwarding Engine에서는 목적지 Host B로 전송하기 위해 Lookup정보를 기반으로 Switch 700에 대한 Routing Lookup을 한다.  

      S500에서 S700으로 가기 위한 Next-hop Interface로는 S10, S20, S30, S40가 있으며 이들은 모두 동일한 Cost로 구성되어 있기

     문에  Hash  통해서 4개의 경로 중에 선택해서 전송하게 된다. 

      가령, S700을 가기 위한 경로로 Interface po30Hash에 대한 결과로 선택되었다고 가정하게 되면, 해당 Frame은 아래와 같은

     FabricPath Header 값을 가지고 Encapsulation한 후에  po30으로 전송한다.

     - Outer DA :  Lookup에서 확인된, SID,sSID, LID 값인 700.0.64로 설정된다.  

     - Outer SA :  500.0.12 설정된다.

     - FabricPath TAG : EtherType - FabricPath (0x8903) / FTAG – 1 / TTL - 32

 

16. S30에서는 수신받은 Frame에 대해서 outer SA에서의 Destination SID값을 가지고, Routing Lookup을 하고 S700으로 가는 경로를

    찾는다 현재 S700으로 가는 경로는 po700  있기 떄문에 po700으로 전송된다.

 

17. S700 FabricPathEncapsulationFrame을 수신 받고, Outer DADestination SIDRouting Lookup을 하면 S700

     FabricPath switch 외부라는 것을 알게된다. 이후의 동작은 Software Version에 따라서 다른데, FabricPath HeaderLID 값을

    사용하거나 Mac-Address TableLookup하여 Physical Edge Interface로 전송되게 된다.  ( 두 가지 경우의 결과는 동일하다)

 

18. Host B가 연결된 Forwarding Engine ASIC에서는 FabricPathinner DMAC(MAC B)에 대해서 이미 Local Entry에 가지고 있으며,

      inner SMAC(MAC A)에 대해서도 (500.0.12)라는 값으로 학습된 상태이다.

     여기서 핵심은 Unicast Data로 전송 시에는 다른 어떤 FabricPath switch에서 Source/Destination MAC을 학습하지 않는다는 것이다.