태그: L2

Network Study – 3주차 : Layer2 보충(VLAN, STP)

Layer2, 이더넷 스위칭을 다루면서 L2에서 사용하는 VLAN과 STP를 다루지 않았기에 다시금 보충하게 되었다.

VLAN에는 802.1Q, Cisco ISL(Inter-Switch Link), 802.1aq SPB(Shortest Path Bridging)이 있고, STP는 802.1D STP(Spanning Tree Protocol), 802.1w RSTP(Rapid Spaning Protocol), 802.1s MSTP(Multiple Spanning Tree Protocol) 그리고 SPB를 다룬다.

1. VLAN 개요

VLAN이란, L2단에서 하나의 물리적인 LAN을 여러 개의 가상의 LAN으로 나누는 기술을 말한다. 물리 망은 공유하지만, 부서에 따라 다른 네트워크 정책을 적용해야 할 경우나, 단순히 트래픽을 서로 격리할 필요가 있을 경우 사용된다. VLAN을 적용하면 일반적으로 보안이 강화된다.
VLAN의 동작은 VLAN Tagging을 통하여 이루어진다. VLAN이 설정된 포트로 프레임이 들어오면, 해당 프레임에 VLAN Tag를 붙인다. 그리고 목적지 포트가 같은 VLAN에 속하지 않으면 그 프레임을 폐기한다. 정상적으로 전달되는 경우 출력 포트를 나갈 때 VLAN Tag를 제거하여 호스트들이 패킷을 수신하게 한다. 이렇듯 VLAN은 종단간 통신에 있어 투명한 기술이다.
그리고 Trunk Port와 같이 다중 VLAN이 적용된 포트의 경우는 Tag를 붙인 채로 프레임을 보낸다. 덧붙여, Default 또는 Native VLAN이라 불리는 VLAN 1(설정으로 변경 가능)에 속한 프레임은 VLAN Tagging을 하지 않으며, Trunk Port로부터 태깅이 되지 않은 프레임이 넘어오면 Native VLAN으로 취급된다.

이러한 Port-Based VLAN이 전형적인 VLAN 적용 방식이며, 다른 방식으로는 Protocol-Based VLAN(802.1v)이 있다.

1-1. IEEE 802.1Q 상세 동작

IEEE 표준인 802.1Q의 동작에 대해 알아본다. 802.1Q는 표준 프로토콜이기에 가장 많이 사용되는 VLAN 프로토콜이라 할 수 있다.
단, 이더넷에서만 이용할 수 있다는 제약을 가진다. 몇몇 벤더는 비표준 기술로써 ATM 등에 대한 802.1Q을 지원한다.

802.1Q는 다음과 같이 프레임에 VLAN 태그를 삽입한다. Source MAC Address 뒤에 802.1Q 헤더가 오며, 첫 두 바이트 값은 0x8100이다. 이는 Ether-Type 필드와 겹쳐서, 802.1Q 프레임과 일반 프레임을 구분할 수 있도록 한다. 그리고 다음 3비트가 Priority 필드, 다음 1비트는DEI(Drop Eligible Indicator)로 혼잡 상황 발생시 이 프레임이 폐기될 수 있는지의 여부를 결정한다. 이전에는 이 값이 Ethernet-Token Ring 연동을 위한 CFI 값이었다.
그 뒤의 12비트가 VLAN ID 값으로 2^12 = 4096개의 VLAN ID 중에서 예약된 0과 4096을 제외한 1~4095, 최대 4094개의 VLAN ID를 사용할 수 있다.
특히, VLAN ID 0은 VLAN이 설정되지 않은 프레임을 의미하는데, 이  경우에는 Priority 옵션만을 사용하게 된다.

802.1Q는 지금도 계속 갱신되고 있으며, 최신 버젼의 802.1Q 지원은 벤더와 소프트웨어 버젼마다 다르다. 많은 Draft 중에서 802.1Q-2014 Draft Standard는 802.1aq와 병합되었다.

1-2. Cisco ISL 상세 동작

802.1Q와는 달리, ISL은 프레임을 캡슐화(Encapsulation) 한다. 때문에 프레임의 앞에 ISL Header가 추가되며, 끝에 FCS가 추가된다.

ISL 프레임의 구조는 다음과 같다.

(1) Destination Address (40Bit) : 특이하게도 48비트가 아닌 40Bit의 MAC을 사용한다. 이 주소는 멀티캐스트 주소로써, “01-00-0C-00-00” 또는 “03-00-0c-00-00″이다. 이 주소값은 패킷이 ISL 포맷임을 알린다.
(Q: 어째서 일반적인 L2 Address Type이 아닌가? Multicast Address가 맞긴 한가?)
(2) Type : ISL 프레임이 담고 있는 프레임의 포맷을 알린다. 0 : Ethernet, 1 : Token Ring, 2: FDDI, 3: ATM
(3) User : Type 필드의 확장으로, Priority를 나타낸다. 기본값은 0, 최대값은 3이다.
(4) Source Address : Source MAC Address이다.
(5) Length : ISL 프레임에서 DA, Type, User, SA, Len, FCS를 제외한 길이를 바이트 단위로 나타낸다. 따라서 총 길이 –  20Byte가 Length 값이 된다.
(6) SNAP (24Bit) : SNAP 값이다. 0xAAAA03을 가진다.
(7) High Bits of Source Address : OUI 값을 나타낸다. Cisco가 소유하고 있는 OUI 중 “00-00-0C”를 사용한다.
(8) Destination VLAN ID : VLAN ID값을 나타낸다. 최대 4096개의 VLAN을 지원한다. 이 중 0과 4096은 예약되어 있기에 사용 가능한 VLAN은 1-4095이다.
(9) BPDU and CDP Indicator : BPDU나 CDP 패킷을 캡슐화하였을 경우 세트된다.
(10) Index : 스위치의 Egress Port 번호를 나타낸다. 진단용으로만 사용되며, 수신한 측에서는 이 값을 무시한다.
(11) Reserved : Token-Ring, FDDI 프레임을 위해 예약된 값이다.
(12) Encapsulated Frame : 캡슐화된 원본 L2 프레임이다.
(13) FCS : 전체 ISL 프레임의 32Bit CRC 값이다.

ISL이 개발된 이후 802.1Q가 개발되었고, 현재는 ISL을 거의 사용하지 않는다. Ethernet에 맞춰 개발된 802.1q와 달리 더 다양한 네트워크를 지원한다는 장점이 있다.

 

2. STP 개요

STP(Spanning Tree Protocol)은 스위치 패킷의 루프를 방지하기 위하여 고안된 프로토콜이다. 토폴로지 구성에 있어, 스위치간 중복 링크가 활성화된 경우 브로드캐스트 패킷이 복사되어서 링크를 떠돌게 되는 브로드캐스트 스톰(Broadcast Storm)이 발생할 수 있다. 이러한 상태를 ‘루프가 발생했다’고 하며, 브로드캐스트 프레임, 혹은 다른 프레임이 스위치 링크를 무한히 떠돌아다니는 상황을 방지하고, 링크가 다운되었을 경우의 리던던시(Redundancy)를 제공하기 위해 STP가 사용된다.
한 가지 흥미로운 점은 Ethernet Frame에는 이러한 상황을 방지하기 위한 TTL 필드가 존재하지 않는다는 것인데, Ethernet을 만들 당시에는 이러한 문제를 미처 생각하지 못했던 것이 아닐까?
STP가 동작하는 방식은 매우 간단하다. Root Bridge를 선정하고, Root Bridge로 갈 수 있는 최단 경로의 포트를 선정한 뒤 다른 링크는 전부 블록시켜 버린다. 이를 통하여 모든 브리지(스위치)간의 통신이 가능해지며, 링크가 단절되었을 경우 자동으로 재연산을 수행하여 대체 경로를 찾는다.

