[NSX] Training01. L2 Unicast Switching
일반 Switch에서는 Broadcast Domain 생성을 위해, 0~4095 Range의 VLAN을 설정
NSX에는 L2 encapsulation에 따라, 2가지 유형의 L2 Domain 생성 가능
1. VLAN encapsulation
L2 Domain 구분을 위해, 12bit VLAN ID 사용: 0~4095
NSX는 VLAN switch의 각 port별 protection을 위해서 DFW(distributed firewall) 지원
NSX의 VLAN switch는 vSphere의 virtual switch와 동작 방식 동일
2. Geneve encapsulation
L2 Domain 구분을 위해, 24bit VNI(Virtual Network Identifier) 사용
Physical Switch의 Port 갯수는 제한이 있지만, NSX는 On-demand 방식으로 Port 갯수가 동적으로 증가 및 감소
NSX의 각 Port는 동적으로 생성되며, Segment의 모든 속성을 상속
NSX는 Network Attachment 작업 동안, Port와 VIF를 생성하고, 자동으로 VM을 VIF를 사용하는 Port에 연결
Ethernet Networking에서는 Ethernet Header에 IP Packet을 Encapsulation
VLAN Networking은 동일 Network Wire를 통과할 때에, L2 Domain을 구분하기 위해서, Ethernet Header를 확장하여, VLAN Tag를 수용
반면에, NSX Overlay Networking은 별도의 Header를 추가하며, 이는 Application이나 VM 측면에 변화가 필요 없음
VM 관점에서는 여전히 Ethernet Connection을 통해서 Packet을 주고 받음
VM의 이러한 Ethernet Connection을 유지하기 위해서, NSX Overlay Networking은 VM의 Ethernet Frame을 Geneve Header에 Encapsulation
Geneve는 Encapsulation을 위해 IP를 사용하며, 2가지 Section을 가지는 Payload를 포함한 UDP Packet
하나는 VNI값과 다른 Data를 포함하는 Geneve Header
다른 하나는 VM의 Ethernet Frame
NSX Switching Fabric을 구성하는 Transport Node는 VM으로부터의 Packet을 수신하고 Encapsulation하여 목적지 VM이 위치한 Remote Transport Node로 전달
Remote Transport Node는 Outer Geneve Header를 벗겨내고, 목적지 VM에 Payload의 두 번째 Section인 Ethernet Frame을 전달
따라서, Source/Destination VM이 NSX Overlay Networking에 연결되어 있는 경우, Overlay 환경에서 동작한다는 것을 인지할 수 없음
Geneve는 RFC8926에서 정의(https://datatracker.ietf.org/doc/html/rfc8926)되어 있으며, Geneve Packet의 형태는 다음과 같음
3.1. Geneve Packet Format over IPv4 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Outer Ethernet Header: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Outer Destination MAC Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Outer Destination MAC Address | Outer Source MAC Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Outer Source MAC Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Optional Ethertype=C-Tag 802.1Q| Outer VLAN Tag Information | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethertype = 0x0800 IPv4 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Outer IPv4 Header: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live |Protocol=17 UDP| Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Outer Source IPv4 Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Outer Destination IPv4 Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Outer UDP Header: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port = xxxx | Dest Port = 6081 Geneve | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | UDP Length | UDP Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Geneve Header: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Ver| Opt Len |O|C| Rsvd. | Protocol Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Virtual Network Identifier (VNI) | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ~ Variable-Length Options ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Inner Ethernet Header (example payload): +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Inner Destination MAC Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Inner Destination MAC Address | Inner Source MAC Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Inner Source MAC Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Optional Ethertype=C-Tag 802.1Q| Inner VLAN Tag Information | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Payload: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Ethertype of Original Payload | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Original Ethernet Payload | | | ~ (Note that the original Ethernet frame's preamble, start ~ | frame delimiter (SFD), and frame check sequence (FCS) are not | | included, and the Ethernet payload need not be 4-byte aligned)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Frame Check Sequence: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | New Frame Check Sequence (FCS) for Outer Ethernet Frame | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
Figure 2: Geneve Packet Format over IPv4
Geneve Packet의 상세 내용을 살펴보면,
1. Ethernet Header
Geneve IP Packet이 Ethernet Frame으로 Encapsulation되어 Datacenter Network 내에서 통신 가능
Underlay Network 관점에서 Geneve IP Packet은 일반 IP Packet과 동일
Geneve Header를 수용하기 위해 Jumbo Frame 설정이 가능한 점 외에는 NSX Overlay Fabric을 사용하기 위한 다른 기능이 필요하지 않음
2. IPv4 Header
Geneve는 IP 기반으로 Fabric 내에 NSX Connection을 위한 Source/Destination IP Address를 포함한 일반 IP Header 사용
3. UDP Header
Destiantion은 UDP/6081 포트 사용
Source는 Original Packet의 IP Header를 Hashing한 값 사용
4. Geneve Header
L2 Broadcast Domain을 구분하기 위한 VNI 값 사용
Geneve Header에는 Fixed 된 값 이외에, Option Type Identifier, Option Length, Option Value 등 추가 Option을 포함하는 가변적 Section이 위치
NSX Transport Node는 Fabric 내에 Connection을 제공하기 위해, 한 개 이상의 TEP(Tunnel endpoints)이라고 불리는 Interface 사용
이 TEP은 Encapsulation Header에서 Source/Destination IP Address로 사용
Geneve 는 VXLAN과 달리 Variable Length Option을 제공하는데 이를 TLV(Type-Length-Variable)라고 부르며, 이를 통해, Geneve Header의 크기가 가변적으로 변경
TLV는 통해 NSX는 Enhanced Telemetry나 Packet Tracing과 같은 기능들을 활성화하기 위한 Metadata 추가 가능
따라서, Underlay Network는 이 TLV를 수용하기 위한 Header 크기를 고려하여 MTU Size 설정 필요
만약 VM이 Standard 1500 MTU를 사용하는 경우에는, TLV를 고려하여 1700 bytes를 MTU로 설정하는 것을 권고
Underlay Network에서 end-to-end간 MTU를 올바르게 설정하지 못하는 경우 Packet Fragmentation으로 인해 성능상 영향 발생
MTU 설정 구간
1. Compute Host에서 VDS를 사용하는 경우, VDS에서 MTU 설정
2. Global TEP MTU