태그: Switching

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처럼 보이게 된다.

 

라우터/스위치의 구조

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

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

라우터의 구성요소에 대해 체계적이고 자세한 정보를 올려주신 ‘넷매니아즈 (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을 통해 통신한다.