STP의 문제점은 수렴 시간(Convergence Time)이 길어 링크 절체 시간이 길다는 것과, 대체 경로를 사용한 로드 밸런싱이 불가능하다는 것이 있다. 전자는 RSTP의 등장으로 어느 정도 해소되었지만, STP 알고리즘의 특성 상 대체 경로를 형성하는 것이 불가능하기에 현대 데이터센터에서 STP를 사용하는 것은 상당히 낭비가 큰 일이다. STP/RSTP를 대체하기 위한 프로토콜로는 SPB, TRILL 등이 있다. 물론 SDN을 통한 경로 관리도 대안이 될 수 있으리라.

2-1. STP 상세 동작

RSTP를 다루기에 앞서, STP의 동작을 먼저 다루도록 하겠다. STP에서 사용되는 용어들은 다음과 같다.

– Root Bridge : STP의 중심이 되는 브리지. 주로 Bridge ID값이 높은 장비가 선출된다.
– Root Port : Root Bridge로 가는 최단 경로에 위치한 포트
– Designated Port : Designated Bridge에 속한 포트 중 해당 LAN Segment의 Minimum Path Cost를 갖는 포트.
– Designated Bridge : LAN Segment에 연결되어 있는 브리지 중 Root 브리지로 가는 Path Cost 값이 가장 작은 경로를 가진 Bridge. 각 LAN 세그먼트마다 하나씩 선출된다. 이 때 주의해야 할 점은, 여기서의 LAN 세그먼트는 물리적인 세그먼트라는 것이다.
– BPDU(Bridge Protocol Data Unit) : STP에서 토폴로지 정보를 교환하기 위한 프레임을 말한다. 여러 종류의 BPDU들이 존재한다.

STP는 다음과 같은 순서로 동작한다.

1. 루트 브리지(Root Bridge) 선출
2. 루트 포트(Root Port) 선출
3. Designated Bridge 선출 (각 LAN Segment마다)
4. Designated Port 결정
5. Port State 천이 (Blocking – Listening – Leaning – Forwarding)

이제 이 과정을 좀 더 자세히 다뤄 보자. 하지만 상세 동작을 다루기 위해서는 BPDU에 대한 이해가 필요하기에 BPDU의 구조를 먼저 다루도록 하겠다.

BPDU 프레임의 구조는 다음과 같다.

(1) Configuration BPDU

(1) Protocol ID : 0x0000(STP)
(2) Protocol Version : 0x00 (IEEE 802.1D)
(3) BPDU Type : 0x00, Configuration BPDU
(4) Flags : 첫번째 비트가 TC, 마지막 비트가 TC Ack 플래그이다.
(5) Root Identifier (64Bit) : BPDU를 만든 브리지가 Root Bridge로 여기는 브리지의 ID.
(6) Root Path Cost (32Bit) : BPDU를 만든 브리지로부터 루트 브리지까지의 총 Path Cost값.
(7) Bridge Identifer (64Bit) : BPDU를 만든 브리지의 Bridge ID
(8) Port Identifier : BDPU를 전송한 포트의 Port ID
(9) Message Age (16Bit) : 루트 브리지에서 BPDU를 전송할 때 0으로 세트된다. 그리고 브리지를 타고 내려갈 때마다 1씩 증가하며, 각 브리지는 (자신의 Max Age – Messeage Age)만큼 BPDU를 보관한다. Timer가 Max Age를 넘어서면 BPDU는 만료된다.
(Q: 만약 Timer가 짧고, 많은 브리지를 거쳐야 한다면 BPDU가 도달 불가능한 브리지도 생길 것인가?)
(10) Max Age : Root Bridge의 Max Age 값.
(11) Hello Time (16Bit) : Root Bridge가 Hello를 보내는 주기.
(12) Forwarding Delay : Root Bridge에 설정된 Bridge Forwarding Delay 값.

여기서 주의할 점은 STP 타이머 값들은 모두 루트 브리지의 설정을 사용한다는 것이다. 루트 브리지의 타이머 설정은 Configuration BPDU를 통해 전체 브리지들로 전파된다.

(2) TCN(Topology Change Notification) BPDU

 

이제 BPDU에 대해 알아보았으니, BPDU의 정보를 기반으로 STP가 트리를 구성하는 과정을 살펴보자.

2-1.1. Root Bridge 선출
스위치의 초기화가 완료되면, 스위치는 자신이 Root Bridge라고 생각한다. 때문에 모든 포트를 Designated Port로 간주, Configuration BPDU를 내보낸다.
스위치들은 Configuration BPDU 내의 Root Identifier와 자신이 알고 있는 Root Identifier를 비교, 더 값이 높은 쪽을 루트 브리지로 선정한다.

2-1.2. Root Port 선출
루트 브리지의 선출이 완료된 뒤, 각 브리지들은 루트 브리지의 BPDU를 수신한 포트들 중에서 Root Path Cost가 가장 작은 포트를 Root Port로 지정한다.
만약 코스트가 같은 포트가 둘 이상이면 Designated Bridge ID가 작은 포트를, 그것도 같으면 Designated Port ID를, 마지막으로 자신의 Port ID를 비교해서 낮은 쪽을 Root Port로 지정한다.

2.1.3. Designated Bridge 선출
LAN Segment에서 Root Path Cost값이 가장 작은 브릿지가 Designated Bridge가 된다. 이 때 같은 LAN Segment에 존재하는 브리지들을 파악하기 위하여 BPDU의 Bridge ID와 Port ID를 사용한다.
스위치 환경에서는 스위치 하나에 연결된 장비들이 하나의 LAN Segment가 되므로, 하나의 LAN Segment에 여러 스위치들이 존재할 수 없다. 때문에 Root에 더 가까운 스위치가 Designated Bridge가 될 것이다.

2.1.4. Designated Port 선정
LAN Segment에서 Designated Bridge와 연결된 포트가 Designated Port가 된다.

2.1.5. Forwarding State로 천이
Designated Port와 Root Port가 Forwarding 상태로 천이되며, 프레임과 BPDU를 전송한다.

2.1.6. STP Port Status

앞서 STP가 루프를 방지하기 위해서 일부 포트를 활성화하고, 일부 포트는 차단(Blocking)한다고 설명하였다. STP의 포트 상태에 대해 좀 더 자세히 알아보자.

(1) Disabled : 관리자에 의하여 사용이 중단되었거나, 물리적으로 링크가 Down된 상태
(2) Blocking : STP 연산 결과 Designated, Root 포트가 아니어서 프레임 전달 기능이 비활성화된 상태
(3) Forwarding : 프레임 전달 및 MAC Address Learning을 수행하는 상태.
(4) Listening : Blocking에서 Forwarding으로 천이하는 과정에서 생길 수 있는 루프를 방지하기 위해, 프레임 전달 및 MAC Learning을 수행하지 않고 대기하는 상태. Forwarding Delay 값의 영향을 받는다.
(5) Learning : Listening에서 천이되는 상태로, 프레임 전달은 수행하지 않고 MAC Address Learning만 수행하는 단계. 마찬가지로 Forwarding Delay 값의 영향을 받음.

여기서 주의해야 할 부분은 Blocking된 포트라 하더라도 BPDU 송신을 하지 않을 뿐, BPDU 수신은 이루어진다는 것이다.
그리고 Listening – Learning – Forwarding으로 천이되는 동안 Forwarding Delay동안 대기(기본값 20초)하여, 토폴로지 변동 시 절체 시간이 약 50초에 이른다는 것을 확인할 수 있다.

이상으로 STP의 상세 동작을 알아보았다.
추후 STP에서 문제가 되는 부분인 긴 절체시간을 해결하기 위하여 802.1w RSTP(Rapid Spanning Tree Protocol)가 제안된다.

2-2 RSTP 상세 동작

2-3. MSTP 상세 동작

2-4. 결론

 

3. SPB 상세 동작

Network Study – 1주차 : 네트워크 스위치와 Ethernet

 

1. 네트워크 스위치란?

ARPANET과 패킷 교환망이 성공을 거두고, 통신망을 구성하는 방법에 대한 논의가 이루어졌다. 이 때 제안된 것들이, 망(Mesh)형, 트리(Tree)형, 링(Ring)형, 성(Star)형, 버스(Bus)형이며, 각기 다른 장/단점을 가지고 있었다.

가장 이상적인 방법은 Mesh였으나, 노드의 증가에 따라 구축 비용이 기하급수적으로 증가한다는 문제가 있었고, Tree와 Star형은 중계 노드가 다운되면 전체 네트워크가 다운된다는 문제를 가지고 있었다.

결국 비용 대비 효율 측면에서 살아남은 것은 링형과 버스형이었으며 -SPOF 회피가 적용된- , 둘 다 하나의 회선을 다수의 노드들이 공유한다는 특징을 가진다.

 

이제 통신망의 형태가 결정되었으니 통신 방법을 결정할 차례이다. 링형 통신망을 통해 통신하기 위한 프로토콜로 제안된 것으로는 IBM의 토큰 링, FDDI가 대표적이며, 버스 구조를 통해 통신하는 프로토콜로는 ATM, Frame Relay, Ethernet 등이 있다.

그런데, 이제 컴퓨터를 서로 연결할 수단이 필요했고, 가장 먼저 등장한 것이 허브(Hub)이다. 허브는 들어온 패킷을 인입 포트를 제외한 모든 포트로 내보내는 특징을 가진다(목적지를 확인하지 않는다). 토큰 링의 경우에는 Collision(충돌)이 발생하지 않기에 허브를 많이 사용하였지만(허브도 노드 중 하나로 간주되기 때문), Ethernet의 경우, CSMA/CD알고리즘을 사용하였기에 허브의 사용과, 허브에 연결된 노드가 증가하는 것은 회선 성능에 심각한 악영향을 끼쳤다. 이 때문에 토큰 링 프로토콜은 이더넷과의 초기 경쟁에서 우위를 점하게 된다.

이 다음으로 등장한 것이 네트워크와 네트워크를 연결하기 위한 브리지(Bridge)이다. 브리지는 허브와 비슷하나, 하나의 인입 포트와 하나의 인출 포트를 가지며, 패킷을 검사하여 목적지가 다른 패킷은 폐기한다는 결정적인 차이를 가진다. 이 때부터 패킷의 Destination Address를 검사하는 기술이 등장하였다.

이제 Switch가 등장한다. Switch는 Hub와 Bridge와는 달리, 출발지와 목적지 주소를 모두 학습, 전달한다. 이는 이더넷과 토큰 링에 모두 적용되었으나, 이더넷의 경우 CSMA/CD의 Collision Domain이 포트 한 쌍으로 줄어듦으로써(Full-Duplex의 경우 Collision이 발생하지 않는다) Ethernet 표준의 고질적인 문제였던 허브의 사용에 따른 충돌의 기하급수적인 증가를 막을 수 있었고, 노드 간의 동시다발적인 전송이 가능하게 되면서 토큰의 소유자만 전송을 할 수 있는 토큰 링 네트워크를 압도하는 성능을 보일 수 있었다.

그리하여 토큰 링이 이더넷에 패배하고, 시장에는 오직 Ethernet Switch만이 남게 되었다.

그런데, 이더넷 스위치는 어떻게 패킷 스위칭을 수행하는 것일까?

이더넷 스위치가 패킷을 전송할 때는 다음과 같은 과정을 거친다.

1. Source MAC Learning

2. Packet Forwarding

먼저 Source MAC Learning을 알아보자. 이를 위해서는 MAC Address에 대한 이해가 필요하다. MAC(Media Access Control)은 Ethernet에서 사용하는 주소 프로토콜이다. 각 인터페이스는 MAC Address라 불리는 고유한 번호를 가지고 있으며, 이는 48Bit로 구성되어 있다. 흔히 16진수로 나타내어 FF-FF-FF-FF-FF-FF로 표현한다. 이 중 앞의 3자리는 OUI(Organization Unique Identifier)이며, 나머지 3자리를 이용해 고유한 주소를 할당한다. 때문에 MAC Address가 겹칠 수도 있으나, Layer2 통신의 범위가 좁은 탓에 MAC Address Collision은 잘 발생하지 않는다. 만약 MAC Address Collision이 발견된다면, MAC Address Spoofing이 일어났다고 생각하는 편이 옳다.

 

Source MAC Learning은 스위치가 MAC Header를 읽고, 인입된 포트에 그 MAC을 가지고 있는 호스트(편의상 Host A라 칭한다)가 연결되어 있음을 자신의 MAC Table에 기록한다.

그리고 이제 그 패킷을 목적지 호스트에 전달한다(스위치는 포트가 연결된 시점에서 MAC Learning을 수행하기에 목적지 호스트의 MAC을 이미 알고 있다) 목적지 호스트는 자신이 받은 패킷의 MAC Address를 기준으로 Destination MAC Address를 재설정하여 다시 전송한다. Switch의 경우, 만약 자신의 MAC Address Table에 목적지 MAC Address가 없다면, 그냥 그 패킷을 폐기한다. Ethernet 표준에는 패킷 폐기시 재전송 방법이 정의되어 있지 않기에, 송신자는 패킷 도달에 실패한 사실을 알 수가 없다. 일반적인 경우 이는 TCP와 같은 전송 계층 프로토콜이 수행해야 할 일이다.

또한, 앞의 예시에는 아주 치명적인 문제가 있다. 바로 호스트끼리 서로의 주소를 알고 있지 않으면 통신이 불가능하다는 것이다. 현재 Layer2만의 통신을 위한 주소 탐색 프로토콜은 표준화되어 있지 않으며, 관리 프로토콜인 LLDP를 응용한 주소 탐색은 가능할 것이다.

 

 

2. 스위치의 구조

앞에서 Ethernet Switching에 대해 이야기하며, 정작 Switch 자체를 다루지는 않았다. 이것은 하드웨어적인 부분을 먼저 언급하는 것 보다, 스위치가 하는 일을 먼저 이해함으로써 자연스럽게 하드웨어의 구조를 익히는 편이 더 좋다고 생각했기 때문이다.

일반적인 L2 스위치의 구조는 다음과 같다.

용어는 Cisco를 기준으로 작성하였으며, 사실 라우터의 Data Plane과 거의 동일한 구조를 가지고 있다. 이 경우 Control Plane과 통신하기 위한 버스가 빠져 있다.

먼저 학습한 MAC Address를 저장하는 Table이 있고, 포트들과, 들어오고 나가는 패킷을 저장하는 버퍼가 있다. 만약 라인 카드가 여러 개라면 이 카드들은 Switch Fabric으로 서로 연결된다.

Switch Fabric이라 하니, 현대 기가비트 스위치의 Switch Fabric에 대하여 알아볼 것들이 있으나, 이는 추후에 다시 살펴볼 기회가 있을 것이다.

 

2-1. 패킷 포워딩 방법

Forwarding Engine에서 패킷을 처리하여 내보내는 방법을 다뤄보자.

Forwarding Engine은 패킷 포워딩을 수행할 때, FIB(Forwarding Information Base)를 참조하여 패킷의 목적지를 결정하고, 전송한다. 이 때 가장 중요한 것은 wire-speed로 패킷을 전송하는 것인데, 이를 위해 목적지 매칭에는 TCAM을 사용하고, 포워딩 방식으로는 Cut-through를 이용한다.

Fig 1. Cut-Through Forwarding

Cut-Through Forwarding이란, 프레임이 들어올 때 Destination Address까지 수신한 뒤, 인출 포트를 바로 판단하여 프레임을 내보내는 포워딩 방식을 말한다.
때문에 가장 빠른 처리 속도를 보이지만, 전체 프레임을 가지고 프레임의 무결성을 검증하지 않기 때문에, 망가진 프레임이 목적지에 도달할 때 까지 네트워크를 타고 전송된다는 약점을 가진다.
물론,  현재의 스위치들은 이론과는 달리 더 많은 정보를 가지고 포워딩 결정을 수행한다. 따라서 Cut-Through를 이용함에도 불구하고 포워딩 엔진 수준에서의 ACL, QoS를 제공할 수 있다.
그리고 Congestion 등으로 Flow Control이 발생하였을 경우, Cut-Through 스위치는 자신이 수신중이던 프레임을 전부 수신하고 전송이 재개될 때 까지 Ingress Buffer에 보관한다.

반면, 이런 상황에서 프레임 전송의 흐름이 완전히 멈추는 처리 방식을 Wormhole  Forwarding이라 한다.

 

3. Ethernet 표준

Ethernet Switching의 이야기에 Ethernet이 빠질 수는 없다고 생각한다. 그렇기에 간략하게나마 Ethernet 표준을 다뤄보겠다.

Ethernet은 ALOHAnet의 패킷 교환망에 영감을 받아 Xerox에서 개발한 프로토콜이다. Ethernet의 개발자들은 Ethernet의 확산을 촉진하기 위하여 DEC와 Intel, Xerox와 같이 Ethernet의 표준화를 추진한다.이 때문에 1980년에 출판된 Ethernet 명세는 DIX라고 불리게 된다.
얼마 뒤인 1982년, 이들은 Ethernet v2.0을 발표하고, DIX 2.0 그리고 Ethernet II라는 이름으로 불린다. DIX 2.0은 빠르게 시장에 자리잡았고, 사실상의 표준(de-facto)이 된다.
한편, IEEE에서는 DIX를 기반으로 한 표준 IEEE 802.3을 발표하는데, Ether-Type 필드가 Data Length 필드로 변경되고, 이 때 802.3의 최대 프레임 길이가 1500바이트였기 때문에 DIX 2.0의 Ether-Type 필드 값은 1536(0x0600)이상이어야 한다. 만약 0x0600미만이면 802.3 프레임, 0x0600이상이면 DIX 2.0프레임이다.

All Rights Reserved ktworld.co.kr

한편, IEEE에서는 Data-Link Layer를 세분화하여 LLC(Logical Link Control), MAC(Media Access Control)로 정의하는데, LLC는 상부(L3) 프로토콜과의 연동을, MAC은 물리 매체의 접근 방법을 정의한다.
그러므로, IEEE 802.3은 LLC를 통해 상위 프로토콜을 정의하고, MAC으로는 CSMA/CD를 사용하는 프로토콜이라고 말할 수 있다.

지금은 이 두 종류의 프로토콜이 혼용되고 있기에, Ethernet을 사용하는 모든 시스템들은 이 프레임들을 둘 다 처리할 수 있어야 한다.

 

번외1. CSMA/CD 알고리즘

Ethernet에 대해 공부하다 보면, CSMA/CD 알고리즘이라는 말을 자주 만나게 된다. 이 알고리즘이 어떤 것이며, 대체 Ethernet과는 무슨 관계인지 알아보자.

Xerox에서 Robert Metcalfe가 근거리 통신 기술을 개발하고 있을 때, 그에게는 한 가지 아이디어가 떠올랐고 이것을 메모로 남겼다.

하나의 회선에 스테이션들이 연결되고, 이 연결 방법을 ‘The Ether(에테르)’라고 칭했다. 이 시스템에서 사용되는 채널링 알고리즘이 바로 CSMA/CD로, Carrier Sense Multiple Access with Collision Detect의 약자이다.
이것을 한국어로 번역하자면  ‘충돌 감지를 통한 반송파 탐지 다중 접속’ 정도가 되겠다.
CSMA/CD는 DIX 2.0과 802.3a의 핵심 알고리즘으로써, 스위치가 개발되어 Full-Duplex 전송과 Collision Domain이 제한되기 전까지 Ehternet 시스템의 핵심을 차지하였던 알고리즘이다.

CSMA/CD의 핵심은 한 스테이션이 데이터를 전송하기 전에 회선의 사용 여부를 확인하고(Carrier Sense), 전송한 신호가 회선의 종단까지 도달할 시간 동안 다른 신호의 반송파를 탐지함으로써 충돌 감지(Collision Detect)를 구현하고, 이를 통해 다중 접속(Multiple Access)을 실현시킨다는 것이다.

구체적으로 말하자면,

1. 단말은 데이터를 전송하기 전에 먼저 회선이 사용중인지 확인한다.
2. 회선이 휴지(Idle)상태이면 데이터 전송을 시작한다.
2-1. 데이터를 전송하는 동안 다른 데이터의 수신이 탐지되면 Jam Signal 전송 후 Back-off Time 동안 대기한다.
2-2. 802.3에서 최대 전송로 길이가 2500m이기 때문에, 최대 왕복지연시간은 51.2μs. 때문에 802.3a의 최소 프레임 길이는 512bit = 64Byte이며, 프레임 전송 도중 충돌이 감지되지 않으면 전송이 성공한 것으로 간주한다.
3. IFG(Inter-Frame Gap)동안 대기한 뒤, 1번으로 돌아간다.

앞서 언급되었던 Collision Domain이란, 이 ‘충돌’이 일어날 수 있는 범위를 말한다.

CSMA/CD는 1Gbps 표준인 1000Base-TX까지 Half-Duplex 전송으로 살아남아 있다가, 10Gbps 표준에 이르러서야 역사의 뒤안길로 사라지게 된다.

 

번외2. NDIS Driver

NDIS(Network Driver Interface Specification)는 3Com과 Microsoft가 공동으로 개발한 Windows 네트워크 드라이버 개발을 위한 명세이다. NDIS는 Protocol Driver – Filter Driver – Intermediate Driver(선택) – Miniport Driver 순으로 구성되어 있으며, 프로토콜 개발자에게는 NIC의 물리적인 구현에 대한 고려를, NIC/드라이버 개발자에게는 상위 계층과의 연동에 대한 고려를 하지 않아도 되게 해 준다.
Windows의 네트워크 스택에서 LLC는 전송 계층에, MAC은 NIC에 통합되어 있다.
NIC는 Miniport Driver에 의해 제어되며, 만약 Ethernet 헤더를 확인하고 싶다면 Miniport Driver를 개발하거나, NDIS Intermediate Driver를 개발해야 할 것이다.

NDIS 아키텍쳐의 기본적인 구성은 다음과 같다.

NDIS Intermediate Driver는 상위 계층에게는 Miniport Adapter처럼, 하위 계층에게는 Protocol Binding처럼 보이게 된다.

 

CCNA Study – ARP Protocol

 


 

목차

1. Introduction

2. ARP 동작 예시

3. ARP의 변형

3-1. Reverse ARP (RARP)

3-2. Inverse ARP (InARP)

3-3. DHCP ARP

3-4. Gratuitous ARP (gARP)

3-5. ARP Probe

3-5.1. ARP Probe의 동작

3-6. UnARP


 

1. Introduction

Ethernet에서 물리 계층 주소(MAC)을 얻어낼 때 사용하는 프로토콜인 ARP에 대해 RFC를 참조하여 알아본다.

ARP는 1982년, RFC 826에 처음으로 정의되었다. 여기서 ARP의 목적은 ‘프로토콜 주소를 로컬 네트워크 주소로 변환하는 방법을 제공하는 것’이라고 밝히고 있다. 즉, 기본적으로 Ethernet을 위해 개발된 프로토콜이긴 하지만, 경우에 따라서 다른 프로토콜 위에서 동작할 수 있으며, 실제로 X.25, HDLC, FDDI, 802.11, ATM 등에서도 ARP를 사용하고 있다. ARP는  STD 37이라는 이름의 인터넷 프로토콜로 승인되었고, RFC 1122에서의 ‘잘못된 ARP Entry에 대한 처리’에 대한 모호함을 보완하였다. (The ARP specification [LINK:2] suggests but does not require a timeout mechanism to invalidate cache entries when hosts change their Ethernet addresses.)[1]

그러면 다시 RFC 826으로 돌아가 ARP가 어떻게 동작하는지 알아보자.
RFC 826에서는 ARP 헤더를 다음과 같이 정의하고 있다.

1. Hardware Address (16bit) – 로컬 네트워크에서 사용하는 하드웨어 타입을 규정한다.

2. Protocol Address (16bit) – 하드웨어 타입 필드를 보완하며, 3계층 프로토콜의 종류를 규정한다. Ethernet의 경우 Ether-type 필드의 값과 동일하다.

3. Hardware Address Length (8bit) – 뒤에 올 하드웨어 주소의 길이를 바이트 단위로 지정한다. 예를 들어 Ethernet은 48bit이므로 6의 값을 갖는다.

4. Protocol Address Length (8bit) – 이 메시지에 포함된 3계층 프로토콜의 주소 길이를 바이트 단위로 지정한다. 예를 들어 IPv4는 4의 값을 갖는다.

5. Opcode (16bit) – 이 ARP 패킷의 목적을 밝힌다. Opcode의 값은 좀 더 뒤에서 다루겠다.

6. Sender Hardware Address (n Byte) – 앞서 말한 길이의 송신자 하드웨어 주소가 온다.

7. Sender Protocol Address – (m Byte) – 앞서 말한 길이의 송신자 프로토콜 주소가 온다.

8. Target Hardware Address – (n Byte) – 앞서 말한 길이의 수신자 하드웨어 주소가 온다. 당연히 ‘알고 있을 경우’에 한하여 기록된다.

9. Target Protocol Address (m Byte) – 앞서 말한 길이의 수신자 프로토콜 주소가 온다.

이것을 그림으로 나타내면 다음과 같다.

All Rights Reserved ktworld.co.kr
All Rights Reserved ktworld.co.kr

 

2. ARP 동작 예시

Host A가 Host B에게 ARP Request를 보내는 시나리오를 이용하여 일반적인 ARP의 동작을 알아본다.

1. Host A는 이더넷 프레임에 사용할 목적지 MAC 주소를 결정하기 위해 자신의 ARP 캐시 테이블을 확인한다.

2. 캐시 테이블에 MAC 주소가 없다면 Host B의 MAC을 얻기 위해 ARP Request를 Dst-MAC-Addr을 FF:FF:FF:FF:FF:FF로 설정하여 브로드캐스팅한다.

3-1. 동일한 네트워크 세그먼트 상의 시스템들은 모두 이 ARP 패킷을 수신하고, 자신의 Protocol Address와 패킷의 TPA를 비교, 같지 않으면 폐기한다.

3-2. 만약 패킷의 TPA와 자신의 Protocol Address가 일치한다면, 자신의 Protocol Address를 기록한 ARP Reply 패킷을 Request를 보낸 시스템에 유니캐스트로 전송한다.

4. ARP Reply를 수신한 Host A는 자신의 ARP 캐시 테이블에 그 정보를 기록한다.

5. ARP Request에는 응답 만료 시간(Timeout)이 존재하지 않기 때문에, 응답을 수신하지 못하더라도 상관없다. 물론 이 경우에는 호스트와의 통신이 이루어지지 않는다.

 

 

3. ARP의 변형

Ethernet이 확산되고, 증가하는 여러 요구들에 대응하기 위해 ARP의 변형들이 사용되게 되었다.

대표적으로 Reverse ARP, Inverse ARP, Gratuitous ARP 등이 존재하는데, 이것들을 다루기 전에 먼저 ARP Packet의 Operation Code를 살펴볼 필요가 있다.

 

from IANA Reference
from IANA Reference [2]

여기서 Opcode 1, 2번은 일반적인 ARP 요청과, 변형 ARP 중 gARP, DHCP ARP, ARP Probe 등에 사용되는 Request/Reply이고, 이 글에서는 이에 더하여 Reverse ARP(3,4번) Inverse ARP(8, 9번)을 다루겠다.

 

 

3-1. Reverse ARP (RARP)

IPv4를 사용하는 장비가 자신의 하드웨어 주소는 알고 있지만, 자신에게 할당된 IPv4 주소는 모를 때 사용한다.

과거에 저장 매체가 없는 단말들(터미널)이 라우팅이 필요하지 않은 LAN 통신을 위해 주로 사용했지만, 디폴트 게이트웨이, DNS 서버 주소, 서브넷 마스크 등을 알 수 없기 때문에 지금은 DHCP와 BOOTP로 대체되었다.

 

Reverse ARP의 동작 과정은 다음과 같다.

1. 부팅된 터미널 장비가 Sender MAC-Addr와 Target MAC-Addr을 자신의 하드웨어 주소로 채운 RARP Request 패킷을 브로드캐스팅한다. 이 때 Sender IP-Addr과 Target IP-Addr은 전부 0.0.0.0이다.

2. RARP 서버가 이것을 수신하고, Target Protocol Address를 터미널 장비에 할당된 IP로 넣은 RARP Reply 패킷을 L2 Unicast 한다.

3. 터미널이 RARP Reply를 수신하고, 자신의 IP를 설정한다. Calssful Network를 기반으로 한 LAN 통신만이 가능하다.

RARP에 대한 자세한 설명은 RFC 903[3]에 기술되어 있다.

 

 

3-2. Inverse ARP (InARP)

Inverse ARP는 Frame-Relay와 ATM과 같이 여러 물리 계층 장비가 연결되어 WAN 네트워크를 구성하고 있지만, 하나의 논리적인 회선을 구성하여 통신을 하는 네트워크에서 쓰인다.

Frame Relay 망에서 Inverse ARP는 네트워크 장비가 자신과 연결된 VC 단말의 정보를 얻는 데 사용되며, 이를 위해서는 당연히 L2 설정이 제대로 되어 있어야 한다.

L2 통신에 필요한 DLCI를 동적으로 할당하고, 링크의 상태를 확인하는 프로토콜로 LMI가 있는데, 이것은 추후 Frame Relay를 살펴볼 때 알아볼 것이다.

 

그럼 간단한 Frame Relay 망을 예시로 InARP가 어떻게 동작하는지 알아보자.

 

InARP

 

1. Router A는 자신에게 할당된 DLCI 10, 20이 어디에 연결되어 있는지를 알고 싶어한다.

2. Router A는 SHA를 DLCI 10, SPA를 ipA로 하여 InARP Request를 전송한다.

3. Router A의 InARP Request를 수신한 Router B는 자신의 InARP 캐시에 Router A의 DLCI와 IP를 기록하고, SHA에 DLCI 40, SPA에 ipB를 기록한 InARP Reply를 전송한다.

4. Router B의 InARP Reply를 수신한 Router A는  자신의 InARP 캐시에 RouterB의 DLCI와 IP를 기록한다.

5. 이제 L3 통신을 위한 모든 정보가 갖추어졌으므로 통신이 이루어질 수 있다.

 

Inverse ARP의 구현에 대한 자세한 정보는 RFC 2390[4]을 참조하자.

 

3-3. DHCP ARP

DHCP를 이용한 IPv4 자동 할당은 편리하지만, 자칫 IPv4 주소의 충돌이라는 문제를 발생시킬 우려가 있다.

이 문제를 미연에 방지하기 위해 DHCP ARP가 RFC 2131[5]을 통해 정의되었다.

 

DHCP ARP는 다음과 같이 구성된다.

 

Dst-MAC: FF-FF-FF-FF-FF-FF

Src-MAC: Client-MAC

Opcode: 1 (Request)

Src-Har-Addr: Client-MAC

Src-Pro-Addr: 0.0.0.0

Target-Har-Addr: 00-00-00-00-00-00

Target-Pro-Addr: Assigned-IP-Addr

 

여기서 출발지 프로토콜 주소가 0.0.0.0인 것은 이 ARP Request를 수신한 장비들이 자신의 ARP Cache Entry를 갱신하지 않도록 하기 위해서이며 (When broadcasting an ARP request for the suggested address, the client must fill in its own hardware address as the sender’s hardware address, and 0 as the sender’s IP address, to avoid confusing ARP caches in other hosts on the same subnet.[6]) 이 요청에 대한 ARP Reply를 수신하지 못한다면 클라이언트는 할당받은 IP 주소를 사용할 것이다.

RFC 2131은 또한 ‘IP 주소의 갱신을 다른 시스템에게 보고하기 위해 ARP Reply를 브로드캐스팅하여 다른 시스템이 오래된 ARP Entry를 갱신하도록 해야 한다’ ( The client SHOULD broadcast an ARP reply to announce the client’s new IP address and clear any outdated ARP cache entries in hosts on the client’s subnet.[7])고 규정하고 있으나, 대부분의 시스템에서는 Gratuitous ARP라 불리는 ARP Request를 이용해 이 기능을 구현하고 있다.

 

3-4. Gratuitous ARP (gARP)

Gratuitous ARP (이하 gARP)는 자신의 IP나 MAC이 변동되어, 같은 서브넷 내의 다른 장비들의 ARP Cache Entry를 갱신할 필요가 있을 때 사용된다.

예를 들어 DHCP로부터 새로운 IP를 할당받았거나, VRRP에서 Active Router를 변경할 때, 클라이언트에서 2개의 NIC를 이용하여 고가용성(HA) 구성을 하였을 경우 등이 있다.

 

gARP 패킷은 다음과 같이 구성된다.

 

Dst-MAC: FF-FF-FF-FF-FF-FF

Src-MAC: Client-MAC

Opcode: 1 (Request)

Src-Har-Addr: Client-MAC

Src-Pro-Addr: Client-IP-Addr

Target-Har-Addr: 00-00-00-00-00-00

Target-Pro-Addr: Client-IP-Addr

 

DHCP ARP 와는 다르게 출발지 프로토콜 주소 필드가 자신의 IP 주소로 설정되었다는 것을 알 수 있다.

gARP는 앞서 말했듯이 오래된 ARP 캐시 엔트리의 갱신이 목적이기 때문에 ARP Reply가 돌아오는 것을 기대하지 않지만, 만약 Reply가 돌아온다면 IP 주소가 충돌한다는 것을 의미하게 되므로 적절한 대처가 요구된다.

 

3-5. ARP Probe

ARP Probe는 IPv4 주소의 충돌을 감지하기 위한 수단으로써, RFC 5227[8]에 정의되어 있다.

ARP Probe는 기본적으로 DHCP ARP와 동일한 구성을 가지는데, 이것은 ARP Probe가 DHCP ARP를 참조했기 때문이다. (The DHCP specification [RFC2131] briefly mentions the role of ARP in detecting misconfiguration, as illustrated in the following three excerpts from RFC 2131: [9])

RFC 5227에서는 DHCP ARP를 확장하여, ‘IPv4를 할당받는 모든 경우에 ARP Request를 전송하도록'(Before beginning to use an IPv4 address (whether received from manual configuration, DHCP, or some other means)[10]) 규정하고 있으며

RFC 2131의 모호함을 (the DHCP specification does not give any guidance to implementers[11]) 해결하였다.

 

3-5.1. ARP Probe의 동작

ARP Probe는 크게 Probing – Announcing – Conflict Detection and Address Defense의 순으로 이루어진다.

먼저, Probing은 DHCP ARP의 패킷 구성을 따르되, IP 할당 이후 0~1초 사이의 랜덤한 시간을 대기한 뒤 3개의 Probing Packet을 전송한다. 이 Probing Packet의 사이에는 1~2초 사이의 임의의 시간 간격을 준다.

마지막 Proving Packet을 전송하고 2초가 지난 뒤에도 ‘Sender IP Address’가 할당받은 IP인 ARP Packet(Request/Reply)이 도착하지 않으면, 클라이언트는 이 IP를 사용해도 된다고 판단, ARP Announcement 패킷-gARP와 동일-을 전송하고, 마지막 단계인 Conflict Detection and Address Defense로 천이한다.

 

Conflict Detection and Address Defense 단계에서 호스트는 Sender IP Address가 자신이 할당받은 IP이면서 Sender Hardware Address가 자신이 아닌 ARP 패킷이 들어오는지를 계속 확인한다.

만약 그러한 패킷이 발견되면, 호스트는 다음 3가지 중 하나의 동작을 취한다.

 

A. 즉시 그 IP 주소의 사용을 포기한 뒤, 설정 Agent(e.g. DHCP Server)에게 오류를 보고한다.

B. 현재 열려있는 TCP 세션이 있어서 IP를 포기할 수 없고, 10초가 지나도 다른 문제가 되는 ARP 패킷이 들어오지 않는다면 그 IP를 계속 사용하도록 결정할 수 있다. 그리고 ARP Announcement 패킷을 한번 더 전송한다. 만약 추가로 문제가 되는 ARP 패킷이 들어오면 호스트는 즉시 그 IP를 폐기하고, 오류를 Agnet에게 보고한다.

C. 만약 이 클라이언트가 네트워크에서 매우 중요한 시스템(e.g. Default Gateway)이어서 IP를 무슨 일이 있어도 포기할 수 없다면, 이 IP를 계속 사용하도록 결정할 수 있다. 이 경우 클라이언트는 Sender-MAC-Addr와 같은 정보를 로그에 기록하고, 네트워크 관리자에게 문제를 알려야 한다. 10초가 지나도 문제가 되는 ARP 패킷이 추가로 유입되지 않으면, 호스트는 ARP Announcement를 1회 전송하고 이 IP를 계속 사용할 수 있다. 만약 10초 이내에 다시 문제가 되는 ARP 패킷이 유입되면, 호스트는 IP  Defense loop를 방지하기 위해 ARP Announcement를 전송해서는 안 된다.

 

 

3-6. UnARP

UnARP는 Proxy ARP 환경에서의 ARP Cache Invaild 문제를 해결하기 위해 RFC 1868[12]을 통해 제시되었고, 현재 실험 프로토콜(Experimental Protocol)로 지정되어 있다.

RFC 1868은 현재 사용되는 timeout을 통한 ARP Entry 제거 방식 대신 클라이언트가 네트워크로부터 접속을 종료할 때, 그것을 명시적으로 ARP를 통해 알리는 것을 골지로 하며, 실험 프로토콜의 특성상 이것을 준수하는 장비는 잘 없다.

 


각주

[1] https://tools.ietf.org/html/rfc1122#page-22

[2] http://www.iana.org/assignments/arp-parameters/arp-parameters.xhtml#arp-parameters-1

[3] https://tools.ietf.org/rfc/rfc903.txt

[4] https://tools.ietf.org/html/rfc2390

[5] https://tools.ietf.org/html/rfc2131

[6] RFC 2131 – Section 4.4.1 : https://tools.ietf.org/html/rfc2131#section-4.4

[7] RFC 2131 – Section 4.4.1 : https://tools.ietf.org/html/rfc2131#section-4.4

[8] https://tools.ietf.org/html/rfc5227

[9] RFC 5227 – Section 1 (Introduction) : https://tools.ietf.org/html/rfc5227#section-1

[10] RFC 5227 – Section 2.1 : https://tools.ietf.org/html/rfc5227#section-2.1

[11] RFC 5227 – Section 1 : https://tools.ietf.org/html/rfc5227#section-1

[12] https://tools.ietf.org/html/rfc1868

 

라우터/스위치의 구조

인터넷이라는 거대한 통신망을 구성하고 있는 여러 프로토콜의 동작을 이해하려면 가장 먼저 실제로 데이터를 전송하는 장비들인 라우터와 스위치에 대한 이해가 필요하다.

이 글은 내가 네트워크 공부를 하면서 느꼈던 가장 큰 어려움인 ‘왜?’라는 질문에 대한 답이며, 그 때의 나와 같은 어려움을 겪고 있을 누군가를 위해 쓰여졌다.

라우터의 구성요소에 대해 체계적이고 자세한 정보를 올려주신 ‘넷매니아즈 (http://netmanias.com)’ 에 무한한 감사를 보낸다.


목차

  1. Introduction
  2. 라우터의 하드웨어 구성 요소
  3. 통신 시나리오

 

 

1. Introduction

우리는 네트워크로 전송된 패킷이 스위치와 라우터 사이를 계속 건너가면서 상대방 컴퓨터에 도달한다고 배웠다. 그리고 그 과정에서 ARP/MAC/IP 등등의 프로토콜을 통해 목적지를 식별할 수 있다고 배웠다.
그러나, 난 이것을 듣고 가장 먼저 의문이 들었다.

“클라이언트는 서버의 MAC을 어떻게 알 수 있을까?”, “IP 주소만으로 어떻게 목적지를 찾을 수 있을까?”

아직 캡술화(Encapsulation)와 라우팅 프로토콜에 대한 개념이 제대로 잡혀있지 않았기 때문에 생긴 의문이지만, 이것을 제대로 이해하는 것에는 상당한 시간과 노력이 필요했다.
그리고 실제로 이 기능을 구현한 장비의 작동 로직을 파악함으로써 완전한 이해에 도달할 수 있었다.

이 글은 아무것도 모르는 사람을 위해 작성된 것은 아니다. 이 글을 이해하려면 최소한 Lan Switching에 대한 지식은 갖추고 있어야 할 것이다.

그렇지만, 만약 당신이 지식은 갖고 있지만 스위칭과 라우팅의 명확한 개념을 잡지 못 하고 있다면, 이 글이 많은 도움이 될 것이라고 나는 확신한다.

 

2. 라우터의 하드웨어 구성 요소

Supervisor Engine
라우터의 핵심 기능을 가지고 있는 모듈로, Layer3 이상의 제어를 담당하며, Control Plane으로 불리기도 한다.
보통 범용 CPU 위에 여러 가지 기능을 수행하는 OS(IOS/JUNOS)가 올라가며, RIB/LSDB/ARP Table/MAC Table 등의 정보와, 라우팅, Management 등의 기능을 수행하는 프로세스들이 동작하는 모듈이다.

Line Card
패킷 송수신, QoS 등의 기능을 수행하는 모듈로, 실제 믈리 계층과의 연동을 맡는다. 이를 위해 FIB(Forwarding Information Base), MAC Table 등이 존재하며, 패킷을 실제로 처리하는 Packet Processor와 입/출력 패킷을 임시로 저장하는 Ingress Packet Buffer와 Egress Packet Buffer가 존재한다.
Data Plane으로 불리기도 한다.

Switch Fabric Module
Line Card간에 패킷을 전달하기 위한 가교 역할을 한다. Module 형태로 구현된 장비들의 경우, Line Card의 개수가 여러 개일 수 있는데, (Ex. Fa 0/1, Fa 1/1) 이들 사이의 데이터 전송에 이용된다.

3. 통신 시나리오

Host A가 Router B를 통해 Host C로 IP 패킷을 전송하는 사나리오를 이용해 라우터가 어떻게 동작하는지 알아보자.

Router_Structure

1. Host A가 Host C로 데이터를 보내려고 하지만 상대방의 MAC Address를 모르므로 먼저 ARP Request를 보낸다.

2-1. Router B의 Line Card #0에 Host A가 보낸 ARP Request가 도착한다.

2-2. Line Card #0의 Packet Processor는 ARP Request의 L2 헤더를 검사, 자신의 MAC Address Table에 Host A의 MAC이 존재하지 않는 것을 확인하고, Source MAC Learning Event를 발생시킨다. 이는 Control Plane으로 전달되어 CP의 MAC Address Table에 Host A의 MAC이 기록되고, Line Card #0의 MAC Address Table에도 같은 정보가 기록된다.

2-3. 해당 패킷이 ARP임을 Ether-Type Field(0x0806)을 통해 확인한 Packet Processor는 이 패킷을 Supervisor Engine으로 올려보낸다.

2-4. Line Card #0에서 보내온 ARP Request를 받은 Supervisor Engine은 자신의 ARP Entry를 확인한 뒤, ARP Table에 Host A의 MAC/IP Address와 인터페이스(Fa 0/1)를 기록한다.

2-5. 해당 요청이 ARP Request임을 확인한(ARP Operation Field) Supervisor Engine은 Line Card들에게 이 패킷이 들어온 인터페이스를 제외한 모든 인터페이스로 이 패킷을 Flooding 할 것을 지시한다.

2-6. Fa 0/0을 제외한 다른 모든 인터페이스로 ARP Request가 전송되고, Fa 1/0에 연결되어 있는 Host B가 이 패킷을 수신, ARP Reply를 내보낸다.

2-7. Line Card #1은 Host B의 ARP Reply를 수신, 자신의 MAC Address Table에 Host B의 MAC이 존재하지 않는 것을 확인하고 MAC Address Learning Event를 발생시킨다.

2-8. –MAC Learning, ARP 식별 설명 생략- Supervisor Engine은 자신의 FIB(Fowarding Information Base)를 참조, 이 Unicast 패킷이 Fa 0/0으로 전달되어야 함을 확인, Line Card #0에게 이 패킷을 Fa 0/0으로 내보낼 것을 지시한다.

2-9. Host A가 Host C의 ARP Reply를 수신, 자신의 ARP Table에 Host C의 MAC을 기록한다.

3. Host A와 C는 Ethernet Switching을 통해 통신한다.

CCNA Study – Lan Switching

 

이 글은 Switch에서 L2 Switching이 어떻게 처리되는지를 서술한다.

그리고 Cisco사의 장비를 예시로 설정법을 알아본다.

 

목차

 

 

1. Ethrnet의 역사

우리가 사용하는 Ethernet Frame은 대부분 1983년에 국제 표준이 된 Ethernet II (DIX 2.0)을 따른다. 802.3에서 802.3ab에 이르기까지, Ethernet Frame은 거의 변하지 않은 모습을 보인다. 그런데, DIX 2.0은 어떻게 만들어지게 된 것일까?

Ethernet은 1974년에 ALOHA 네트워크의 CSMA 아키텍쳐에 영감을 받은 Xerox사의 연구자들에 의해 개발되었다. 이들이 만들어낸 프로토콜은 ‘Xerox 시험 네트워크’를 거치면서 실증되었고, 그 이후 Intel과 DEC를 끌어들여 1980년, Data Link layer와 Physical Layer를 정의하고 48비트의 주소와 16비트의 Ether-type 필드를 골지로 한 DIX 1.0 프로토콜을 발표하였다. 그리고 1982년, 이들은 DIX 1.0의 개정판인 DIX 2.0을 발표, 이는 Ethernet II라는 이름으로 알려지게 되고, 이 프로토콜은 IEEE의 근거리 통신용 프로토콜 표준 작업인 802.3에 지대한 영향을 끼쳐, 거의 동일한 프로토콜이 1983년 IEEE 802.3으로 승인된다.

 

2. Ethernet Frame, L2 Switching

OSI 7 Layer중 두번째인 Data Link Layer에서 데이터가 어떻게 처리되는지를 알아보자.

Data Link Layer의 프로토콜 중 하나인 Ethernet에서 데이터의 단위는 Frame이다. 앞으로 Ethernet 데이터를 지칭할 때는 Frame이라고 하겠다.

 

Ethernet Frame의 구조는 다음과 같다.

  1. Preamble (7Byte)
  2. SOF or SFD (1Byte)
  3. Destination MAC Address (48bit)
  4. Source MAC Address (48bit)
  5. Ethernet Type (16bit)
  6. L3 Data
  7. Padding (Optional)
  8. CRC (32bit)
All Rights Reserved ktworld.co.kr
All Rights Reserved ktworld.co.kr

이러한 순서로 구성된 이더넷 프레임은 L3 Protocol Data를 안에 품고 있는 형태가 된다. 이를 캡슐화(Encapsulation)라고 하며, 계층 사이의 독립성을 보장하는 기능을 한다.

이 중 Preamble은 10101010(2)의 나열로 이루어진 신호로, 송/수신측의 비트 동기화에 이용된다. Preamble의 바로 뒤에 오는 10101011(2)이라는 신호를 SOF(Start of Frame)이라고 부르며, 이 뒤에 이더넷 프레임이 온다는 것을 알린다.

또한, Dst-MAC, Src-MAC 다음에 오는 Ethernet Type의 값이 0x600보다 작으면 IEEE 802.2 LLC의 확장인 SNAP PDU가 되고, 이 값이 0x600보다 크면 Ethernet II (DIX 2.0) Frame이 된다. Ethernet II의 Ethernet Type은 이 프레임이 어떠한 상위 계층 프로토콜을 포함하고 있는 것인지를 알려준다.

그 중 대표적인 프로토콜은 다음과 같다.

0x0800 IPv4

0x0806 ARP

0x8100 VLAN Tag

0x8864 PPPoE

여기서 0x8100(VLAN Tag)은 TPID(Tag Protocol Identifier)라고 불리며, 그 뒤에 VLAN(802.1Q)와 QoS(802.1p)정보를 담은 TCI(Tag Control Information)가 온다는 것을 알린다. 그리고 TCI (16bit)가 지난 뒤에 다시 Ethernet Type (16bit)이 나와 L3 프로토콜을 지정한다.

자세한 IEEE 802.1q Frame의 구조는 이 글의 범위를 벗어나므로 여기서는 다루지 않겠다. 앞으로 VLAN Tagging을 공부할 때 다시 확인할 수 있을 것이다.

마지막으로 Padding은 Destination MAC부터 CRC까지의 Ethernet Frame의 크기가 64Byte보다 작을 경우에 추가되는데, 이것은 802.3의 CSMA/CD 알고리즘에서 Collision Detect를 위한 slot time을 보장하기 위한 최소 길이가 64byte인 것에 기인한다. 단, 전송률이 더욱 올라간 Gigabit Ethernet (802.3ab)에서는 최대 케이블 길이를 줄이는 것 대신(10M 이하로 줄어든다!) 프레임의 최소 길이는 64Byte로 유지하되, 512Byte에 미달할 경우 CRC 정보 뒤에 임의의 Symbol을 채워주도록 하였고, 이를 Carrier Extension이라고 한다.

이더넷 프레임의 구조를 알았으니,  실제로 L2 장비에서 이더넷 프레임이 어떻게 처리되는지를 알아보자.

 

1. Host A가 Switch B의 Fa 0/1 인터페이스로 프레임을 보낸다. 이 때 Source MAC Address는 Host A 자신의 MAC을, Destination MAC Address는 Host B의 MAC을 사용한다.

2. Switch B의 Line Card의 Fa 0/1로 이더넷 프레임이 들어온다. Switch B는 자신의 ARP Table을 확인하고 만약 Table에 Source MAC이 존재하지 않으면 Source MAC Learning Event를 발생시켜 Control Module의 ARP Table에 Source MAC을 기록하고, 자신의 ARP Table에도 Source MAC을 기록한다. 이렇게 Dynamic으로 기록된 MAC은 기본값으로 300초간 저장된다.

3. Line Card의 Packet Processor는 이 Ethernet Frame을 열어보고 목적지가 자신의 MAC과 일치하는지 확인한다. 이 경우에는 아니므로 프레임은 Ethernet Switching 되어야 하고, Packet Processor는 Switching을 위해 자신의 ARP Table을 참조한다. 만약 ARP Table에 Dst-MAC이 있으면 라인 카드는 프레임을 그 인터페이스로 포워딩하고, Dst-MAC이 없다면 프레임을 자신의 모든 인터페이스로 플러딩한다. (설명의 편의를 위해 이 스위치의 라인 카드의 수는 하나로 가정한다)

4. Host B가 Host A가 보낸 이더넷 프레임을 수신한다.

3. Cisco Switch에서의 Ethernet 설정

여기서 나오는 명령어들은 Cisco사의 Catalyst 2950 스위치를 기준으로 한다.

interfaceinterface port (range) (port Number)

Global Configuration 모드에서 사용하며, 스위치의 인터페이스 설정 모드로 들어간다. range 명령이나 하이픈(-)을 사용하여 여러 인터페이스를 동시에 설정할 수 있다.

duplexduplex auto/full/half

Interface Configuration 모드의 하위 명령어로, 이 인터페이스 포트가 어떠한 Duplex 모드로 동작할 것인지를 결정한다. 기본값은 auto이며, Interface Config에서 full-duplex, half-duplex를 입력하는 것으로도 동작 모드를 변경할 수 있다.

bandwidthbandwidth number (1 – 10000000)

Interface Configuration 모드의 하위 명령어로, 이 인터페이스에 할당된 Bandwidth를 지정한다. 여기서 유의할 점은 bandwidth 명령어로 설정하는 대역폭은 실제 링크 속도와는 관계가 없다는 것이다. 이 설정값은 EIGRP, OSPF 라우팅 프로토콜이 해당 인터페이스의 Metric 값을 결정하는 것에 영향을 미친다.