Computer Network

1. Link Layer - 1

Beige00 2024. 11. 27. 12:46

- I : Introduction

본 글에서는 OSI 7 계층 중 첫번째 계층에 해당하는 Link Layer에 관련한 내용을 다룬다.

이더넷과 Wi-Fi Link Layer를 사용하는데 관련된 세부 사항, Point-to-Point Protocol(PPP)가 사용되는 법, 다른 프로토콜(Link Layer의 상위 Layer)에 Link Layer 프로토콜을 포함시키는 tunneling 기술에 대해 알아볼 것이다.

대부분의 Link Layer Protocol은 해당 PDU(Protocol Data Unit)가 네트워크 하드웨어를 통해 전송되기 위해 어떻게 구성되어야 하는지를 설명하는 관련 프로토콜 형식이다. Link Layer의 PDU는 일반적으로 Frame(프레임)이라고 부르며, 차후 다루게 될 Packet, Segment와는 다른 단위이다. 프레임 형식은 일반적으로 몇 바이트에서 몇 키로바이트에 이르는 가변 길이 프레임을 지원한다. 이 범위의 상한선을 MTU(Maximum Transmission Unit)이라고 한다.


- II : Ethernet and the IEEE 802 LAN/MAN Standards

이더넷이라는 표준은 1980년에 처음 발표된 후 IEEE가 802.3으로 채택한 프로토콜이다. 이러한 네트워크는 보통 상단의 그림과 같이 표현되고는 한다.

여러 Station이 동일한 네트워크를 공유하기 때문에, 이더넷에는 각 이더넷 네트워크 인터페이스에 구현된 분산 알고리즘이 포함되어 있어 Station이 데이터를 전송 가능한 시기를 제어한다. 이 방법을 "CSMA/CD"라고 부르며, 특별한 동의나 동기화 없이 컴퓨터들이 케이블을 사용 가능하도록 중재한다. 이러한 단순성 덕분에 이더넷은 대중적인 프로토콜이 되었다.

CSMA/CD를 사용하면, Station은 먼저 네트워크에서 현재 전송 중인 신호가 있는지 확인하고, 네트워크가 비어 있을 때 자신의 프레임을 전송한다. 이것이 프로토콜의 "carrier sense" 부분이다. 다른 스테이션이 동시에 전송을 시도하면, 이로 인해 중첩된 전기 신호가 충돌로 감지된다. 이 경우, 각 Station은 다시 전송을 시도하기 전에 개별적으로 랜덤한 시간만큼 대기하게 된다. 이 대기 시간은 충돌이 감지될 때마다 길이가 2 배가 되는 균등 확률 분포에서 선택된다.

이렇게 전송을 시도하는 Station이 만약 여러번 전송 실패를 하게 된다면, Time out이 발생하게 된다. 즉, CSMA/CD는 각 Station이 순차적으로 네트워크 사용 기회를 얻는 방식으로, 전송이 여러 번 실패할 경우에는 Time out이 발생한다. 이 프로토콜에서는 한 시점에 하나의 프레임만 네트워크에 존재하게 되며, 이러한 접근 방식을 MAC 프로토콜이라고 한다. MAC 프로토콜은 네트워크에 접근하는 방식을 정의하며, Race 기반과 Time slot 할당 기반과 같은 형태가 있다.

초기에는 3Mb/s의 속도로부터 시작한 이더넷은 100Mb/s(Fast Ethernet)으로 늘어났고, 이로 인해 Race 기반 MAC 프로토콜의 인기는 줄어들었다.(전송속도가 빨라지며 예측하여 보내는 것이 충돌 후 대처하는 것보다 효율적이게 됨.)

Station-Swtich 간의 경로는 개별 사용

대신, 각 LAN station 간의 배선은 공유되지 않고 별도의 경로를 제공하는 Star topology로 전환되었다. 이는 이더넷 스위치를 통해 구현된다. 즉, 충돌 고려가 필요 없는 전용 경로를 Switch를 통해 제공하는 것이다.

현재, Switch는 일반적으로 사용되며 각 Ethernet Station이 데이터를 동시에 송수신할 수 있는 기능을 제공한다.(이를 full-duplex Ethernet 이라고 한다.) 스위치가 PDU를 어떻게 처리하는지는 이후에 더 자세히 다루겠다.

오늘날 인터넷에 접속하는 방법 중 가장 대중적인 것은 무선 통신이다. Wireless-LAN(WLAN)에서 가장 흔한 것은 Wireless Fidelity, 즉 Wi-Fi라는 IEEE Standard이다. Wi-Fi는 때때로 "무선 이더넷" 또는 802.11이라고 불린다. 따라서 Ethernet network에서 TCP/IP가 사용하는 대부분의 기능은 Wi-Fi network에서도 사용된다. 

 

- The IEEE 802 LAN/MAN Standards

IEEE에서는 802로 시작하는 표준이 LAN과 MAN의 작동 방식을 정의한다. 가장 인기 있는 802 Standard에는 802.3(Ethernet), 802.11(WLAN/Wi-Fi)가 포함된다. 802.2 Standard는 여러 네트워크의 프레임 형식에서 공통적으로 사용되는 LLC(논리 링크 제어) 프레임 헤더를 정의한다. LLC는 Link Layer의 "하위 계층"으로 대부분의 네트워크에서 동일하다. 그러나 MAC은 각 네트워크 유형에 따라 다를 수 있으며 예를 들어 유선 이더넷은 CSMA/CD를 사용하나 WLAN은 CSMA/CA를 사용한다. (Wi-Fi는 무선 네트워크의 특성상 송신 스테이션이 데이터 전송 중 수신이 매우 어렵다.)

Frame 형식은 비교적 최근까지 본질적으로 거의 동일하게 유지되어왔다. 이제 그 세부 사항에 대해 알아보자.

 

- The Ethernet Frame Format

모든 802.3 Frame은 공통 형식을 기반으로 한다. 최초의 명세 이후, 프레임 형식은 추가 기능을 지원하기 위해 발전해왔다.

그림은 현재의 이더넷 프레임 레이아웃과 IEEE에 의해 새로 도입된 용어인 IEEE Packet과의 관계를 보여준다.

Ethernet frame은 Frame이 도착하는 시점을 감지하고, 인코딩된 비트 사이의 시간을 확인하기 위해 Preamble 영역으로 시작한다. Ethernet은 Asynchronous LAN (각 이더넷 인터페이스 카드에 정확히 동기화된 physical clock이 존재하지 않음.)이기 때문에 인코딩된 비트 사이의 간격이 인터페이스 카드마다 약간 다를 수 있다. Preamble은 수신 측이 "Clock recovery"를 할 수 있도록 하는 인식 가능 패턴(0xAA 등)을 SFD(Start Frame Delimiter)가 스캔될 때까지 사용한다. 보통 SFD는 0xAB이다. 

더보기

0xAA는 10101010 이다. 이 패턴을 통해 어느 길이의 high가 1인지, 어느 길이의 low가 0인지를 학습할 수 있다. 즉, 송신측의 주기와 타이밍을 학습한다는 것이다.

그 다음은 DST와 SRC가 이어진다. 각각 48비트(6바이트) 크기인 이 주소 필드는 여러 다른 이름으로도 불린다. (MAC 주소, Link Layer 주소, 802 주소, 물리 주소...) 이더넷 프레임의 목적지 주소(DST)는 하나 이상의 Station을 지정할 수 있으며 이를 Broadcast, Multicast라고 한다. Broadcast는 주로 ARP(주소 결정 프로토콜)에서 네트워크 계층 주소(IP)를 Link Layer 주소(MAC 주소)로 변환할 때 사용된다. Multicast 기능은 ICMPv6 프로토콜에서 사용되며 이를 통해 네트워크 계층 주소와 Link Layer 주소 간의 변환이 이루어진다.

 

이어서 Type Field가 위치하며, 이 Field는 Length Field 역할도 동시에 한다. 일반적으로, 이 필드는 헤더 뒤에 오는 데이터의 유형을 식별한다. TCP/IP 네트워크에서 자주 사용되는 값으로는 IPv4, IPv6, ARP가 있다. 여기서 0x8100은 Q-Tag된 프레임(즉, 801.1q 표준에 따라 가상 LAN 또는 VLAN ID를 포함할 수 있는 프레임)을 나타낸다. 기본 이더넷 프레임의 크기는 1518 바이트지만, 최신 표준은 이 크기를 2000바이트까지 확장시켰다.

 

그 후에는 Frame의 데이터 영역 또는 Payload 영역이 위치한다. 이 부분은 IP datagram과 같은 상위 Layer의 PDU가 배치되는 영역이다. 전통적으로 이 영역은 1500 바이트가 고정이었으며, 이는 이더넷의 MTU를 의미한다. 대부분 시스템은 1500 byte MTU를 이용하나 필요에 따라 더 작게 사용할 수도 있다. 이후 최소 길이 요구 사항을 만족시켜야할 경우 Padding을 한다.

 

마지막으로는 Frame의 무결성 검사를 제공하는 필드이다. 끝 부분의 CRC 필드는 32비트(4 바이트)이다.

오류가 있는 데이터 전송을 감지하기 위해 n-비트 CRC를 사용할 때, 검사할 메시지에 먼저 n개의 0 비트가 추가되어 확장된 메시지를 형성시킨다. 이 후, 확장된 메시지는 modulo-2 나눗셈을 통해 Generator polynomial이라는 (n+1) 비트 값으로 나눈다. 메시지의 CRC 필드에 배치된 값은 이 나눗셈의 나머지의 1의 보수이다.(몫은 버린다.)

ITU는 CRC4 generator polynomial으로 10011을 정했다. 예를 들어 16비트 메시지 1001111000101111을 전송하려면, 그림과 같이 긴 이진 나눗셈을 사용하여 나머지를 계산한다. 이후 1111이라는 값을 1의 보수를 통해 0000으로 바꾸어 FCS에 배치하는 것이다. 수신자가 프레임을 수신하여 데이터에 대해 똑같이 Generator polynomial로 나눗셈을 하고, FCS 필드의 값의 일치를 확인한다.(계산된 CRC 값과 나머지를 더해 0이 되어야한다.) 검사 결과 0이 아니면, 프레임이 전송 중 손상되었다는 의미이다. 

 

- Frame Sizes

Ethernet frame의 최소 크기는 64바이트이며, 이를 충족하기 위해 데이터 영역(Payload)의 최소 길이는 48바이트여야한다.(No tag) 만약 Payload가 이 길이보다 작으면, 패딩이 필요하게 된다.

더보기

원래 10Mb/s Ethernet에서는 CSMA/CD가 활용되므로, 송신 Station이 충돌을 탐지하고 이를 감지한 프레임이 어떤 것인지 알아차릴 수 있도록 최소 프레임 크기가 중요했다. 이더넷 네트워크의 최대 길이는 2500m로 제한하였고, 구리선에서 전자의 전파 속도는 약 0.77c 이다. 10Mb/s 속도에서 64바이트 Frame의 전송 시간은 약 51.2 µs 이다. 따라서 네트워크 최대 케이블 길이가 2500m일 때, 두 Station 간의 최대 왕복 거리는 5000m이고, 송신 중인 프레임의 마지막 비트가 이전에 송신한 프레임이 최대 거리 수신기에 도달할 때 아직 송신 중이게 된다. 이 경우, 충돌이 발생하면 Station은 현재 전송 중인 프레임과 연관되었음이 확실해진다.

 

충돌이 감지되면, 잼 신호를 다른 Station에게 보내고, 다른 Station들은 랜덤 이진 지수 Backoff 절차를 시작하여 충돌을 피하도록 한다.

전통적인 이더넷의 최대 프레임 크기는 1518바이트이다.(4바이트의 CRC와 14바이트의 헤더 포함) 이 값은 충돌 발생시 감당가능한 부하를 의미한다. 만약 프레임에 오류가 포함되어 수신 시 이를 파악한다면, 문제를 해결하기 위해 1.5KB만 재전송하면 된다. 이를 뛰어넘는 더 큰 메시지를 보내려면 단편화 작업이 필요하게 된다. 이는 Network Layer에서 적용되므로 나중에 서술한다.

 

- 802.1p/q: VLANs and QoS Tagging

스위칭 이더넷의 사용이 증가하면서 같은 Ethernet LAN에서 한 사이트의 모든 컴퓨터를 상호 연결하는 것이 가능해졌다. 

이렇게 함으로써 모든 호스트가 IP 및 기타 Network layer 프로토콜을 활용하여 직접 다른 호스트와 통신이 가능하게 되며 스위치에서 자체적인 Adapter 역할을 하여 추가 설정이 필요하지 않게되었다. 이러한 기능은 많은 Station을 같은 Ethernet에 배치할 때의 장점 중 일부이다.

이러한 다목적 스위칭 이더넷 네트워크의 규모를 크게 운용할 때 발생 가능한 몇 가지 문제를 해결하기 위해, IEEE는 802.1q로 알려진 Standard에서 VLAN 기능을 추가하여 802 LAN Standard를 확장했다. VLAN을 따르는 이더넷 스위치는 호스트들 간의 트래픽을 공통의 VLAN으로 격리시킨다. 이 격리로 인해 같은 스위치에 연결되어있지만 다른 VLAN에서 작동하는 두 호스트는 트래픽이 흐르기 위해 라우터가 필요하다. 따라서 스위치와 라우터를 결합한 장치들이 만들어졌으며, 최근에는 라우터의 성능이 VLAN 스위칭의 성능에 맞먹을 정도로 개선되었다.

더보기

* LAN이란 동일한 IP 대역과 동일한 Subnet Mask를 활용하여 ARP가 닿는 모든 범위를 뜻한다.

* VLAN은 물리적으로 같은 스위치나 네트워크 장비에 연결된 장치들을 논리적으로 다른 네트워크 세그먼트로 나누는 기술이다. 즉, 하나의 스위치에서 여러 개의 LAN을 관리하게 되는 것이다. 서로 다른 VLAN에 존재하는 호스트들이 통신하기 위해서는 라우터 혹은 Layer 3까지 지원하는 스위치를 통해야하며, 이를 위해 스위치와 라우터의 기능을 결합한 장치가 개발되었다.

* 다목적 스위칭 이더넷 네트워크를 큰 규모 단일 LAN으로 굴리면, 한 ARP Request가 브로드캐스트 되는 양이 높아질 것이다. 이는 문제가 된다. 그렇다고 여러개의 스위치를 구매하여 여러 LAN을 구성하는 것은 비용의 문제가 따른다.

Station과 VLAN 간의 매핑을 정의하는 방법은 여러가지가 있다. 첫번째는 포트 기반 VLAN 할당 방법이다. Station이 연결된 스위치 포트에 특정 VLAN을 할당하는 고정 방식이다. 따라서 해당 포트에 연결된 Station은 사전 할당된 VLAN의 멤버가 된다. 두번째 방법은 이더넷 스위치 네의 테이블을 사용하여 스테이션의 MAC 주소를 해당 VLAN에 매핑하는 MAC 주소 기반 VLAN이 있다. 이외에는 IP 주소를 기반으로 VLAN을 할당하는 방법도 존재한다.

다른 VLAN에 속한 Station들이 같은 스위치에 연결되어 있을 때, 스위치는 Station이 사용하는 이더넷 인터페이스와 관계없이 트래픽이 한 VLAN에서 다른 VLAN으로의 노출을 방지한다.

VLAN Trunking은 여러 VLAN을 하나의 물리적 연결을 통해 여러 스위치나 네트워크 장비 사이에서 전달할 수 있도록 하는 기능이다. 이것이 없다면 여러 VLAN은 각자의 포트로 대화했어야할 것이다. 이 기능을 지원하기 위해 필요한 것은 한 링크로 뭉쳐놓은 데이터가 원래는 어디 VLAN 소속이었는지를 알아내는 것이다. 이를 위해 VLAN 태그가 사용되며 이 태그는 12비트의 VLAN 식별자를 포함한다. 또한 이 태그는 QoS를 지원하기 위해 3비트의 우선순위를 포함한다.

대부분의 경우 관리자는 적절한 포트에 Trunking을 활성화하여 802.1p/q 프레임을 전송하도록 스위치 포트를 구성해야한다. Trunking port는 VLAN 기능이 있는 스위치 간의 연결에 사용된다. 또한 802.1p는 VLAN과 독립적으로 사용할 수 있어 VLAN 없이도 QoS는 활용이 가능하다. (VLAN ID 필드 0으로 설정.)


- III : Full Duplex, Power Save, Autonegotiation, and 802.1X Flow Control

이더넷이 처음 개발되었을 때에는, 공유 케이블을 사용하여 Half-duplex mode로만 작동했다. 즉, 데이터를 한 번에 한 방향으로만 전송할 수 있어서, 특정 시점에 하나의 Station만 프레임을 전송할 수 있었다. 그러나 Ethernet switch 개념으로 인해 네트워크는 더 이상 한 케이블을 모든 Station이 공유하지 않고, 여러 개의 링크 세트로 구성되게 되었다. 그 결과, 다수의 Station pair가 동시에 데이터를 교환할 수 있게 되었다.

또한, Full duplex로 작동하도록 수정되어 충돌 탐지를 할 필요가 없게 되었다. 이 변화는 이더넷의 물리적 길이를 확장할 수 있게 해주었다.

 

- Duplex Mismatch

Autonegotiation은 네트워크 장치가 이더넷 링크를 설정할 때 서로 최적의 속도와 duplex mode를 자동으로 결정하는 프로세스이다. 초기 링크를 설정하면, 각 장치는 Autonegotiation 신호를 주고 받으며 자신이 지원하는 속도와 Duplex mode를 광고한다. 그리고 그 중 최고의 설정으로 링크를 구성하고 데이터를 주고받는 것이다. 이는 이론적으로는 문제가 없다.

그러나 만약 양쪽 스테이션이 한 쪽이 Autonegotiation이 비활성화 되어있거나 서로 다른 duplex configuration으로 구성되어있다면, Duplex Mismatch가 발생할 수 있다. 이 경우 연결이 완전히 실패하지는 않지만 성능이 심각하게 저하될 수가 있다. Half duplex 쪽에서는 Full duplex가 송신하는 트래픽을 충돌로 감지할 수 있으며 이는 CSMA/CD의 작동을 활성화시킨다. 동시에 충돌을 유발한 데이터는 손실되어 TCP에서 재전송을 요구하게 한다.

 

- Link-Layer Flow Control

확장된 이더넷 LAN을 Full-duplex mode로 운영하고, 서로 다른 속도의 세그먼트를 연결할 때, 스위치가 일시적으로 프레임들을 저장해둬야할 수도 있다. 예를 들어, Station끼리의 송수신 트래픽 속도가 Station의 링크 속도를 초과하면, 초과한 만큼의 프레임을 따로 저장해둔다는 것이다. 이러한 상황이 오래 지속되어 스위치의 저장 공간을 넘게되면 해당 프레임들이 드롭될 수 있다. 특히 특정 목적지에 과도하게 송신 트래픽이 몰릴 때 이 현상이 심하게 된다.

이러한 상황을 완화하는 한 방법은 송신자에게 Flow control을 적용하여 전송 속도를 늦추는 것이다. 일부 이더넷 스위치와 네트워크 인터페이스는 스위치와 네트워크 인터페이스 카드 간에 특수 신호 프레임을 전송함으로써 Flow control을 구현한다. Flow control은 송신자에게 전송 속도를 늦추라는 신호를 보내는 것이지만, 각 프로토콜마다 구현 세부사항은 다 다를 수 있다. 802.3, 즉 이더넷은 PAUSE frame을 이용한다.

PAUSE 메시지는 MAC control frame에 포함되어있다. 이 메시지를 수신한 Station은 전송 속도를 줄이라는 권고를 받게 된다. 그리고 전송 중에 송신을 할 수 있어야하므로 Fully Duplex Link 에서만 활용된다. 이 PAUSE frame에서는 송신자가 전송을 재개하기 전에 대기해야하는 시간을 나타내는 hold-off 시간 값이 포함되어있다.

MAC control frame은 Length/Type field 바로 다음에오는 2바이트 opcode를 포함한다. 해당 바이트에는 송신자가 대기해야하는 시간을 인코딩한 2바이트의 값이 포함된다.

이더넷 계층의 Flow control을 사용하면 단점이 존재하고, 이로 인해 이더넷 계층의 Flow control은 일반적으로 사용되지 않는다. 그 이유는 스위치가 과부하 상태에 접어들면, 스위치가 모든 호스트에게 PAUSE를 날릴 것이고, 모든 호스트가 스위치가 안정될 때까지 멈출 것이다. 이 때, 만약 스위치의 메모리 사용이 특정 호스트에게 몰려있는 경우에도 모두가 멈춰야한다는 비효율성이다.


- IV. Bridges and Switches

IEEE 802.1d Standard는 Bridge의 동작을 규정하며, Switch는 본질적으로 고성능 Bridge이므로 이 Standard에 포함된다. Bridge 또는 Switch는 여러 개의 Physical Link Layer network 또는 Station 그룹을 연결하는데 사용된다.

그림을 참고하면, Swtich A와 B는 연결되어 확장된 LAN을 형성한다. 클라이언트들은 A에 연결되고, 서버는 B에 연결되어 있으며, 각 Switch의 포트는 참조를 위해 번호가 지정되어 있다.

Switch는 시간이 지남에 따라 MAC 주소를 학습하여 결국 각 Swtich가 모든 Station에 도달할 수 있는 포트를 알게 된다. 이러한 정보는 스위치 내의 테이블에 포트별(VLAN별)로 저장된다. 즉, 같은 LAN에 있으면 모두 서로의 위치를 알고 있는 것이다.

각 Station의 위치를 학습하는 방법을 생각해보자.

Switch(Bridge)가 처음 켜졌을 때는 DB가 비어 있으므로, 자신 외에는 어느 Station의 위치도 알지 못한다. Switch가 자신이 아닌 다른 Station을 대상으로 하는 프레임을 수신할 때마다, 해당 프레임이 도착한 포트를 제외한 모든 포트에 프레임의 복사본을 만들어 전송한다. 이 후, Switch는 프레임의 출발지 MAC 주소를 확인해 해당 MAC 주소가 연결된 포트를 저장한다. 

 

- Spanning Tree Protocol(STP)

Bridge는 단독으로 작동할 수도 있고, 다른 Bridge와 조합하여 작동할 수 있다. 2개 이상의 Bridge가 사용되는 경우 프레임이 루프될 가능성도 존재한다.

위의 그림에서 모든 Switch들이 막 켜지고, 따라서 DB가 전부 비어있다고 가정해보자. Station S가 포트 6을 따라 Switch B에 데이터를 전송한다면, Switch B는 DB에 S의 MAC 주소, Port 6을 기록하고, S의 프레임을 브로드캐스트한다. (3번 복제됨.) 이 프레임들을 받은 A는 2,3으로 복사해서 전송, C는 13,14로 복사해서 전송, D는 20,22로 복사해서 전송하게 된다. (6번 복제됨.) 그러면 각 Switch는 S로 가는 포트가 도대체 어느 포트인지 알 수 없게 진동하는 현상이 나타난다. 이를 억제하기 위해 사용되는 프로토콜이 STP이다.(현재는 기존의 STP가 RSTP로 대체되었다고 한다.)

STP는 각 Bridge에서 특정 포트를 비활성화하여 Topology loop을 방지하는 방식으로 작동한다. (즉, Bridge 간 중복 경로 허용하지 않음.) 즉, Bridge를 노드로, 링크를 간선으로 하는 Spanning Tree를 찾아내는 게 STP인 것이다. 각 Station 간 선택된 최소 간선들만 프레임 전달을 위해 사용하면 Cycle이 존재하지 않아 문제가 사라지게 된다. 이러한 Spanning tree는 각 Bridge에서 실행되는 분산 알고리즘을 통해 형성되고 유지된다. 당연히 STP도 Bridge가 사라지거나, 생기는 경우, 인터페이스 카드가 교체되거나 MAC 주소가 변경되는 상황에 대처해야한다. 이를 위해 BPDU라는 프레임을 교환한다.

보통 Spanning Tree를 구성 할 때 Link의 cost는 링크 속도에 반비례하는 값으로 설정하는 것이 권장된다.(물론 네트워크의 특성에 따라 다르게 구성할 수 있다.)

 

- Port States and Roles

STP의 기본 동작을 이해하기 위해서는 각 Bridge의 각 포트에 대한 State machine의 작동 방식과 BPDU의 내용을 이해해야한다. 각 Bridge의 포트는 5가지 상태가 존재한다. (Blocking, Listening, Learning, Forwarding, Disabled)

실선은 일반적인 전이이며 점선은 관리자 전이이다. 초기화 후, 모든 포트는 Blocking state이다. 이 상태에서는 주소 학습, 프레임 전달, BPDU 전송을 하지 않는다. 그러나 root bridge로의 경로에 포함될 가능성을 대비해 수신된 BPDU를 모니터링을 한다. 만약, Blocking 동안 Root bridge 경로에 포함이 되게 되면 Listening state로 전이한다. Listening state에서는 BPDU를 송수신 할 수 있지만, 학습하지는 않는다. 이후 Learning state로 전이하게 되면 데이터 전달을 제외한 모든 절차를 수행할 수 있게 된다. 15초 정도 뒤면 학습이 끝났다고 간주, Forwarding state로 들어가 프레임 전달을 시작한다.

포트 state machine에서 각 port는 구분되는 role을 가진다. role로는 root, designated, alternate, backup port가 존재한다. root port는 Spanning Tree에서 root bridge로 향하는 경로 끝에 있는 포트이다. Designated port는 포워딩 상태에 있으며 연결된 세그먼트에서 root로 가는 최소 비용 경로에 있는 포트이다. alternate port는 연결된 세그먼트에서 root로 갈 수 있지만, 비용이 더 높은 다른 포트이다. 이 포트는 포워딩 상태가 아니다. back up port는 동일한 bridge의 designated port와 같은 segment에 연결된 포트이다.

 

- BPDU Structure

BPDU는 항상  01:80:C2:00:00:00으로 전송되며 dST, SRC, L/T 필드는 이더넷 헤더의 일부이다. 3 바이트 LLC/SNAP 해더는 802.1에 의해 정의되며 BPDU의 경우 0x424203으로 설정된다. (옵션이다.)

Prot 필드는 프로토콜 ID 번호를 제공하며, Vers, Type는 STP인지 RSTP인지를 구분, Flags 필드는 Topology Change와 Topology Change Acknowledgment 비트를 포함한다. Root ID 필드는 프레임을 전송한 노드의 관점에서 Root bridge의 식별자를 제공한다. Bridge ID 필드에는 프레임을 보낸 bridge의 MAC 주소가 들어간다. 

Root Path Cost는 Root ID 필드에 지정된 Bridge에 도달하기 위한 경로 비용이다. PID 필드는 프레임이 전송된 포트 번호이다. (모든 ID 앞에는 우선순위 필드가 포함된다.) MsgA는 Message Age, MaxA는 Time out Message Age 이다. Hello Time은 Frame의 주기적 전송 간격을 나타낸다. Forward Delay 필드는 학습 및 Listening에 소요되는 시간이다.

Message Age 필드는 다른 시간 관련 필드와 달리 고정된 값이 아니다. Root Bridge가 BPDU를 보낼 때, 이 필드를 0으로 설정하고, 각 Bridge를 건널 때 마다 1씩 증가시키는 것이다. 만약 MaxA-MsgA = 0이면 타임아웃으로 discard된다. 루트 포트에서 다른 BPDU를 수신하지 못하고 이 시간이 지나면, root bridge는 죽은 것으로 판단되어 다른 root bridge election 과정을 시작한다.

 

- Building the Spanning Tree

STP의 첫 번째 작업은 root bridge를 선출하는 것이다. root bridge는 네트워크 내에서 가장 작은 id를 가진 bridge를 지정한다. bridge가 초기화될 때, 자신이 root bridge라고 가정하고 Root ID 필드를 자신의 ID로 채워 BPDU를 보낸다. 그러다가 더 작은 ID를 가진 Bridge를 발견하면 해당 ID를 넣어 구성한다. 또한 자신보다 작은 node id를 가진 BPDU를 전송한 포트를 루트 포트로 표시하고 나머지 포트는 blocking 또는 listening 상태가 된다. 

 

- Topology Changes

STP의 다음 중요한 작업은 토폴로지 변화를 처리하는 것이다. 기본 DB aging 메커니즘을 사용하여 변화하는 토폴로지에 적응할 수는 있지만, aging timer는 잘못된 항목을 삭제하는 데 오랜 시간이 걸릴 수 있기 때문에 좋지 않은 접근법이다. 대신 STP는 토폴로지 변화가 감지되면 네트워크에 이를 빠르게 알리는 방법을 제안한다. 즉, 포트가 Blocking 혹은 Forwarding 상태로 전환될 때 이를 알리는 것이다.

Bridge가 연결 변경을 감지하면 Root port로 Topology Change BPDU를 전송하여 상위 bridge들에게 해당 사실을 알린다. Root로 이어지는 트리의 다음 bridge는 TC BPDU를 수신한 bridge에 이를 Acknowledge 처리하고 root 방향으로 이를 전달한다. Root bridge가 이러한 경로로 Topology Change를 감지하면, 이후 주기적인 구성 메시지에 TC 비트 필드를 설정한다. 이 메시지는 blocking, listening state의 포트에도 전달된다. 이 비트 필드의 설정은 bridge들이 aging time을 forwarding delay time으로 줄일 수 있게 한다. 

 

- Rapid Spanning Tree Protocol

기존 STP의 문제 중 하나로 여겨지는 점은, Topology change가 Root bridge가 BPDU를 일정 시간 동안 수신하지 못했을 때만 감지된다는 것이다. Root bridge의 타임아웃 시간이 길면, 수렴 시간이 길어질 수 있다는 점이다. IEEE 802.1w Standard에서는 이러한 점을 감안하여 RSTP라는 새 프로토콜을 채택했다.

RSTP의 주요 개선점은 각 포트의 상태를 모니터링하고 문제를 감지하자마자 즉시 Topology change를 트리거한다는 점이다. 또한 RSTP는 BPDU 포맷의 Flag 필드 6비트를 모두 사용하여 Bridge 간의 agreements를 지원함으로써, 일부 타이머를 사용하는 프로토콜 작동 방식을 대체한다. RSTP는 기존 STP의 다섯 가지 포트 상태를 세 가지 상태(discarding, learning, forwarding)으로 줄였다. Discarding 상태는 Disabled, blocking,listening을 합친 상태이다. 또한 RSTP는 alternate port 역할을 도입했다. alternate port는 root port가 장애가 발생하면 즉시 백업 역할을 수행할 port이다.

RSTP는 단일 유형 BPDU만 사용하며, 따라서 특별한 topology change BPDU는 존재하지 않는다. 토폴로지 변화를 감지한 Switch가 이를 나타낸 BPDU를 전송하며, 이를 수신한 모든 스위치는 즉시 자신의 DB를 초기화하는 것이다.(Root bridge로 변화를 전달하는 과정 생략.) 따라서 수렴 시간이 단축되게 된다.

RSTP는 edge port와 일반 spanning tree port를 구분한다. edge port는 단말 유저(end user)에 직접 맞닿아있는 port이다. 또한 Point-to-Point link, Shared link도 구별한다. edge port와 point-to-point port는 일반적으로 cycle(loop)이 존재하지 않으므로 listening, learning 단계를 건너 뛰고 바로 forwarding으로 갈 수 있다.  point-to-point link인지는 인터페이스가 full-duplex mode인지 확인하는 것으로 한다.

일반 STP에서는 BPDU가 notifying 이나 root bridge로부터 relay된다.(상기 설명 참조)

그러나 RSTP에서는, 모든 Bridge가 정기적으로 BPDU를 전송하여 연결된 이웃과의 상태를 확인한다. Bridge가 3배의 hello 간격 동안 업데이트 된 BPDU를 받지 못하면(즉 3번의 타이밍을 놓치면), 해당 이웃에 장애가 발생한 것으로 판단한다. 또한 일반 STP와 달리 edge port가 연결되거나 해제될 때 Topology change 절차가 없다. 토폴로지 변화가 감지되면, notifying bridge는 TC 비트 필드가 설정된 BPDU를 모든 Bridge로 broadcast 한다. 만일 bridge가 이러한 BPDU를 수신하면, edge port 관련 항목 제외한 모든 DB를 flush하고 다시 learning phase에 들어가게 된다.

더보기

MSTP는 VLAN 환경에서 STP를 사용하는 것을 가정하고 설계된 프로토콜이다. 각 VLAN에 대해 별도의 Spanning Tree를 형성하여 VLAN 간 트래픽을 독립적으로 송수신할 수 있다.

- 802.1ak : Multiple Registration Protocol (MRP)

다중 등록 프로토콜(MRP)는 bridged LAN 환경에서 Attribute를 Station 간에 등록하기 위한 방법을 정의한다. 802.1ak는 MRP의 두가지 특정 응용을 정의한다. (MVRP, MMRP)

MRP는 이전의 GARP framework를 대체하며 MVRP와 MMRP는 각각 GVRP, GMRP를 대체한다. 

MVRP를 사용하면 end station이 특정 VLAN 멤버로 구성될 때 이 정보를 연결된 스위치로 전달한다. 스위치는 해당 station의 VLAN 참여 정보를 다른 스위치로 전파한다. 이를 통해 스위치가 DB를 VLAN ID 기반으로 확장될 수 있으며, VLAN끼리 따로 토폴로지를 관리하므로 한 VLAN의 토폴로지 변경이 STP를 통한 기존 Spanning Tree 재계산을 트리거하지 않도록 방지할 수 있다.

MMRP는 Station이 그룹 MAC 주소(Multicast Address)을 등록하는 법을 제공한다. 스위치는 이 정보를 활용해 Multicast traffic이 전송되어야 하는 포트를 결정할 수 있다.(이 기능이 없으면 모든 Multicast 트래픽을 Broadcast 해야한다.)

(* MMRP는 IGMP와 MLD에서 지원하는 IGMP/MLD 스누핑과 유사하다.)

즉, MRP는 네트워크에서 VLAN과 멀티캐스트 트래픽 관리를 효율적으로 수행할 수 있도록 설계된 프로토콜이다.


- V. Wireless LANs - IEEE 802.11 (Wi-Fi)

 

오늘날 인터넷 접속에 가장 널리 사용되는 기술 중 하나는 Wi-Fi (IEEE Standard 802.11)이다. 사실상 이더넷의 무선 버전이다. End user가 AP와 "무선"으로 연결되면, 해당 AP부터 Switch, Router를 거치는 연결은 기존과 동일하게 진행될 수 있다. Wi-Fi는 각 Station을 위한 랜선이라든지 기타 도구가 필요없으므로 매우 저렴하고 편리하다. 또한 단순히 공유기에 랜선을 꽂는 것만으로 AP가 만들어지는 단순한 설치과정을 지니고 있다. AP와 그에 연결된 Station들은 BSS라고 불린다. AP는 일반적으로 DS를 통해 서로 연결되며 이는 ESS를 형성한다. 즉 BSS의 집합이 ESS가 된다. 이러한 설정은 일반적으로 infrastructure mode라고 불린다. 

802.11 Standard는 추가적으로 ad hoc mode를 제공한다. 이 구성에서는 별도의 AP와 DS가 없으며 Station 간 Peer-to-peer로 통신이 이루어진다. Ad hoc network에 참여하는 station을 IBSS라고 한다. BSS/IBSS의 집합으로 형성된 WLAN은 Service Set이라고 하며 이는 SSID로 식별된다. ESSID(Extended SSID)는 연결된 ESS의 이름으로 LAN 전체를 식별한다.(AP 설정 시 네트워크 이름으로 지정된다.)

 

- 802.11 Frames

802.11 network에는 공통 프레임 형식이 존재한다. 사진에 표시된 프레임은 동기화를 위한 Preamble을 포함한다. 그 다음에는 PLCP Header가 이어지며, PHY 계층의 세부 정보 (프레임 길이, 전송 속도, 전송 모드 등등)를 제공해주는 역할을 한다. PLCP 부분은 일반적으로 프레임의 나머지 부분보다 더 낮은 Data rate으로 전송된다. 이를 통해 전송 안정성의 향상과 호환성을 확보할 수 있다. 프레임의 MAC PDU(MPDU)는 이더넷 프레임과 유사하지만 일부 추가 필드를 포함한다. 

MPDU의 헤더에는 Frame Control Word가 포함되어 있다. 이 FCW에는 2비트의 Type 필드가 포함되어 있으며, 프레임의 유형을 식별한다. (관리 프레임, 제어 프레임, 데이터 프레임) 프레임의 나머지 필드 내용은 프레임 유형에 따라 달라진다.

 

1. Management Frames

관리 프레임은 Station과 AP 간의 연결 생성, 유지, 종료를 위해 사용된다. 암호화 사용 여부, 네트워크의 이름(SSID,ESSID), 지원 Data rate, time base 등을 제공하는데도 사용된다. 즉, 이 프레임은 Wi-Fi interface가 주변 AP를 scan하는데 필요한 정보를 제공한다. Scanning은 Station이 사용 가능한 네트워크와 관련 구성 정보를 발견하는 과정이다. 예를 들면 스마트폰의 Wi-Fi 기능을 키면 주변에 연결 가능한 BSS 혹은 IBSS의 AP를 찾는 과정이다.  이 과정에서 station은 probe request를 전송하여 네트워크를 능동적으로 탐색할 수 있다. (수동 스캔은 AP가 주기적으로 브로드캐스트하는 비콘 프레임을 확인하여 AP의 SSID, Data rate, 보안 정보 등을 확인하는 것이다.)

AP가 SSID를 브로드캐스트할 때 (비콘 프레임을 전송할 때), Station은 해당 AP와 연결을 시도할 수 있다. 연결이 이루어지면 대부분의 Wi-Fi 네트워크는 Station에 인터넷 접속을 제공하기 위한 설정 정보를 함께 제공한다. 

 

2. Control Frames: RTS/CTS and ACKs

제어 프레임은 flow control과 프레임 확인(Acknowledgment)를 처리하기 위해 사용된다. flow control은 수신기기가 송신기의 속도를 조절할 수 있도록 해주며, ACK 응답은 송신기가 프레임이 올바르게 수신되었는지를 알 수 있게 해준다. 이러한 개념은 Transport layer의 TCP에서도 사용된다.

802.11 네트워크는 옵션으로 RTS(Request-To-Send)/CTS(Clear-To-Send) 방식을 통해 flow control을 지원한다.

데이터 프레임을 보내기 전에 송신 station이 RTS 프레임을 전송하며, 수신 측이 추가 트래픽을 처리할 상황이 된다면 CTS 프레임을 응답으로 전송한다. RTS/CTS 교환 후, 송신 station은 CTS 프레임에 명시된 time window 내에서 데이터를 전송할 수 있으며, 전송된 데이터가 성공적으로 수신되면 ACK을 받는다.

RTS/CTS 교환은 각 station에게 언제 전송이 허용되는지 알려주는 방식으로 숨은 단말 문제(hidden terminal problem)을 방지하는데 도움을 준다. 이를 통해 서로의 신호를 받지 못하는 station들이 동시에 데이터를 전송하는 상황을 피할 수 있다. RTS/CTS 프레임은 짧기 떄문에 채널을 오래 점유하지 않는다. 일반적으로 AP는 데이터 패킷 크기가 충분히 클 때 RTS/CTS 교환을 시작한다.(설정해둔 packet size threshold보다 큰 경우 RTS 프레임 전송)

더보기

* Hidden terminal problem

WLAN에서 3개의 노드가 있을 때, 중간 1개 노드(B)는 양 노드가 보여 모두 통신이 가능하나,  A와 C는 서로 통신이 되지 않아 상태를 모른다. 즉, A,C는 동시에 충돌을 감지하지 못하고 데이터를 전송할 수 있다.

유선 이더넷 네트워크에서는 충돌만 발생하지 않으면 왠만해서는 프레임이 올바르게 수신되었다고 간주해도 무방하다. 그러나 무선 네트워크는 신호 부족, 간섭 등 다양한 이유로 프레임이 올바르게 전달되지 않을 가능성이 크다. 저렴하고 간편한 대신 안정성이 떨어지는 것이다. 이러한 문제를 해결하기 위해 802.11은 802.3의 retransmission 과정을 확장하여 retransmission/acknowledgment 방식을 도입했다. 각 유니캐스트 프레임 또는 각 프레임 그룹마다 일정 시간 내에 ACK이 수신되어야한다는 규칙을 정의한 것이다.(나중에 설명하겠지만 TCP의 재전송 타이머를 생각하면 비슷하다.) 

그러나 멀티캐스트, 브로드캐스트에는 ACK을 받지 않는다. 이는 다수의 ACK이 동시에 반환되어 ACK implosion이 발생하는 것을 막기 위함이다. 송신 측이 지정된 시간 내에 ACK을 수신하지 못하면 해당 프레임을 재전송한다. 재전송이 잦으면 네트워크 내에서 중복 프레임(dup frame)이 많이 생성될 수 있으며 Frame Control Word의 Retry 비트 필드는 해당 프레임이 재전송 프레임인 것을 나타낼 때 세팅된다.  수신 Station은 이를 통해 dup frame을 제거할 수 있으며 이를 위해 station은 최근에 본 주소, 시퀀스 번호, fragment 번호를 기록한 작은 캐시를 유지하여야한다. 수신된 프레임이 캐시에 hit 될 경우, 해당 프레임은 중복 프레임으로 간주되어 폐기처리한다.

프레임을 전송하고 이에 대한 ACK을 수신하는데 필요한 시간은 링크의 물리적 거리와 slot time에 따라 달라진다. slot time은 802.11 MAC 프로토콜에 정의된 기본적인 시간 단위이다. slot time은 충돌이 감지된 후 송신 장치들이 데이터를 다시 전송하기 전 대기해야 할 최소 시간이다. ACK을 기다리는 시간(slot time 포함)은 대부분의 시스템에서 manual하게 설정 가능하며, 장거리 Wi-Fi를 사용하는 경우에는 이 값을 길게 설정해줄 필요가 있다.

 

3. Data Frames, Fragmentation, and Aggregation

혼잡한 네트워크에서 가장 자주 관찰되는 프레임은 Data frame으로 이름에서 알 수 있듯이 데이터를 운반하는 역할을 한다. 또한 802.11은 Frame Fragmentation을 지원하여 프레임을 여러 단편으로 나눌 수 있다. 이는 보통 MTU를 맞추기 위해 이용된다. 각 단편은 독립적으로 MAC 헤더와 CRC를 가지며 처리 또한 독립적으로 된다. 예를 들어, 다른 목적지로 보내는 단편들이 서로 교차 전송될 수 있다. 단편화는 채널에 간섭이 심할 때 충돌이 나면 재전송 해야할 packet의 크기를 줄여 네트워크의 성능을 개선하는데 도움을 줄 수 있다. block ACK이 사용되지 않는 경우 각 단편은 개별적으로 전송되며 각 단편마다 하나의 ACK을 받는다. 

Fragmentation은 유니캐스트 목적지 주소를 가진 프레임에만 적용된다. 단편화를 지원하기 위해서 Sequence Control field는 4비트만큼의 fragment number와 12비트만큼의 sequence number를 포함한다. 프레임이 단편화되면, 모든 단편은 동일한 Seq number를 가지며 Frag number는 단편의 순서대로 1씩 증가하며 기록된다. Frag number 영역이 4비트이므로 한 프레임에 대해 최대 15개의 단편을 생성할 수 있다. Frame Control Word의 More Frag 필드는 해당 시퀀스 번호의 프레임에 추가 단편이 남아있는지를 표시한다. 최종 단편은 이 비트가 0으로 설정된다. 수신 Station에서는 각 단편을 Seq number와 Frag number를 기준으로 정렬하여 원래 프레임을 조립한다. 즉, More Frag 필드가 0인 프레임을 받을 경우 프레임은 재구성되어 상위 계층 프로토콜로 전달된다.

그러나 이론과 다르게 Link layer에서 802.11의 Fragmentation은 tuning이 필요하기 때문에 자주 사용되지는 않는다. 잘못 사용하면 성능 저하를 초래할 수 있기 때문이다. 따라서 많은 AP는 Fragmentation을 사용하지 않도록 기본 값을 높은 임계값으로 설정한다.

더보기

* Fragmentation이 유용할 수 있는 이유는 확률에 기반한 간단한 원리로 설명할 수 있다.

만약, BER(Bit Error Rate)이 P라고 하면, 비트가 성공적으로 전달될 확률은 (1-P)이고 N개의 비트가 성공적으로 전달될 확률은 (1-P)^N 이 된다. 따라서 N이 커질 수록 이 값은 감소하게 된다. 1000개짜리 비트를 한번에 전송하는 (1-P)^1000 보다 1000개짜리를 10개로 나누어 (1-P)^100을 10번 전송하는 것이 더 확률이 유리하다.

 

구체적으로 1500바이트 크기의 프레임을 전송한다고 해보자.

P = 10^(-4)라고 하면, Fragmentation을 사용하지 않으면 성공적으로 전달될 확률은 (1-10^(-4))^12000 ~= 0.301 이다. 즉, 이 프레임이 첫 시도에서 오류 없이 전달될 확률은 0.301이다.

같은 예시에서 Fragmentation threshold를 500으로 설정해보자. 그러면 4000비트 크기의 3개의 단편이 생성된다. 각 단편이 오류 없이 전달될 확률은 약 0.67이 되게 되고 전체 프레임을 구성하려면 0.67이 3번 성공해야하는 문제가 된다. 3개가 전부 한번에 성공할 확률은 약 30%가 된다. 그러나 2개 또는 3개의 단편이 성공할 확률은 74%가 된다.

1개의 단편(500바이트)만을 26%의 확률로 재전송하는 것과 1500바이트를 70% 확률로 재전송하는 것은 단순히 보아도 전자가 낫다.

 

하지만 각 단편은 헤더와 같은 오버헤드를 소비하므로 BER이 거의 0에 가까운 경우에는 Fragmentation이 성능을 떨어뜨린다.

802.11n이 제공하는 개선 중 하나는 Frame aggregation이다. 이는 2가지 형태(A-MSDU, A-MPDU)로 제공된다.

A-MSDU는 여러 개의 동일한 목적지를 지니는 완전한 802.3 프레임을 하나의 802.11 프레임에 aggregation 할 수 있는 것이고, A-MPDU는 동일한 출발지, 목적지 및 QoS 설정을 가진 여러 MPDU를 짧은 지연 시간을 두고 연속적으로 전송할 수 있는 기능이다.

단일 Aggregation에 대해, A-MSDU 방식은 기술적으로 더 효율적이다. (각 802.3 헤더는 일반적으로 14바이트이며 이는 최대 36 바이트까지 될 수 있는 802.11 MAC 헤더에 비해 상대적으로 작다. 따라서 여러 802.3 프레임에 대해 단 하나의 802.11 MAC 헤더를 사용하면 각 프레임마다 802.11 MAC 헤더를 적용하는 것에 비해 최대 22바이트를 절약할 수 있다.)

그러나 A-MSDU는 단일 FCS로 보호되므로 오류가 발생하면 프레임 전체를 다시 전송해야하는 단점이 있다.

 

A-MPDU는 각각 독립적인 802.11 MAC 헤더와 FCS를 가지는 최대 64개의 802.11 프레임을 한 번에 전송하는 방식이다. 각 서브프레임은 독립적인 FCS를 포함하고 있으므로 오류가 발생한 서브프레임만 선택적으로 재전송할 수 있다.

이 기능은 802.11n의 block ACK 덕분에 가능하다. block ACK은 확장된 ACK의 일종으로, 송신자에게 어떤 A-MPDU 서브프레임이 성공적으로 전달되었는지에 대한 피드백을 제공한다. 이 기능은 TCP의 SACK과 목적은 유사하나 구현 방식은 다르다. 따라서 A-MSDU가 오류 없는 네트워크에서 작은 패킷들을 대량으로 전송하는데 더 효율적일 수 있지만, 실제로는 A-MPDU가 더 좋은 성능을 발휘하는 경우가 많다.

 

- Power Save Mode and the Time Sync Function (TSF)

802.11은 STA가 절전 모드로 들어갈 수 있는 PSM을 제공한다. STA는 수신 회로를 일정시간 동안 차단하여 전력을 절약할 수 있도록 설계된다. STA가 절전 모드에 들어가면, 송신하는 프레임의 FCW에 특정 비트가 설정된다. AP는 이 비트를 감지하고 해당 STA를 위한 프레임을 임시 저장한다. PSM을 지원하는 AP는 비콘 프레임의 FCW에 특정 비트를 세팅하여 STA에게 버퍼링된 프레임이 있음을 알릴 수 있다. 이를 통해 STA는 다음 AP 비콘 시간에 깨어나고, AP에게 저장된 대기 프레임을 받는 방식으로 PSM이 작동할 수 있다.

STA가 다음 AP 비콘 시간에 깨어난단게 말은 쉬워보여도 실제로는 그렇지 않을 수 있다. 이들은 무선으로 연결되어있기 때문에 physical global clock이 있지 않기 때문이다.

Wi-Fi는 AP와 PSM을 사용하는 STA 간의 공통된 시계를 유지하기 위해 TSF를 이용한다. 각 STA는 마이크로초 단위의 64비트 카운터로 표현되는 reference time을 유지하며 네트워크의 다른 STA들과 이 시간을 동기화한다. 동기화는 PHY의 최대 전파 지연 시간에 4마이크로초를 더한 범위 내에서 유지된다.

어떤 STA가 TSF 업데이트(다른 STA에서 전송된 카운터 값)을 수신하면, 자신의 값과 비교하여 수신된 값이 더 크면 자신의 시간을 업데이트한다. (즉 자신이 더 느리면 업데이트한다.) 이는 STA의 시간이 항상 앞으로 진행되도록 보장한다.

그러나 이를 계속 진행하면 더 느린 STA가 가장 빠른 STA에 동기화되는 경향이 있고, 클럭 속도 차이가 커지면 빈번히 동기화 과정을 반복해야할 수도 있다. 즉, 계속 한 STA가 빠르게 흐르면 나머지 STA가 이를 뒤쫓아가야하는 것이다.

802.11e(QoS) 기능이 802.11에 통합되면서 PSM은 버퍼링된 프레임을 주기적으로 일괄 처리할 수 있는 APSD라는 기능이 추가되었다. 이 주기는 비콘 프레임의 개수로 표현된다. 이 기능은 QoS Control Word의 일부 서브필드를 사용한다. 이를 이용하면 기존 802.11 PSM처럼 매 비콘 간격마다 깨어날 필요가 없으며 더 긴 기간 동안 전력회로를 꺼둘 수 있다. 

802.11n은 여러 개의 무선 회로를 같이 사용하는 STA(MIMO 등)가 프레임이 준비될 때까지 하나를 제외한 모든 회로를 끌 수 있는 기능을 제공한다. 이를 Spatial Multiplexing Power Save Mode라고 한다.

 

- 802.11 Media Access Control

무선 네트워크에서는 충돌을 감지하는 것이 802.3 등의 유선 네트워크보다 훨씬 더 어렵다. 본질적으로 무선 매체는 단방향(simplex)로 작동하며, 여러 송신자가 동시에 전송하는 상황을 막기 위해 전송을 중앙 집중 혹은 분산 식으로 조정해야한다. 802.11 Standard는 무선 매체를 공유하기 위한 3가지 접근 방식 (PCF, DCF, HCF)를 제공한다.

 

1. Point Coordination Function : 구현은 선택 사항이며 널리 사용되지 않는다. 따라서 생략

2. Distributed Coordination Function : 모든 STA와 AP에서 필수적으로 구현해야하는 기능이다.

3. Hybird Coordination Function : 802.11e에서 QoS와 함께 도입되었다.

 

DCF는 경합을 기반으로하는 CSMA/CA의 한 형태이다. 이는 Infrastructure, ad hoc 모드 둘 다 사용한다.

CSMA/CA의 작동 방식은 다음과 같다.

a. STA는 medium이 free인지 확인하기 위해 listen 동작을 수행한다.

a-1. medium이 free라면 전송 기회를 가진다.

a-2. medium이 busy라면 전송을 랜덤한 시간 동안 backoff한 후 다시 a 과정을 반복한다.

(이 과정은 802.3의 CSMA/CD에서 전송 시작 후 충돌을 감지한 STA가 jamming signal을 브로드캐스트하며 전송을 backoff하는 것과 비슷하다.)

=> 이 규칙을 기본으로 하되, 특정 STA나 프레임 유형에 대해 priority access를 제공하는 기능을 서비스할 수도 있다.

추가적으로 RTS/CTS 신호를 사전에 주고 받아 안전하게 확보를 하는 방법도 있다. 자세한 DCF 절차에 대해 알아보자.

 

802.11의 carrier sense(listen)는 물리적 방식(CCA)과 가상 방식(NAV) 모두에서 수행된다. 

a. STA가 데이터 전송 준비를 마치면 DIFS라고 불리는 대기 시간을 기다린다. 이를 통해 우선 순위가 높은 STA가 채널에 접근할 수 있도록 허용하는 역할을 한다.(ex : ACK 신호)

a-1. DIFS 기간동안 채널이 사용중인 것으로 감지되면, STA는 대기 시간을 다시 시작한다.

a-2. 채널이 idle이라면 전송을 시도하려는 송신 STA는 CA및 backoff 절차를 시작한다.

이 과정에서 ACK은 전송이 성공적이었는지 확인을 시켜주는 역할을 하며, 이를 수신할 시 송신 STA는 CA 절차를 종료한다. 만약 ACK을 수신하지 못했을 경우 STA는 다른 타이밍을 사용하여 Backoff 절차를 다시 시작한다.

 

- Virtual Carrier Sense, RTS/CTS, and the Network Allocatrion Vector (NAV)

802.11 MAC 프로토콜에서 가상 Carrier Sense 매커니즘은 MAC 프레임의 Duration 필드를 관찰함으로써 작동한다.

Duration 필드는 해당 프레임을 전송하는 동안 어느정도 medium이 busy할지를 담고 있다. 이 필드는 RTS/CTS 프레임뿐만 아니라 일반적인 데이터 프레임에도 포함되어 있다.

송신기는 frame length, transmit rate 그리고 PHY characteristics(rate 등)에 기반하여 Duration을 세팅한다. 각 STA는 NAV(Network Allocation Vector)라는 로컬 카운터를 유지하며, 이는 현재 frame이 medium을 사용하는 동안 medium이 busy할 것으로 예상되는 시간을 추정한다. 이를 통해 각 STA는 다음 전송 시도까지 기다려야할 시간을 알 수 있다.

만약 자신이 유지하는 NAV보다 다른 STA에서 수신한 Duration이 클 경우 STA는 자신의 NAV 값을 새로운 값으로 업데이트한다. NAV가 0이 아닌 동안 medium은 busy한 것으로 간주된다. 만약 ACK을 수신할 시 NAV는 0으로 재설정된다. NAV값이 0이 되면 medium이 free가 된 것으로 간주한다.

 

- Physical Carrier Sense (CCA)

 각 802.11 PHY 사양은 에너지와 파형 인식을 기반으로 채널이 비어있는지 여부를 평가하는 기능을 제공해야한다. 이 기능을 Claer Channel Assessment라고 하며 구현은 PHY 계층에 따라 달라진다. CCA는 NAV와 함께 사용되어, STA가 전송하기 전에 대기해야하는지를 결정하는데 사용된다.

 

- DCF Collision Avoidance / Backoff Procedure

채널이 비어있을 가능성이 높다고 판단되면(Ex : NAV가 0이 되었으며 CCA가 채널 사용 중을 감지하지 않았을 때), STA는 전송 전에 접근을 연기(defer)한다. 그 이유는 여러 STA가 채널이 비워지기를 기다리고 있을 수 있고, 동시에 idle을 확인하고 전송을 시도할 수 있기 때문이다. 따라서 각 STA는 전송 전에 backoff time을 계산하고 접근을 그만큼 연기하는 것이다.

Backoff time은 랜덤 숫자와 slot time의 곱으로 계산된다.(slot time은 PHY 계층마다 다르다.) 랜덤 숫자는 [0, CW]에서 균등 분포를 따르는 값으로 선택되며 여기서 CW(Contention Window)는 기다릴 slot time의 개수를 나타내는 정수이다. CW 값은 전송 시도가 반복될 수록 2의 제곱으로 증가하며, 정해진 최대치 max 값이 존재한다. 이 동작은 802.3의 CD 이후 백오프 절차와 비슷하다. 그러나 무선 환경에서는 동일한 장비에서 송신기, 수신기가 동시에 작동한다. 또한 자신의 전송 이외에 다른 전송을 감지하는 것이 어려우므로 CD가 쉽지 않다. 따라서 CA를 대신 사용하는 것이다.

또한, 프레임이 성공적으로 전달되었는지 확인하기 위해 Unicast 프레임에 대해 ACK를 수신한다. 올바른 프레임을 수신한 STA는 SIFS라는 짧은 시간 동안 기다린 후, Medium의 상태와 관계 없이 ACK를 전송하기 시작한다. 이렇게 동작해도 문제가 없는 이유는 SIFS 값은 항상 DIFS보다 작기 때문에 ACK를 생성하는 STA가 채널에 대한 우선 접근 권한을 가지기 때문이다. 송신 STA는 ACK 프레임을 일정 시간 기다리다가 수신하지 못하면 전송이 실패했다고 판단한다. 전송이 실패하면 앞에서 언급한 Back off 절차를 다시 시작하고 해당 프레임을 재전송한다.(RTS/CTS를 일정 시간 내에 수신하지 못해도 동일하게 작동한다.)

정리하자면, STA가 NAV가 0이 되고 CCA를 통해 채널이 idle임이 확인되면 우선 DIFS 동안 대기해 SIFS 프레임들이 전송될 시간을 마련한다. 이후 각 STA 별로 랜덤하게 가지는 backoff time 만큼 자신의 backoff timer를 세팅한다. backoff timer는 채널이 idle 상태일 때만 줄어든다. DIFS가 지나고, backoff timer도 0이 되면 STA는 데이터를 전송하는 것이다. 만약 ACK을 받지 못하면 다시 백오프 타이머를 설정하고 시도를 반복하는 것이다. (DIFS는 최초 전송 1회에서만 대기한다.)

 

- HCF and 802.11e/n QoS

802.11e, Wi-Fi QoS, WMM이라는 용어로 불리는 802.11 Standard의 5, 6, 7, 9 조항은 멀티미디어 어플리케이션(VoIP 등)을 지원하기 위해 802.11 MAC 계층과 시스템 인터페이스에 변경 사항을 적용한 QoS 기능을 다룬다.

QoS 기능은 복잡한 네트워크에서 효과적일 수 있다. (Block ACK 등) 또한 VoIP, 스트리밍과 같은 서비스에서 낮은 jitter를 필요로 하면 QoS를 사용해야한다.

QoS 기능은 QoS Station(QSTAs), QoS Access point(QAPs), QoS BSS(QBSS) 라는 용어를 사용한다. QoS를 이용하면, HCF라는 새로운 형태의 조정 기능이 도입되어 경쟁 기반 접근과 제어된 채널 접근을 지원할 수 있다. (보통 경쟁 기반 접근 EDCA가 더 많이 이용된다.) 추가적으로 Admission Control도 지원되며 이를 이용해 네트워크 부하가 높을 시 연결 자체를 거부할 수 있다.

 

* QAM, BPSK, QPSK 등의 변조 방식과 Data rate, 채널의 주파수 간섭 피하기, 각 나라별 사용 채널 대역폭 등의 내용은 생략한다. Richard stevens의 TCP/IP Illustrated의 챕터 3을 확인해보면 해당 내용이 있다.


- VI. Point-to-Point Protocol (PPP)

PPP는 serial link를 통해 IP datagram을 전송하는 방법이다. 저속의 dial-up 모뎀부터 고속 optical link들까지 폭넓게 사용된다. 해당 프로토콜은 DSL 서비스 제공업체들에 의해 널리 퍼졌으며 첫 IP 주소, DNS와 같은 internet system parameter를 할당하는데도 사용된다. PPP는 단일로 구성된 프로토콜이 아닌 여러 프로토콜의 집합으로 간주해야한다. 기본적으로 PPP는 링크를 설정하는 방법인 LCP(Link Control Protocol)을 지원한다. LCP가 기본 링크를 설정한 이후 NCP(Network Control Protocol)가 다양한 프로토콜(IPv4, IPv6 등)에 대한 Network layer를 설정하는데 사용된다. 또한 다양한 압축 및 암호화 제어도 프로토콜에 포함된다.

 

- Link Control Protocol

PPP의 LCP 부분은 Point-to-Point link를 통해 low-level의 two-party communication을 설정하고 유지하는데 사용된다.

따라서 PPP는 단일 링크의 두 종단만 처리하면 되므로 802.3, 802.11의 MAC 계층 프로토콜 처럼 공유 자원(medium 등)에 대한 접근을 처리하는 규칙이 필요없다. PPP는 기본 point-to-point link에 최소한의 요구 사항만 부과한다.

1. 링크는 양방향 통신을 지원해야한다.(LCP는 ACK 응답을 사용한다.)

2. 링크는 Asynchronous 또는 Synchronous 둘 다 지원해야한다.

3. LCP는 High-Level Data Link Control(HDLC) 프로토콜을 기반으로 한 간단한 비트 수준 프레임 형식을 사용해 링크를 설정한다.

HDLC 기반 프레임 형식

PPP의 프레임 형식은 그림과 같이 두 개의 1 바이트 Flag 필드로 둘러싸여있다. 이 Flag 필드는 고정된 값(0x7E)을 가지며 Point-to-Point 링크의 양 끝단에 있는 두 STA가 프레임의 시작과 끝을 인식하게 하는 역할을 한다. 그러나 이 방법을 사용하게 되면 Flag 내부 프레임에 0x7E라는 표현을 사용할 수 없게 되는 문제가 발생한다. 이 문제는 링크가 Async.인지 Sync.인지에 따라 처리 방법이 다르다.

1. Async 링크 일 시, 프레임 내에 0x7E가 나타나면 이를 2바이트 시퀀스 0x7D5E로 대체해서 표현한다. 여기서 0x7D는 PPP escape char.이다. 만약 프레임 내에 0x7D가 나타나는 경우 이를 0x7D5D로 대체한다.

(즉, 수신 측에서는 0x7D5E를 0x7E로, 0x7D5D는 0x7D로 복원한다.)

2. Sync 링크 일 시, Flag charcter가 01111110이므로 1이 연속해서 6개 나타나는 패턴이다. 따라서 5개의 연속된 1 비트가 나타나면 이 뒤에 0 비트를 삽입하여 Flag character와 충돌을 막는다. 수신 측에서는 연속된 5개의 1 비트가 나타나면 다음 비트 0을 제거하여 원래 데이터를 복원한다.

더보기

* Async 통신은 문자 단위로 데이터를 처리한다. 각 DU(문자)는 독립적으로 전송되며, 문자 단위의 경계를 확인하기 위해 추가적인 신호 비트(Start/Stop)이 필요하다. 또한 동기화 구간이 없어 비트 단위로 세밀한 인식이 어렵다. 따라서 Byte 문자 단위로 신호를 인식한다.

=> Byte Stuffing은 이러한 문자 단위의 구조를 기반으로 쉽게 구현할 수 있다. (데이터 크기가 정의되어있지 않기 때문이다.) 또한 비동기 통신은 비트 단위가 아닌 바이트 단위로 작업하므로 Byte stuffing을 사용한다.

 

* Sync 통신은 비트 스트림 단위로 데이터를 처리한다. 즉, 데이터가 연속적으로 스트리밍되며 별도의 Start/Stop 비트 없이 프레임 구조만으로 경계를 구분한다. 따라서 문자 단위의 구조가 없어 비트 삽입(Bit Stuffing)으로 데이터 구조를 유지하며 문제를 해결한다.

첫 Flag 필드 다음에, Address 필드와 Control 필드를 작성한다. HDLC에서 Address 필드는 특정 STA를 지정하는 데 사용된다. PPP는 1대1 통신을 가정하므로 목적지는 고정이다. 그래서 이 필드는 항상 0xFF로 정의된다. 또한 Control 필드는 프레임 시퀀싱과 재전송 동작을 나타내는 데 사용된다. 그러나 이러한 Link layer의 신뢰성 기능은 PPP에서는 일반적으로 구현되지 않으므로, Control 필드는 고정 값 0x03으로 설정된다.(사실상 목적지 필드와 Control 필드는 사용하지 않지만 기존에 널리 사용되던 HDLC 프레임 구조에 포함되어있기 때문에 호환성을 위해 넣는다.)

이후 Protocol 필드는 전달되는 데이터의 유형을 나타낸다. 기존 HDLC 사양을 준수하기 위해, 프로토콜 번호 양식은 2가지 조건을 지켜야한다.

1. 최상위 바이트의 LSB는 0이어야한다.

2. 최하위 바이트의 LSB는 1이어야한다.

16진수 기준 0x0000~0x3FFFF의 같은 네트워크 계층 프로토콜을 나타내며, 0x8000~0xBFFF 범위의 값은 NCP, 0x4000~0x7FFF는 low volume 프로토콜에 사용된다. 0xC000~0xEFFF 범위의 프로토콜 값은 LCP와 같은 control protocol을 나타낸다. 효율성의 측면에서 연결 이전 합의가 된단 전제하에 Protocol 필드가 1바이트로 압축될 수 있다. 이는 0x0000~0x00FF 범위의 프로토콜 번호만을 사용하는 경우에 적용된다. (LCP 패킷은 예외로 항상 2바이트 비압축 형식 활용)

PPP 프레임의 마지막 부분에는 FCS(Frame Check Sequence)가 포함된다. 이는 10001000000100001를 Generator polynomial로 사용하는 CRC16이며, FCS 필드, Flag 바이트 제외 byte/bit stuffing이 일어나기 전 프레임 전체를 검사한다. 

 

- LCP Operation

LCP format

LCP는 PPP 형식을 상속하여 구현하는 형식을 지니고 있다. PPP Protocol 필드에서 LCP의 값은 항상 0xC021이다. 

모호성을 제거하기 위해 이 부분은 압축될 수 없다. 

Ident field는 LCP 요청 프레임을 전송한 송신자가 제공하는 번호이다. 이는 Seq number로써 각 메시지가 전송될 때마다 증가한다.응답(ACK,NACK,REJECT)을 생성할 때 이 필드는 요청에 포함된 Ident 값을 복사하여 응답 패킷에 삽입한다. 이를 통해 요청 송신자측은 식별자를 비교해 해당 요청에 대한 응답을 식별할 수 있다.

Code 필드는 요청하거나 응답하는 작업의 유형을 나타낸다. (ex : configure-request(0x01), configure-ACK(0x02)...) 일반적으로 ACK 메시지는 옵션 집합의 수락을 나타내며, NACK은 일부 거부와 제안된 대안을 나타내고, REJECT는 완전히 거부를 나타내는 응답이다.

Length 필드는 LCP 패킷의 길이를 바이트 단위로 나타내며, 링크의 최대 수신 단위(MRU)를 초과할 수 없다.

 

LCP의 주요 작업은 P2P link를 최소한도로 활성화하는 것이다.

Configure message는 링크 양쪽 끝에서 기본 구성 절차를 시작하고 연결 옵션을 합의하도록 하는 절차이다.

Termination 메시지는 작업이 완료되었을 때 링크를 정리하는데 사용한다. 이외에 몇가지 기능을 더 제공한다.

1. Echo Req/Rep : 링크가 활성 상태일 때 피어를 점검하기 위해 언제든지 LCP에 의해 교환되는 메시지

2. Discard Request : 링크 성능 측정을 위해 사용되며, 패킷을 응답 없이 삭제하도록 피어에게 지시한다.

3. Identification 및 Time-Remaining : 관리 목적으로 사용된다. (피어 시스템의 유형을 알거나 링크 유지 기간을 표시하는데 사용)

 

과거에 P2P link에서 흔히 발생한 문제는 원격 스테이션이 Loopback 모드에 있거나 looped 상태라고 불리는 경우에 있는 것이었다. 전화 회사의 광역 데이터 회선은 종종 테스트를 위해 Loopback 모드로 설정되곤 했다. 이 경우, 한쪽에서 전송된 데이터가 단순히 다른 쪽에서 반환되기만 한다. 이러한 방식은 회선 테스트로는 유용하나 데이터 통신 측면에서는 도움이 되지 않는다. 따라서 LCP는 발신자가 선택한 임의의 숫자인 Magic number를 전송하여 동일한 메시지 유형으로 즉시 반환되는지를 확인하는 방법을 사용한다. 매직 넘버가 바로 반환되면 해당 회선이 루프 상태로 감지된다.

PPP 링크가 어떻게 설정되고 옵션이 협상되는지 더 잘 이해하기 위해, 상단의 그림을 참조하자. (Peer는 양쪽 링크 끝에 있다.)

링크는 기본 프로토콜 계층이 연결 활성화를 알리면 설정된 것으로 간주된다. 이 기간 동안 링크 품질 보고서와 확인 메시지의 교환을 포함한 링크 품질 테스트도 수행될 수 있다. 링크가 인증을 요구하는 경우는 Auth를 위해 추가 교환이 필요할 수 있다. 링크는 기본 프로토콜이나 하드웨어가 연결이 중단되었음을 알리면 링크 종료 요청을 전송하고 피어로부터 종료 ACK을 받은 뒤 종료된다.

 

- LCP Options

LCP는 하나 이상의 NCP에서 사용할 링크를 설정하며 여러 옵션을 협상할 수 있다. 일반적인 2가지 옵션이 있다.

1. Asynchronous Control Character Map(Asyncmap) : PPP가 작동할 때 이스케이프 처리해야하는 제어 문자(0x00 ~ 0x1F)를 정의한다. 이 옵션은 제어 문자가 기본 HW의 동작에 영향을 줄 수 있는 경우에 사용된다. 예를 들어, XON/XOFF 문자를 사용하는 소프트웨어 흐름 제어가 활성화된 상태에서 XOFF가 이스케이프 없이 링크를 통과하면 HW는 XON이 올 때까지 중단되게 된다.

더보기

문자를 이스케이프 처리한다는 것은 해당 문자의 실제 값을 전송하지 않고 대신 PPP 이스케이프 문자 0x7D를 앞에 추가하고 원래 제어 문자에 0x20을 XOR 연산하여 생성된 값을 함께 전송하는 것을 의미한다. 예를 들어 0x13은 0x7D33으로 전송된다.

PPP는 Length 필드가 없고 seial line은 일반적으로 프레임 구성을 제공하지 않으므로, 이론적으로 PPP Frame 길이는 직접적인 제한이 없다. 그러나 실제로는 MRU(Maximum Receive Unit)을 설정하여 최대 프레임 크기를 설정하는 경우가 많다.

호스트가 MRU 옵션을 지정하면, 피어는 MRU 옵션에 제공된 값보다 긴 프레임을 전송하지 않도록 요청받는다. MRU 값은 데이터 필드의 길이를 바이트 단위로 나타내며, FCS 등 PPP의 다른 오버헤드를 포함하지 않는다. 또한 MRU는 프레임 크기에 대한 엄격한 제한이라기보다 피어에게 패킷 크기를 선택할 때 참고할 권장값에 가깝다.

작은 패킷이 큰 패킷과 동일한 PPP 링크에서 전송되는 경우, 큰 패킷이 저대역폭 링크의 대부분의 대역폭을 점유할 수 있다. (작은 패킷의 전달 지연). MRU를 작게 설정하면, 오버헤드가 증가하는 대신 이러한 문제를 완화할 수 있다.

 

PPP는 링크 품질 피드백 정보를 교환하기 위한 매커니즘도 지원한다. Option negotiation 과정에서 특정 품질 프로토콜에 대한 요청을 포함하는 설정 메시지를 보낼 수 있다. 16비트 크기의 옵션 필드는 특정 프로토콜을 지정하는데 사용되며, 가장 일반적인 Link Quality Report(LQR)을 포함하는 RFC1989를 사용한다. 

LQR이 활성화되면 상대 피어는 일정한 주기로 LQR을 제공하게 된다. 요청된 최대 LQR 간격은 1/100초 단위로 표현된 32비트 숫자로 설정 옵션에 포함된다. LQR에는 매직 넘버, 전송된 패킷 및 바이트 수, 수신된 패킷 및 바이트 수, 오류가 있는 수신 패킷 수, 폐기된 패킷 수, 교환된 LQR 총 수 정보가 포함된다. 이러한 LQR은 PPP 링크가 Establish 상태에 도달한 이후 요청될 수 있다. 

 

또한 대부분의 PPP implementation은 Call back 기능을 지원한다. 일반적ㅇ니 I : Introduction

본 글에서는 OSI 7 계층 중 첫번째 계층에 해당하는 Link Layer에 관련한 내용을 다룬다.

 

이더넷과 Wi-Fi Link Layer를 사용하는데 관련된 세부 사항, Point-to-Point Protocol(PPP)가 사용되는 법, 다른 프로토콜(Link Layer의 상위 Layer)에 Link Layer 프로토콜을 포함시키는 tunneling 기술에 대해 알아볼 것이다.

 

대부분의 Link Layer Protocol은 해당 PDU(Protocol Data Unit)가 네트워크 하드웨어를 통해 전송되기 위해 어떻게 구성되어야 하는지를 설명하는 관련 프로토콜 형식이다. Link Layer의 PDU는 일반적으로 Frame(프레임)이라고 부르며, 차후 다루게 될 Packet, Segment와는 다른 단위이다. 프레임 형식은 일반적으로 몇 바이트에서 몇 키로바이트에 이르는 가변 길이 프레임을 지원한다. 이 범위의 상한선을 MTU(Maximum Transmission Unit)이라고 한다.

 

- II : Ethernet and the IEEE 802 LAN/MAN Standards

이더넷이라는 표준은 1980년에 처음 발표된 후 IEEE가 802.3으로 채택한 프로토콜이다. 이러한 네트워크는 보통 상단의 그림과 같이 표현되고는 한다.

 

여러 Station이 동일한 네트워크를 공유하기 때문에, 이더넷에는 각 이더넷 네트워크 인터페이스에 구현된 분산 알고리즘이 포함되어 있어 Station이 데이터를 전송 가능한 시기를 제어한다. 이 방법을 "CSMA/CD"라고 부르며, 특별한 동의나 동기화 없이 컴퓨터들이 케이블을 사용 가능하도록 중재한다. 이러한 단순성 덕분에 이더넷은 대중적인 프로토콜이 되었다.

 

CSMA/CD를 사용하면, Station은 먼저 네트워크에서 현재 전송 중인 신호가 있는지 확인하고, 네트워크가 비어 있을 때 자신의 프레임을 전송한다. 이것이 프로토콜의 "carrier sense" 부분이다. 다른 스테이션이 동시에 전송을 시도하면, 이로 인해 중첩된 전기 신호가 충돌로 감지된다. 이 경우, 각 Station은 다시 전송을 시도하기 전에 개별적으로 랜덤한 시간만큼 대기하게 된다. 이 대기 시간은 충돌이 감지될 때마다 길이가 2 배가 되는 균등 확률 분포에서 선택된다.

 

이렇게 전송을 시도하는 Station이 만약 여러번 전송 실패를 하게 된다면, Time out이 발생하게 된다. 즉, CSMA/CD는 각 Station이 순차적으로 네트워크 사용 기회를 얻는 방식으로, 전송이 여러 번 실패할 경우에는 Time out이 발생한다. 이 프로토콜에서는 한 시점에 하나의 프레임만 네트워크에 존재하게 되며, 이러한 접근 방식을 MAC 프로토콜이라고 한다. MAC 프로토콜은 네트워크에 접근하는 방식을 정의하며, Race 기반과 Time slot 할당 기반과 같은 형태가 있다.

 

초기에는 3Mb/s의 속도로부터 시작한 이더넷은 100Mb/s(Fast Ethernet)으로 늘어났고, 이로 인해 Race 기반 MAC 프로토콜의 인기는 줄어들었다.(전송속도가 빨라지며 예측하여 보내는 것이 충돌 후 대처하는 것보다 효율적이게 됨.)

 

Station-Swtich 간의 경로는 개별 사용

대신, 각 LAN station 간의 배선은 공유되지 않고 별도의 경로를 제공하는 Star topology로 전환되었다. 이는 이더넷 스위치를 통해 구현된다. 즉, 충돌 고려가 필요 없는 전용 경로를 Switch를 통해 제공하는 것이다.

 

현재, Switch는 일반적으로 사용되며 각 Ethernet Station이 데이터를 동시에 송수신할 수 있는 기능을 제공한다.(이를 full-duplex Ethernet 이라고 한다.) 스위치가 PDU를 어떻게 처리하는지는 이후에 더 자세히 다루겠다.

 

오늘날 인터넷에 접속하는 방법 중 가장 대중적인 것은 무선 통신이다. Wireless-LAN(WLAN)에서 가장 흔한 것은 Wireless Fidelity, 즉 Wi-Fi라는 IEEE Standard이다. Wi-Fi는 때때로 "무선 이더넷" 또는 802.11이라고 불린다. 따라서 Ethernet network에서 TCP/IP가 사용하는 대부분의 기능은 Wi-Fi network에서도 사용된다. 

 

 

 

- The IEEE 802 LAN/MAN Standards

 

IEEE에서는 802로 시작하는 표준이 LAN과 MAN의 작동 방식을 정의한다. 가장 인기 있는 802 Standard에는 802.3(Ethernet), 802.11(WLAN/Wi-Fi)가 포함된다. 802.2 Standard는 여러 네트워크의 프레임 형식에서 공통적으로 사용되는 LLC(논리 링크 제어) 프레임 헤더를 정의한다. LLC는 Link Layer의 "하위 계층"으로 대부분의 네트워크에서 동일하다. 그러나 MAC은 각 네트워크 유형에 따라 다를 수 있으며 예를 들어 유선 이더넷은 CSMA/CD를 사용하나 WLAN은 CSMA/CA를 사용한다. (Wi-Fi는 무선 네트워크의 특성상 송신 스테이션이 데이터 전송 중 수신이 매우 어렵다.)

 

Frame 형식은 비교적 최근까지 본질적으로 거의 동일하게 유지되어왔다. 이제 그 세부 사항에 대해 알아보자.

 

 

 

- The Ethernet Frame Format

 

모든 802.3 Frame은 공통 형식을 기반으로 한다. 최초의 명세 이후, 프레임 형식은 추가 기능을 지원하기 위해 발전해왔다.

 

그림은 현재의 이더넷 프레임 레이아웃과 IEEE에 의해 새로 도입된 용어인 IEEE Packet과의 관계를 보여준다.

 

Ethernet frame은 Frame이 도착하는 시점을 감지하고, 인코딩된 비트 사이의 시간을 확인하기 위해 Preamble 영역으로 시작한다. Ethernet은 Asynchronous LAN (각 이더넷 인터페이스 카드에 정확히 동기화된 physical clock이 존재하지 않음.)이기 때문에 인코딩된 비트 사이의 간격이 인터페이스 카드마다 약간 다를 수 있다. Preamble은 수신 측이 "Clock recovery"를 할 수 있도록 하는 인식 가능 패턴(0xAA 등)을 SFD(Start Frame Delimiter)가 스캔될 때까지 사용한다. 보통 SFD는 0xAB이다. 

 

0xAA는 10101010 이다. 이 패턴을 통해 어느 길이의 high가 1인지, 어느 길이의 low가 0인지를 학습할 수 있다. 즉, 송신측의 주기와 타이밍을 학습한다는 것이다.

 

그 다음은 DST와 SRC가 이어진다. 각각 48비트(6바이트) 크기인 이 주소 필드는 여러 다른 이름으로도 불린다. (MAC 주소, Link Layer 주소, 802 주소, 물리 주소...) 이더넷 프레임의 목적지 주소(DST)는 하나 이상의 Station을 지정할 수 있으며 이를 Broadcast, Multicast라고 한다. Broadcast는 주로 ARP(주소 결정 프로토콜)에서 네트워크 계층 주소(IP)를 Link Layer 주소(MAC 주소)로 변환할 때 사용된다. Multicast 기능은 ICMPv6 프로토콜에서 사용되며 이를 통해 네트워크 계층 주소와 Link Layer 주소 간의 변환이 이루어진다.

 

 

 

이어서 Type Field가 위치하며, 이 Field는 Length Field 역할도 동시에 한다. 일반적으로, 이 필드는 헤더 뒤에 오는 데이터의 유형을 식별한다. TCP/IP 네트워크에서 자주 사용되는 값으로는 IPv4, IPv6, ARP가 있다. 여기서 0x8100은 Q-Tag된 프레임(즉, 801.1q 표준에 따라 가상 LAN 또는 VLAN ID를 포함할 수 있는 프레임)을 나타낸다. 기본 이더넷 프레임의 크기는 1518 바이트지만, 최신 표준은 이 크기를 2000바이트까지 확장시켰다.

 

 

 

그 후에는 Frame의 데이터 영역 또는 Payload 영역이 위치한다. 이 부분은 IP datagram과 같은 상위 Layer의 PDU가 배치되는 영역이다. 전통적으로 이 영역은 1500 바이트가 고정이었으며, 이는 이더넷의 MTU를 의미한다. 대부분 시스템은 1500 byte MTU를 이용하나 필요에 따라 더 작게 사용할 수도 있다. 이후 최소 길이 요구 사항을 만족시켜야할 경우 Padding을 한다.

 

 

 

마지막으로는 Frame의 무결성 검사를 제공하는 필드이다. 끝 부분의 CRC 필드는 32비트(4 바이트)이다.

 

오류가 있는 데이터 전송을 감지하기 위해 n-비트 CRC를 사용할 때, 검사할 메시지에 먼저 n개의 0 비트가 추가되어 확장된 메시지를 형성시킨다. 이 후, 확장된 메시지는 modulo-2 나눗셈을 통해 Generator polynomial이라는 (n+1) 비트 값으로 나눈다. 메시지의 CRC 필드에 배치된 값은 이 나눗셈의 나머지의 1의 보수이다.(몫은 버린다.)

 

ITU는 CRC4 generator polynomial으로 10011을 정했다. 예를 들어 16비트 메시지 1001111000101111을 전송하려면, 그림과 같이 긴 이진 나눗셈을 사용하여 나머지를 계산한다. 이후 1111이라는 값을 1의 보수를 통해 0000으로 바꾸어 FCS에 배치하는 것이다. 수신자가 프레임을 수신하여 데이터에 대해 똑같이 Generator polynomial로 나눗셈을 하고, FCS 필드의 값의 일치를 확인한다.(계산된 CRC 값과 나머지를 더해 0이 되어야한다.) 검사 결과 0이 아니면, 프레임이 전송 중 손상되었다는 의미이다. 

 

 

 

- Frame Sizes

 

Ethernet frame의 최소 크기는 64바이트이며, 이를 충족하기 위해 데이터 영역(Payload)의 최소 길이는 48바이트여야한다.(No tag) 만약 Payload가 이 길이보다 작으면, 패딩이 필요하게 된다.

 

원래 10Mb/s Ethernet에서는 CSMA/CD가 활용되므로, 송신 Station이 충돌을 탐지하고 이를 감지한 프레임이 어떤 것인지 알아차릴 수 있도록 최소 프레임 크기가 중요했다. 이더넷 네트워크의 최대 길이는 2500m로 제한하였고, 구리선에서 전자의 전파 속도는 약 0.77c 이다. 10Mb/s 속도에서 64바이트 Frame의 전송 시간은 약 51.2 µs 이다. 따라서 네트워크 최대 케이블 길이가 2500m일 때, 두 Station 간의 최대 왕복 거리는 5000m이고, 송신 중인 프레임의 마지막 비트가 이전에 송신한 프레임이 최대 거리 수신기에 도달할 때 아직 송신 중이게 된다. 이 경우, 충돌이 발생하면 Station은 현재 전송 중인 프레임과 연관되었음이 확실해진다.

 

 

 

충돌이 감지되면, 잼 신호를 다른 Station에게 보내고, 다른 Station들은 랜덤 이진 지수 Backoff 절차를 시작하여 충돌을 피하도록 한다.

 

전통적인 이더넷의 최대 프레임 크기는 1518바이트이다.(4바이트의 CRC와 14바이트의 헤더 포함) 이 값은 충돌 발생시 감당가능한 부하를 의미한다. 만약 프레임에 오류가 포함되어 수신 시 이를 파악한다면, 문제를 해결하기 위해 1.5KB만 재전송하면 된다. 이를 뛰어넘는 더 큰 메시지를 보내려면 단편화 작업이 필요하게 된다. 이는 Network Layer에서 적용되므로 나중에 서술한다.

 

 

 

- 802.1p/q: VLANs and QoS Tagging

 

스위칭 이더넷의 사용이 증가하면서 같은 Ethernet LAN에서 한 사이트의 모든 컴퓨터를 상호 연결하는 것이 가능해졌다. 

 

이렇게 함으로써 모든 호스트가 IP 및 기타 Network layer 프로토콜을 활용하여 직접 다른 호스트와 통신이 가능하게 되며 스위치에서 자체적인 Adapter 역할을 하여 추가 설정이 필요하지 않게되었다. 이러한 기능은 많은 Station을 같은 Ethernet에 배치할 때의 장점 중 일부이다.

 

이러한 다목적 스위칭 이더넷 네트워크의 규모를 크게 운용할 때 발생 가능한 몇 가지 문제를 해결하기 위해, IEEE는 802.1q로 알려진 Standard에서 VLAN 기능을 추가하여 802 LAN Standard를 확장했다. VLAN을 따르는 이더넷 스위치는 호스트들 간의 트래픽을 공통의 VLAN으로 격리시킨다. 이 격리로 인해 같은 스위치에 연결되어있지만 다른 VLAN에서 작동하는 두 호스트는 트래픽이 흐르기 위해 라우터가 필요하다. 따라서 스위치와 라우터를 결합한 장치들이 만들어졌으며, 최근에는 라우터의 성능이 VLAN 스위칭의 성능에 맞먹을 정도로 개선되었다.

 

* LAN이란 동일한 IP 대역과 동일한 Subnet Mask를 활용하여 ARP가 닿는 모든 범위를 뜻한다.

 

* VLAN은 물리적으로 같은 스위치나 네트워크 장비에 연결된 장치들을 논리적으로 다른 네트워크 세그먼트로 나누는 기술이다. 즉, 하나의 스위치에서 여러 개의 LAN을 관리하게 되는 것이다. 서로 다른 VLAN에 존재하는 호스트들이 통신하기 위해서는 라우터 혹은 Layer 3까지 지원하는 스위치를 통해야하며, 이를 위해 스위치와 라우터의 기능을 결합한 장치가 개발되었다.

 

* 다목적 스위칭 이더넷 네트워크를 큰 규모 단일 LAN으로 굴리면, 한 ARP Request가 브로드캐스트 되는 양이 높아질 것이다. 이는 문제가 된다. 그렇다고 여러개의 스위치를 구매하여 여러 LAN을 구성하는 것은 비용의 문제가 따른다.

 

Station과 VLAN 간의 매핑을 정의하는 방법은 여러가지가 있다. 첫번째는 포트 기반 VLAN 할당 방법이다. Station이 연결된 스위치 포트에 특정 VLAN을 할당하는 고정 방식이다. 따라서 해당 포트에 연결된 Station은 사전 할당된 VLAN의 멤버가 된다. 두번째 방법은 이더넷 스위치 네의 테이블을 사용하여 스테이션의 MAC 주소를 해당 VLAN에 매핑하는 MAC 주소 기반 VLAN이 있다. 이외에는 IP 주소를 기반으로 VLAN을 할당하는 방법도 존재한다.

 

다른 VLAN에 속한 Station들이 같은 스위치에 연결되어 있을 때, 스위치는 Station이 사용하는 이더넷 인터페이스와 관계없이 트래픽이 한 VLAN에서 다른 VLAN으로의 노출을 방지한다.

 

VLAN Trunking은 여러 VLAN을 하나의 물리적 연결을 통해 여러 스위치나 네트워크 장비 사이에서 전달할 수 있도록 하는 기능이다. 이것이 없다면 여러 VLAN은 각자의 포트로 대화했어야할 것이다. 이 기능을 지원하기 위해 필요한 것은 한 링크로 뭉쳐놓은 데이터가 원래는 어디 VLAN 소속이었는지를 알아내는 것이다. 이를 위해 VLAN 태그가 사용되며 이 태그는 12비트의 VLAN 식별자를 포함한다. 또한 이 태그는 QoS를 지원하기 위해 3비트의 우선순위를 포함한다.

 

대부분의 경우 관리자는 적절한 포트에 Trunking을 활성화하여 802.1p/q 프레임을 전송하도록 스위치 포트를 구성해야한다. Trunking port는 VLAN 기능이 있는 스위치 간의 연결에 사용된다. 또한 802.1p는 VLAN과 독립적으로 사용할 수 있어 VLAN 없이도 QoS는 활용이 가능하다. (VLAN ID 필드 0으로 설정.)

 

- III : Full Duplex, Power Save, Autonegotiation, and 802.1X Flow Control

이더넷이 처음 개발되었을 때에는, 공유 케이블을 사용하여 Half-duplex mode로만 작동했다. 즉, 데이터를 한 번에 한 방향으로만 전송할 수 있어서, 특정 시점에 하나의 Station만 프레임을 전송할 수 있었다. 그러나 Ethernet switch 개념으로 인해 네트워크는 더 이상 한 케이블을 모든 Station이 공유하지 않고, 여러 개의 링크 세트로 구성되게 되었다. 그 결과, 다수의 Station pair가 동시에 데이터를 교환할 수 있게 되었다.

 

또한, Full duplex로 작동하도록 수정되어 충돌 탐지를 할 필요가 없게 되었다. 이 변화는 이더넷의 물리적 길이를 확장할 수 있게 해주었다.

 

 

 

- Duplex Mismatch

 

Autonegotiation은 네트워크 장치가 이더넷 링크를 설정할 때 서로 최적의 속도와 duplex mode를 자동으로 결정하는 프로세스이다. 초기 링크를 설정하면, 각 장치는 Autonegotiation 신호를 주고 받으며 자신이 지원하는 속도와 Duplex mode를 광고한다. 그리고 그 중 최고의 설정으로 링크를 구성하고 데이터를 주고받는 것이다. 이는 이론적으로는 문제가 없다.

 

그러나 만약 양쪽 스테이션이 한 쪽이 Autonegotiation이 비활성화 되어있거나 서로 다른 duplex configuration으로 구성되어있다면, Duplex Mismatch가 발생할 수 있다. 이 경우 연결이 완전히 실패하지는 않지만 성능이 심각하게 저하될 수가 있다. Half duplex 쪽에서는 Full duplex가 송신하는 트래픽을 충돌로 감지할 수 있으며 이는 CSMA/CD의 작동을 활성화시킨다. 동시에 충돌을 유발한 데이터는 손실되어 TCP에서 재전송을 요구하게 한다.

 

 

 

- Link-Layer Flow Control

 

확장된 이더넷 LAN을 Full-duplex mode로 운영하고, 서로 다른 속도의 세그먼트를 연결할 때, 스위치가 일시적으로 프레임들을 저장해둬야할 수도 있다. 예를 들어, Station끼리의 송수신 트래픽 속도가 Station의 링크 속도를 초과하면, 초과한 만큼의 프레임을 따로 저장해둔다는 것이다. 이러한 상황이 오래 지속되어 스위치의 저장 공간을 넘게되면 해당 프레임들이 드롭될 수 있다. 특히 특정 목적지에 과도하게 송신 트래픽이 몰릴 때 이 현상이 심하게 된다.

 

이러한 상황을 완화하는 한 방법은 송신자에게 Flow control을 적용하여 전송 속도를 늦추는 것이다. 일부 이더넷 스위치와 네트워크 인터페이스는 스위치와 네트워크 인터페이스 카드 간에 특수 신호 프레임을 전송함으로써 Flow control을 구현한다. Flow control은 송신자에게 전송 속도를 늦추라는 신호를 보내는 것이지만, 각 프로토콜마다 구현 세부사항은 다 다를 수 있다. 802.3, 즉 이더넷은 PAUSE frame을 이용한다.

 

PAUSE 메시지는 MAC control frame에 포함되어있다. 이 메시지를 수신한 Station은 전송 속도를 줄이라는 권고를 받게 된다. 그리고 전송 중에 송신을 할 수 있어야하므로 Fully Duplex Link 에서만 활용된다. 이 PAUSE frame에서는 송신자가 전송을 재개하기 전에 대기해야하는 시간을 나타내는 hold-off 시간 값이 포함되어있다.

 

MAC control frame은 Length/Type field 바로 다음에오는 2바이트 opcode를 포함한다. 해당 바이트에는 송신자가 대기해야하는 시간을 인코딩한 2바이트의 값이 포함된다.

 

이더넷 계층의 Flow control을 사용하면 단점이 존재하고, 이로 인해 이더넷 계층의 Flow control은 일반적으로 사용되지 않는다. 그 이유는 스위치가 과부하 상태에 접어들면, 스위치가 모든 호스트에게 PAUSE를 날릴 것이고, 모든 호스트가 스위치가 안정될 때까지 멈출 것이다. 이 때, 만약 스위치의 메모리 사용이 특정 호스트에게 몰려있는 경우에도 모두가 멈춰야한다는 비효율성이다.

 

- IV. Bridges and Switches

IEEE 802.1d Standard는 Bridge의 동작을 규정하며, Switch는 본질적으로 고성능 Bridge이므로 이 Standard에 포함된다. Bridge 또는 Switch는 여러 개의 Physical Link Layer network 또는 Station 그룹을 연결하는데 사용된다.

 

그림을 참고하면, Swtich A와 B는 연결되어 확장된 LAN을 형성한다. 클라이언트들은 A에 연결되고, 서버는 B에 연결되어 있으며, 각 Switch의 포트는 참조를 위해 번호가 지정되어 있다.

 

Switch는 시간이 지남에 따라 MAC 주소를 학습하여 결국 각 Swtich가 모든 Station에 도달할 수 있는 포트를 알게 된다. 이러한 정보는 스위치 내의 테이블에 포트별(VLAN별)로 저장된다. 즉, 같은 LAN에 있으면 모두 서로의 위치를 알고 있는 것이다.

 

각 Station의 위치를 학습하는 방법을 생각해보자.

 

Switch(Bridge)가 처음 켜졌을 때는 DB가 비어 있으므로, 자신 외에는 어느 Station의 위치도 알지 못한다. Switch가 자신이 아닌 다른 Station을 대상으로 하는 프레임을 수신할 때마다, 해당 프레임이 도착한 포트를 제외한 모든 포트에 프레임의 복사본을 만들어 전송한다. 이 후, Switch는 프레임의 출발지 MAC 주소를 확인해 해당 MAC 주소가 연결된 포트를 저장한다. 

 

 

 

- Spanning Tree Protocol(STP)

 

Bridge는 단독으로 작동할 수도 있고, 다른 Bridge와 조합하여 작동할 수 있다. 2개 이상의 Bridge가 사용되는 경우 프레임이 루프될 가능성도 존재한다.

 

위의 그림에서 모든 Switch들이 막 켜지고, 따라서 DB가 전부 비어있다고 가정해보자. Station S가 포트 6을 따라 Switch B에 데이터를 전송한다면, Switch B는 DB에 S의 MAC 주소, Port 6을 기록하고, S의 프레임을 브로드캐스트한다. (3번 복제됨.) 이 프레임들을 받은 A는 2,3으로 복사해서 전송, C는 13,14로 복사해서 전송, D는 20,22로 복사해서 전송하게 된다. (6번 복제됨.) 그러면 각 Switch는 S로 가는 포트가 도대체 어느 포트인지 알 수 없게 진동하는 현상이 나타난다. 이를 억제하기 위해 사용되는 프로토콜이 STP이다.(현재는 기존의 STP가 RSTP로 대체되었다고 한다.)

 

STP는 각 Bridge에서 특정 포트를 비활성화하여 Topology loop을 방지하는 방식으로 작동한다. (즉, Bridge 간 중복 경로 허용하지 않음.) 즉, Bridge를 노드로, 링크를 간선으로 하는 Spanning Tree를 찾아내는 게 STP인 것이다. 각 Station 간 선택된 최소 간선들만 프레임 전달을 위해 사용하면 Cycle이 존재하지 않아 문제가 사라지게 된다. 이러한 Spanning tree는 각 Bridge에서 실행되는 분산 알고리즘을 통해 형성되고 유지된다. 당연히 STP도 Bridge가 사라지거나, 생기는 경우, 인터페이스 카드가 교체되거나 MAC 주소가 변경되는 상황에 대처해야한다. 이를 위해 BPDU라는 프레임을 교환한다.

 

보통 Spanning Tree를 구성 할 때 Link의 cost는 링크 속도에 반비례하는 값으로 설정하는 것이 권장된다.(물론 네트워크의 특성에 따라 다르게 구성할 수 있다.)

 

 

 

- Port States and Roles

 

STP의 기본 동작을 이해하기 위해서는 각 Bridge의 각 포트에 대한 State machine의 작동 방식과 BPDU의 내용을 이해해야한다. 각 Bridge의 포트는 5가지 상태가 존재한다. (Blocking, Listening, Learning, Forwarding, Disabled)

 

실선은 일반적인 전이이며 점선은 관리자 전이이다. 초기화 후, 모든 포트는 Blocking state이다. 이 상태에서는 주소 학습, 프레임 전달, BPDU 전송을 하지 않는다. 그러나 root bridge로의 경로에 포함될 가능성을 대비해 수신된 BPDU를 모니터링을 한다. 만약, Blocking 동안 Root bridge 경로에 포함이 되게 되면 Listening state로 전이한다. Listening state에서는 BPDU를 송수신 할 수 있지만, 학습하지는 않는다. 이후 Learning state로 전이하게 되면 데이터 전달을 제외한 모든 절차를 수행할 수 있게 된다. 15초 정도 뒤면 학습이 끝났다고 간주, Forwarding state로 들어가 프레임 전달을 시작한다.

 

포트 state machine에서 각 port는 구분되는 role을 가진다. role로는 root, designated, alternate, backup port가 존재한다. root port는 Spanning Tree에서 root bridge로 향하는 경로 끝에 있는 포트이다. Designated port는 포워딩 상태에 있으며 연결된 세그먼트에서 root로 가는 최소 비용 경로에 있는 포트이다. alternate port는 연결된 세그먼트에서 root로 갈 수 있지만, 비용이 더 높은 다른 포트이다. 이 포트는 포워딩 상태가 아니다. back up port는 동일한 bridge의 designated port와 같은 segment에 연결된 포트이다.

 

 

 

- BPDU Structure

 

BPDU는 항상 01:80:C2:00:00:00으로 전송되며 dST, SRC, L/T 필드는 이더넷 헤더의 일부이다. 3 바이트 LLC/SNAP 해더는 802.1에 의해 정의되며 BPDU의 경우 0x424203으로 설정된다. (옵션이다.)

 

Prot 필드는 프로토콜 ID 번호를 제공하며, Vers, Type는 STP인지 RSTP인지를 구분, Flags 필드는 Topology Change와 Topology Change Acknowledgment 비트를 포함한다. Root ID 필드는 프레임을 전송한 노드의 관점에서 Root bridge의 식별자를 제공한다. Bridge ID 필드에는 프레임을 보낸 bridge의 MAC 주소가 들어간다. 

 

Root Path Cost는 Root ID 필드에 지정된 Bridge에 도달하기 위한 경로 비용이다. PID 필드는 프레임이 전송된 포트 번호이다. (모든 ID 앞에는 우선순위 필드가 포함된다.) MsgA는 Message Age, MaxA는 Time out Message Age 이다. Hello Time은 Frame의 주기적 전송 간격을 나타낸다. Forward Delay 필드는 학습 및 Listening에 소요되는 시간이다.

 

Message Age 필드는 다른 시간 관련 필드와 달리 고정된 값이 아니다. Root Bridge가 BPDU를 보낼 때, 이 필드를 0으로 설정하고, 각 Bridge를 건널 때 마다 1씩 증가시키는 것이다. 만약 MaxA-MsgA = 0이면 타임아웃으로 discard된다. 루트 포트에서 다른 BPDU를 수신하지 못하고 이 시간이 지나면, root bridge는 죽은 것으로 판단되어 다른 root bridge election 과정을 시작한다.

 

 

 

- Building the Spanning Tree

 

STP의 첫 번째 작업은 root bridge를 선출하는 것이다. root bridge는 네트워크 내에서 가장 작은 id를 가진 bridge를 지정한다. bridge가 초기화될 때, 자신이 root bridge라고 가정하고 Root ID 필드를 자신의 ID로 채워 BPDU를 보낸다. 그러다가 더 작은 ID를 가진 Bridge를 발견하면 해당 ID를 넣어 구성한다. 또한 자신보다 작은 node id를 가진 BPDU를 전송한 포트를 루트 포트로 표시하고 나머지 포트는 blocking 또는 listening 상태가 된다. 

 

 

 

- Topology Changes

 

STP의 다음 중요한 작업은 토폴로지 변화를 처리하는 것이다. 기본 DB aging 메커니즘을 사용하여 변화하는 토폴로지에 적응할 수는 있지만, aging timer는 잘못된 항목을 삭제하는 데 오랜 시간이 걸릴 수 있기 때문에 좋지 않은 접근법이다. 대신 STP는 토폴로지 변화가 감지되면 네트워크에 이를 빠르게 알리는 방법을 제안한다. 즉, 포트가 Blocking 혹은 Forwarding 상태로 전환될 때 이를 알리는 것이다.

 

Bridge가 연결 변경을 감지하면 Root port로 Topology Change BPDU를 전송하여 상위 bridge들에게 해당 사실을 알린다. Root로 이어지는 트리의 다음 bridge는 TC BPDU를 수신한 bridge에 이를 Acknowledge 처리하고 root 방향으로 이를 전달한다. Root bridge가 이러한 경로로 Topology Change를 감지하면, 이후 주기적인 구성 메시지에 TC 비트 필드를 설정한다. 이 메시지는 blocking, listening state의 포트에도 전달된다. 이 비트 필드의 설정은 bridge들이 aging time을 forwarding delay time으로 줄일 수 있게 한다. 

 

 

 

- Rapid Spanning Tree Protocol

 

기존 STP의 문제 중 하나로 여겨지는 점은, Topology change가 Root bridge가 BPDU를 일정 시간 동안 수신하지 못했을 때만 감지된다는 것이다. Root bridge의 타임아웃 시간이 길면, 수렴 시간이 길어질 수 있다는 점이다. IEEE 802.1w Standard에서는 이러한 점을 감안하여 RSTP라는 새 프로토콜을 채택했다.

 

RSTP의 주요 개선점은 각 포트의 상태를 모니터링하고 문제를 감지하자마자 즉시 Topology change를 트리거한다는 점이다. 또한 RSTP는 BPDU 포맷의 Flag 필드 6비트를 모두 사용하여 Bridge 간의 agreements를 지원함으로써, 일부 타이머를 사용하는 프로토콜 작동 방식을 대체한다. RSTP는 기존 STP의 다섯 가지 포트 상태를 세 가지 상태(discarding, learning, forwarding)으로 줄였다. Discarding 상태는 Disabled, blocking,listening을 합친 상태이다. 또한 RSTP는 alternate port 역할을 도입했다. alternate port는 root port가 장애가 발생하면 즉시 백업 역할을 수행할 port이다.

 

RSTP는 단일 유형 BPDU만 사용하며, 따라서 특별한 topology change BPDU는 존재하지 않는다. 토폴로지 변화를 감지한 Switch가 이를 나타낸 BPDU를 전송하며, 이를 수신한 모든 스위치는 즉시 자신의 DB를 초기화하는 것이다.(Root bridge로 변화를 전달하는 과정 생략.) 따라서 수렴 시간이 단축되게 된다.

 

RSTP는 edge port와 일반 spanning tree port를 구분한다. edge port는 단말 유저(end user)에 직접 맞닿아있는 port이다. 또한 Point-to-Point link, Shared link도 구별한다. edge port와 point-to-point port는 일반적으로 cycle(loop)이 존재하지 않으므로 listening, learning 단계를 건너 뛰고 바로 forwarding으로 갈 수 있다. point-to-point link인지는 인터페이스가 full-duplex mode인지 확인하는 것으로 한다.

 

일반 STP에서는 BPDU가 notifying 이나 root bridge로부터 relay된다.(상기 설명 참조)

 

그러나 RSTP에서는, 모든 Bridge가 정기적으로 BPDU를 전송하여 연결된 이웃과의 상태를 확인한다. Bridge가 3배의 hello 간격 동안 업데이트 된 BPDU를 받지 못하면(즉 3번의 타이밍을 놓치면), 해당 이웃에 장애가 발생한 것으로 판단한다. 또한 일반 STP와 달리 edge port가 연결되거나 해제될 때 Topology change 절차가 없다. 토폴로지 변화가 감지되면, notifying bridge는 TC 비트 필드가 설정된 BPDU를 모든 Bridge로 broadcast 한다. 만일 bridge가 이러한 BPDU를 수신하면, edge port 관련 항목 제외한 모든 DB를 flush하고 다시 learning phase에 들어가게 된다.

 

MSTP는 VLAN 환경에서 STP를 사용하는 것을 가정하고 설계된 프로토콜이다. 각 VLAN에 대해 별도의 Spanning Tree를 형성하여 VLAN 간 트래픽을 독립적으로 송수신할 수 있다.

 

- 802.1ak : Multiple Registration Protocol (MRP)

 

다중 등록 프로토콜(MRP)는 bridged LAN 환경에서 Attribute를 Station 간에 등록하기 위한 방법을 정의한다. 802.1ak는 MRP의 두가지 특정 응용을 정의한다. (MVRP, MMRP)

 

MRP는 이전의 GARP framework를 대체하며 MVRP와 MMRP는 각각 GVRP, GMRP를 대체한다. 

 

MVRP를 사용하면 end station이 특정 VLAN 멤버로 구성될 때 이 정보를 연결된 스위치로 전달한다. 스위치는 해당 station의 VLAN 참여 정보를 다른 스위치로 전파한다. 이를 통해 스위치가 DB를 VLAN ID 기반으로 확장될 수 있으며, VLAN끼리 따로 토폴로지를 관리하므로 한 VLAN의 토폴로지 변경이 STP를 통한 기존 Spanning Tree 재계산을 트리거하지 않도록 방지할 수 있다.

 

MMRP는 Station이 그룹 MAC 주소(Multicast Address)을 등록하는 법을 제공한다. 스위치는 이 정보를 활용해 Multicast traffic이 전송되어야 하는 포트를 결정할 수 있다.(이 기능이 없으면 모든 Multicast 트래픽을 Broadcast 해야한다.)

 

(* MMRP는 IGMP와 MLD에서 지원하는 IGMP/MLD 스누핑과 유사하다.)

 

즉, MRP는 네트워크에서 VLAN과 멀티캐스트 트래픽 관리를 효율적으로 수행할 수 있도록 설계된 프로토콜이다.

 

- V. Wireless LANs - IEEE 802.11 (Wi-Fi)

 

 

오늘날 인터넷 접속에 가장 널리 사용되는 기술 중 하나는 Wi-Fi (IEEE Standard 802.11)이다. 사실상 이더넷의 무선 버전이다. End user가 AP와 "무선"으로 연결되면, 해당 AP부터 Switch, Router를 거치는 연결은 기존과 동일하게 진행될 수 있다. Wi-Fi는 각 Station을 위한 랜선이라든지 기타 도구가 필요없으므로 매우 저렴하고 편리하다. 또한 단순히 공유기에 랜선을 꽂는 것만으로 AP가 만들어지는 단순한 설치과정을 지니고 있다. AP와 그에 연결된 Station들은 BSS라고 불린다. AP는 일반적으로 DS를 통해 서로 연결되며 이는 ESS를 형성한다. 즉 BSS의 집합이 ESS가 된다. 이러한 설정은 일반적으로 infrastructure mode라고 불린다. 

 

802.11 Standard는 추가적으로 ad hoc mode를 제공한다. 이 구성에서는 별도의 AP와 DS가 없으며 Station 간 Peer-to-peer로 통신이 이루어진다. Ad hoc network에 참여하는 station을 IBSS라고 한다. BSS/IBSS의 집합으로 형성된 WLAN은 Service Set이라고 하며 이는 SSID로 식별된다. ESSID(Extended SSID)는 연결된 ESS의 이름으로 LAN 전체를 식별한다.(AP 설정 시 네트워크 이름으로 지정된다.)

 

 

 

- 802.11 Frames

 

802.11 network에는 공통 프레임 형식이 존재한다. 사진에 표시된 프레임은 동기화를 위한 Preamble을 포함한다. 그 다음에는 PLCP Header가 이어지며, PHY 계층의 세부 정보 (프레임 길이, 전송 속도, 전송 모드 등등)를 제공해주는 역할을 한다. PLCP 부분은 일반적으로 프레임의 나머지 부분보다 더 낮은 Data rate으로 전송된다. 이를 통해 전송 안정성의 향상과 호환성을 확보할 수 있다. 프레임의 MAC PDU(MPDU)는 이더넷 프레임과 유사하지만 일부 추가 필드를 포함한다. 

 

MPDU의 헤더에는 Frame Control Word가 포함되어 있다. 이 FCW에는 2비트의 Type 필드가 포함되어 있으며, 프레임의 유형을 식별한다. (관리 프레임, 제어 프레임, 데이터 프레임) 프레임의 나머지 필드 내용은 프레임 유형에 따라 달라진다.

 

 

 

1. Management Frames

 

관리 프레임은 Station과 AP 간의 연결 생성, 유지, 종료를 위해 사용된다. 암호화 사용 여부, 네트워크의 이름(SSID,ESSID), 지원 Data rate, time base 등을 제공하는데도 사용된다. 즉, 이 프레임은 Wi-Fi interface가 주변 AP를 scan하는데 필요한 정보를 제공한다. Scanning은 Station이 사용 가능한 네트워크와 관련 구성 정보를 발견하는 과정이다. 예를 들면 스마트폰의 Wi-Fi 기능을 키면 주변에 연결 가능한 BSS 혹은 IBSS의 AP를 찾는 과정이다. 이 과정에서 station은 probe request를 전송하여 네트워크를 능동적으로 탐색할 수 있다. (수동 스캔은 AP가 주기적으로 브로드캐스트하는 비콘 프레임을 확인하여 AP의 SSID, Data rate, 보안 정보 등을 확인하는 것이다.)

 

AP가 SSID를 브로드캐스트할 때 (비콘 프레임을 전송할 때), Station은 해당 AP와 연결을 시도할 수 있다. 연결이 이루어지면 대부분의 Wi-Fi 네트워크는 Station에 인터넷 접속을 제공하기 위한 설정 정보를 함께 제공한다. 

 

 

 

2. Control Frames: RTS/CTS and ACKs

 

제어 프레임은 flow control과 프레임 확인(Acknowledgment)를 처리하기 위해 사용된다. flow control은 수신기기가 송신기의 속도를 조절할 수 있도록 해주며, ACK 응답은 송신기가 프레임이 올바르게 수신되었는지를 알 수 있게 해준다. 이러한 개념은 Transport layer의 TCP에서도 사용된다.

 

802.11 네트워크는 옵션으로 RTS(Request-To-Send)/CTS(Clear-To-Send) 방식을 통해 flow control을 지원한다.

 

데이터 프레임을 보내기 전에 송신 station이 RTS 프레임을 전송하며, 수신 측이 추가 트래픽을 처리할 상황이 된다면 CTS 프레임을 응답으로 전송한다. RTS/CTS 교환 후, 송신 station은 CTS 프레임에 명시된 time window 내에서 데이터를 전송할 수 있으며, 전송된 데이터가 성공적으로 수신되면 ACK을 받는다.

 

RTS/CTS 교환은 각 station에게 언제 전송이 허용되는지 알려주는 방식으로 숨은 단말 문제(hidden terminal problem)을 방지하는데 도움을 준다. 이를 통해 서로의 신호를 받지 못하는 station들이 동시에 데이터를 전송하는 상황을 피할 수 있다. RTS/CTS 프레임은 짧기 떄문에 채널을 오래 점유하지 않는다. 일반적으로 AP는 데이터 패킷 크기가 충분히 클 때 RTS/CTS 교환을 시작한다.(설정해둔 packet size threshold보다 큰 경우 RTS 프레임 전송)

 

더보기

* Hidden terminal problem

WLAN에서 3개의 노드가 있을 때, 중간 1개 노드(B)는 양 노드가 보여 모두 통신이 가능하나, A와 C는 서로 통신이 되지 않아 상태를 모른다. 즉, A,C는 동시에 충돌을 감지하지 못하고 데이터를 전송할 수 있다.

 

유선 이더넷 네트워크에서는 충돌만 발생하지 않으면 왠만해서는 프레임이 올바르게 수신되었다고 간주해도 무방하다. 그러나 무선 네트워크는 신호 부족, 간섭 등 다양한 이유로 프레임이 올바르게 전달되지 않을 가능성이 크다. 저렴하고 간편한 대신 안정성이 떨어지는 것이다. 이러한 문제를 해결하기 위해 802.11은 802.3의 retransmission 과정을 확장하여 retransmission/acknowledgment 방식을 도입했다. 각 유니캐스트 프레임 또는 각 프레임 그룹마다 일정 시간 내에 ACK이 수신되어야한다는 규칙을 정의한 것이다.(나중에 설명하겠지만 TCP의 재전송 타이머를 생각하면 비슷하다.) 

 

그러나 멀티캐스트, 브로드캐스트에는 ACK을 받지 않는다. 이는 다수의 ACK이 동시에 반환되어 ACK implosion이 발생하는 것을 막기 위함이다. 송신 측이 지정된 시간 내에 ACK을 수신하지 못하면 해당 프레임을 재전송한다. 재전송이 잦으면 네트워크 내에서 중복 프레임(dup frame)이 많이 생성될 수 있으며 Frame Control Word의 Retry 비트 필드는 해당 프레임이 재전송 프레임인 것을 나타낼 때 세팅된다. 수신 Station은 이를 통해 dup frame을 제거할 수 있으며 이를 위해 station은 최근에 본 주소, 시퀀스 번호, fragment 번호를 기록한 작은 캐시를 유지하여야한다. 수신된 프레임이 캐시에 hit 될 경우, 해당 프레임은 중복 프레임으로 간주되어 폐기처리한다.

 

프레임을 전송하고 이에 대한 ACK을 수신하는데 필요한 시간은 링크의 물리적 거리와 slot time에 따라 달라진다. slot time은 802.11 MAC 프로토콜에 정의된 기본적인 시간 단위이다. slot time은 충돌이 감지된 후 송신 장치들이 데이터를 다시 전송하기 전 대기해야 할 최소 시간이다. ACK을 기다리는 시간(slot time 포함)은 대부분의 시스템에서 manual하게 설정 가능하며, 장거리 Wi-Fi를 사용하는 경우에는 이 값을 길게 설정해줄 필요가 있다.

 

 

 

3. Data Frames, Fragmentation, and Aggregation

 

혼잡한 네트워크에서 가장 자주 관찰되는 프레임은 Data frame으로 이름에서 알 수 있듯이 데이터를 운반하는 역할을 한다. 또한 802.11은 Frame Fragmentation을 지원하여 프레임을 여러 단편으로 나눌 수 있다. 이는 보통 MTU를 맞추기 위해 이용된다. 각 단편은 독립적으로 MAC 헤더와 CRC를 가지며 처리 또한 독립적으로 된다. 예를 들어, 다른 목적지로 보내는 단편들이 서로 교차 전송될 수 있다. 단편화는 채널에 간섭이 심할 때 충돌이 나면 재전송 해야할 packet의 크기를 줄여 네트워크의 성능을 개선하는데 도움을 줄 수 있다. block ACK이 사용되지 않는 경우 각 단편은 개별적으로 전송되며 각 단편마다 하나의 ACK을 받는다. 

 

Fragmentation은 유니캐스트 목적지 주소를 가진 프레임에만 적용된다. 단편화를 지원하기 위해서 Sequence Control field는 4비트만큼의 fragment number와 12비트만큼의 sequence number를 포함한다. 프레임이 단편화되면, 모든 단편은 동일한 Seq number를 가지며 Frag number는 단편의 순서대로 1씩 증가하며 기록된다. Frag number 영역이 4비트이므로 한 프레임에 대해 최대 15개의 단편을 생성할 수 있다. Frame Control Word의 More Frag 필드는 해당 시퀀스 번호의 프레임에 추가 단편이 남아있는지를 표시한다. 최종 단편은 이 비트가 0으로 설정된다. 수신 Station에서는 각 단편을 Seq number와 Frag number를 기준으로 정렬하여 원래 프레임을 조립한다. 즉, More Frag 필드가 0인 프레임을 받을 경우 프레임은 재구성되어 상위 계층 프로토콜로 전달된다.

 

그러나 이론과 다르게 Link layer에서 802.11의 Fragmentation은 tuning이 필요하기 때문에 자주 사용되지는 않는다. 잘못 사용하면 성능 저하를 초래할 수 있기 때문이다. 따라서 많은 AP는 Fragmentation을 사용하지 않도록 기본 값을 높은 임계값으로 설정한다.

 

* Fragmentation이 유용할 수 있는 이유는 확률에 기반한 간단한 원리로 설명할 수 있다.

 

만약, BER(Bit Error Rate)이 P라고 하면, 비트가 성공적으로 전달될 확률은 (1-P)이고 N개의 비트가 성공적으로 전달될 확률은 (1-P)^N 이 된다. 따라서 N이 커질 수록 이 값은 감소하게 된다. 1000개짜리 비트를 한번에 전송하는 (1-P)^1000 보다 1000개짜리를 10개로 나누어 (1-P)^100을 10번 전송하는 것이 더 확률이 유리하다.

 

 

 

구체적으로 1500바이트 크기의 프레임을 전송한다고 해보자.

 

P = 10^(-4)라고 하면, Fragmentation을 사용하지 않으면 성공적으로 전달될 확률은 (1-10^(-4))^12000 ~= 0.301 이다. 즉, 이 프레임이 첫 시도에서 오류 없이 전달될 확률은 0.301이다.

 

같은 예시에서 Fragmentation threshold를 500으로 설정해보자. 그러면 4000비트 크기의 3개의 단편이 생성된다. 각 단편이 오류 없이 전달될 확률은 약 0.67이 되게 되고 전체 프레임을 구성하려면 0.67이 3번 성공해야하는 문제가 된다. 3개가 전부 한번에 성공할 확률은 약 30%가 된다. 그러나 2개 또는 3개의 단편이 성공할 확률은 74%가 된다.

 

1개의 단편(500바이트)만을 26%의 확률로 재전송하는 것과 1500바이트를 70% 확률로 재전송하는 것은 단순히 보아도 전자가 낫다.

 

 

 

하지만 각 단편은 헤더와 같은 오버헤드를 소비하므로 BER이 거의 0에 가까운 경우에는 Fragmentation이 성능을 떨어뜨린다.

 

802.11n이 제공하는 개선 중 하나는 Frame aggregation이다. 이는 2가지 형태(A-MSDU, A-MPDU)로 제공된다.

 

A-MSDU는 여러 개의 동일한 목적지를 지니는 완전한 802.3 프레임을 하나의 802.11 프레임에 aggregation 할 수 있는 것이고, A-MPDU는 동일한 출발지, 목적지 및 QoS 설정을 가진 여러 MPDU를 짧은 지연 시간을 두고 연속적으로 전송할 수 있는 기능이다.

 

단일 Aggregation에 대해, A-MSDU 방식은 기술적으로 더 효율적이다. (각 802.3 헤더는 일반적으로 14바이트이며 이는 최대 36 바이트까지 될 수 있는 802.11 MAC 헤더에 비해 상대적으로 작다. 따라서 여러 802.3 프레임에 대해 단 하나의 802.11 MAC 헤더를 사용하면 각 프레임마다 802.11 MAC 헤더를 적용하는 것에 비해 최대 22바이트를 절약할 수 있다.)

 

그러나 A-MSDU는 단일 FCS로 보호되므로 오류가 발생하면 프레임 전체를 다시 전송해야하는 단점이 있다.

 

 

 

A-MPDU는 각각 독립적인 802.11 MAC 헤더와 FCS를 가지는 최대 64개의 802.11 프레임을 한 번에 전송하는 방식이다. 각 서브프레임은 독립적인 FCS를 포함하고 있으므로 오류가 발생한 서브프레임만 선택적으로 재전송할 수 있다.

 

이 기능은 802.11n의 block ACK 덕분에 가능하다. block ACK은 확장된 ACK의 일종으로, 송신자에게 어떤 A-MPDU 서브프레임이 성공적으로 전달되었는지에 대한 피드백을 제공한다. 이 기능은 TCP의 SACK과 목적은 유사하나 구현 방식은 다르다. 따라서 A-MSDU가 오류 없는 네트워크에서 작은 패킷들을 대량으로 전송하는데 더 효율적일 수 있지만, 실제로는 A-MPDU가 더 좋은 성능을 발휘하는 경우가 많다.

 

 

 

- Power Save Mode and the Time Sync Function (TSF)

 

802.11은 STA가 절전 모드로 들어갈 수 있는 PSM을 제공한다. STA는 수신 회로를 일정시간 동안 차단하여 전력을 절약할 수 있도록 설계된다. STA가 절전 모드에 들어가면, 송신하는 프레임의 FCW에 특정 비트가 설정된다. AP는 이 비트를 감지하고 해당 STA를 위한 프레임을 임시 저장한다. PSM을 지원하는 AP는 비콘 프레임의 FCW에 특정 비트를 세팅하여 STA에게 버퍼링된 프레임이 있음을 알릴 수 있다. 이를 통해 STA는 다음 AP 비콘 시간에 깨어나고, AP에게 저장된 대기 프레임을 받는 방식으로 PSM이 작동할 수 있다.

 

STA가 다음 AP 비콘 시간에 깨어난단게 말은 쉬워보여도 실제로는 그렇지 않을 수 있다. 이들은 무선으로 연결되어있기 때문에 physical global clock이 있지 않기 때문이다.

 

Wi-Fi는 AP와 PSM을 사용하는 STA 간의 공통된 시계를 유지하기 위해 TSF를 이용한다. 각 STA는 마이크로초 단위의 64비트 카운터로 표현되는 reference time을 유지하며 네트워크의 다른 STA들과 이 시간을 동기화한다. 동기화는 PHY의 최대 전파 지연 시간에 4마이크로초를 더한 범위 내에서 유지된다.

 

어떤 STA가 TSF 업데이트(다른 STA에서 전송된 카운터 값)을 수신하면, 자신의 값과 비교하여 수신된 값이 더 크면 자신의 시간을 업데이트한다. (즉 자신이 더 느리면 업데이트한다.) 이는 STA의 시간이 항상 앞으로 진행되도록 보장한다.

 

그러나 이를 계속 진행하면 더 느린 STA가 가장 빠른 STA에 동기화되는 경향이 있고, 클럭 속도 차이가 커지면 빈번히 동기화 과정을 반복해야할 수도 있다. 즉, 계속 한 STA가 빠르게 흐르면 나머지 STA가 이를 뒤쫓아가야하는 것이다.

 

802.11e(QoS) 기능이 802.11에 통합되면서 PSM은 버퍼링된 프레임을 주기적으로 일괄 처리할 수 있는 APSD라는 기능이 추가되었다. 이 주기는 비콘 프레임의 개수로 표현된다. 이 기능은 QoS Control Word의 일부 서브필드를 사용한다. 이를 이용하면 기존 802.11 PSM처럼 매 비콘 간격마다 깨어날 필요가 없으며 더 긴 기간 동안 전력회로를 꺼둘 수 있다. 

 

802.11n은 여러 개의 무선 회로를 같이 사용하는 STA(MIMO 등)가 프레임이 준비될 때까지 하나를 제외한 모든 회로를 끌 수 있는 기능을 제공한다. 이를 Spatial Multiplexing Power Save Mode라고 한다.

 

 

 

- 802.11 Media Access Control

 

무선 네트워크에서는 충돌을 감지하는 것이 802.3 등의 유선 네트워크보다 훨씬 더 어렵다. 본질적으로 무선 매체는 단방향(simplex)로 작동하며, 여러 송신자가 동시에 전송하는 상황을 막기 위해 전송을 중앙 집중 혹은 분산 식으로 조정해야한다. 802.11 Standard는 무선 매체를 공유하기 위한 3가지 접근 방식 (PCF, DCF, HCF)를 제공한다.

 

 

 

1. Point Coordination Function : 구현은 선택 사항이며 널리 사용되지 않는다. 따라서 생략

 

2. Distributed Coordination Function : 모든 STA와 AP에서 필수적으로 구현해야하는 기능이다.

 

3. Hybird Coordination Function : 802.11e에서 QoS와 함께 도입되었다.

 

 

 

DCF는 경합을 기반으로하는 CSMA/CA의 한 형태이다. 이는 Infrastructure, ad hoc 모드 둘 다 사용한다.

 

CSMA/CA의 작동 방식은 다음과 같다.

 

a. STA는 medium이 free인지 확인하기 위해 listen 동작을 수행한다.

 

a-1. medium이 free라면 전송 기회를 가진다.

 

a-2. medium이 busy라면 전송을 랜덤한 시간 동안 backoff한 후 다시 a 과정을 반복한다.

 

(이 과정은 802.3의 CSMA/CD에서 전송 시작 후 충돌을 감지한 STA가 jamming signal을 브로드캐스트하며 전송을 backoff하는 것과 비슷하다.)

 

=> 이 규칙을 기본으로 하되, 특정 STA나 프레임 유형에 대해 priority access를 제공하는 기능을 서비스할 수도 있다.

 

추가적으로 RTS/CTS 신호를 사전에 주고 받아 안전하게 확보를 하는 방법도 있다. 자세한 DCF 절차에 대해 알아보자.

 

 

 

802.11의 carrier sense(listen)는 물리적 방식(CCA)과 가상 방식(NAV) 모두에서 수행된다. 

 

a. STA가 데이터 전송 준비를 마치면 DIFS라고 불리는 대기 시간을 기다린다. 이를 통해 우선 순위가 높은 STA가 채널에 접근할 수 있도록 허용하는 역할을 한다.(ex : ACK 신호)

 

a-1. DIFS 기간동안 채널이 사용중인 것으로 감지되면, STA는 대기 시간을 다시 시작한다.

 

a-2. 채널이 idle이라면 전송을 시도하려는 송신 STA는 CA및 backoff 절차를 시작한다.

 

이 과정에서 ACK은 전송이 성공적이었는지 확인을 시켜주는 역할을 하며, 이를 수신할 시 송신 STA는 CA 절차를 종료한다. 만약 ACK을 수신하지 못했을 경우 STA는 다른 타이밍을 사용하여 Backoff 절차를 다시 시작한다.

 

 

 

- Virtual Carrier Sense, RTS/CTS, and the Network Allocatrion Vector (NAV)

 

802.11 MAC 프로토콜에서 가상 Carrier Sense 매커니즘은 MAC 프레임의 Duration 필드를 관찰함으로써 작동한다.

 

Duration 필드는 해당 프레임을 전송하는 동안 어느정도 medium이 busy할지를 담고 있다. 이 필드는 RTS/CTS 프레임뿐만 아니라 일반적인 데이터 프레임에도 포함되어 있다.

 

송신기는 frame length, transmit rate 그리고 PHY characteristics(rate 등)에 기반하여 Duration을 세팅한다. 각 STA는 NAV(Network Allocation Vector)라는 로컬 카운터를 유지하며, 이는 현재 frame이 medium을 사용하는 동안 medium이 busy할 것으로 예상되는 시간을 추정한다. 이를 통해 각 STA는 다음 전송 시도까지 기다려야할 시간을 알 수 있다.

 

만약 자신이 유지하는 NAV보다 다른 STA에서 수신한 Duration이 클 경우 STA는 자신의 NAV 값을 새로운 값으로 업데이트한다. NAV가 0이 아닌 동안 medium은 busy한 것으로 간주된다. 만약 ACK을 수신할 시 NAV는 0으로 재설정된다. NAV값이 0이 되면 medium이 free가 된 것으로 간주한다.

 

 

 

- Physical Carrier Sense (CCA)

 

 각 802.11 PHY 사양은 에너지와 파형 인식을 기반으로 채널이 비어있는지 여부를 평가하는 기능을 제공해야한다. 이 기능을 Claer Channel Assessment라고 하며 구현은 PHY 계층에 따라 달라진다. CCA는 NAV와 함께 사용되어, STA가 전송하기 전에 대기해야하는지를 결정하는데 사용된다.

 

 

 

- DCF Collision Avoidance / Backoff Procedure

 

채널이 비어있을 가능성이 높다고 판단되면(Ex : NAV가 0이 되었으며 CCA가 채널 사용 중을 감지하지 않았을 때), STA는 전송 전에 접근을 연기(defer)한다. 그 이유는 여러 STA가 채널이 비워지기를 기다리고 있을 수 있고, 동시에 idle을 확인하고 전송을 시도할 수 있기 때문이다. 따라서 각 STA는 전송 전에 backoff time을 계산하고 접근을 그만큼 연기하는 것이다.

 

Backoff time은 랜덤 숫자와 slot time의 곱으로 계산된다.(slot time은 PHY 계층마다 다르다.) 랜덤 숫자는 [0, CW]에서 균등 분포를 따르는 값으로 선택되며 여기서 CW(Contention Window)는 기다릴 slot time의 개수를 나타내는 정수이다. CW 값은 전송 시도가 반복될 수록 2의 제곱으로 증가하며, 정해진 최대치 max 값이 존재한다. 이 동작은 802.3의 CD 이후 백오프 절차와 비슷하다. 그러나 무선 환경에서는 동일한 장비에서 송신기, 수신기가 동시에 작동한다. 또한 자신의 전송 이외에 다른 전송을 감지하는 것이 어려우므로 CD가 쉽지 않다. 따라서 CA를 대신 사용하는 것이다.

 

또한, 프레임이 성공적으로 전달되었는지 확인하기 위해 Unicast 프레임에 대해 ACK를 수신한다. 올바른 프레임을 수신한 STA는 SIFS라는 짧은 시간 동안 기다린 후, Medium의 상태와 관계 없이 ACK를 전송하기 시작한다. 이렇게 동작해도 문제가 없는 이유는 SIFS 값은 항상 DIFS보다 작기 때문에 ACK를 생성하는 STA가 채널에 대한 우선 접근 권한을 가지기 때문이다. 송신 STA는 ACK 프레임을 일정 시간 기다리다가 수신하지 못하면 전송이 실패했다고 판단한다. 전송이 실패하면 앞에서 언급한 Back off 절차를 다시 시작하고 해당 프레임을 재전송한다.(RTS/CTS를 일정 시간 내에 수신하지 못해도 동일하게 작동한다.)

 

정리하자면, STA가 NAV가 0이 되고 CCA를 통해 채널이 idle임이 확인되면 우선 DIFS 동안 대기해 SIFS 프레임들이 전송될 시간을 마련한다. 이후 각 STA 별로 랜덤하게 가지는 backoff time 만큼 자신의 backoff timer를 세팅한다. backoff timer는 채널이 idle 상태일 때만 줄어든다. DIFS가 지나고, backoff timer도 0이 되면 STA는 데이터를 전송하는 것이다. 만약 ACK을 받지 못하면 다시 백오프 타이머를 설정하고 시도를 반복하는 것이다. (DIFS는 최초 전송 1회에서만 대기한다.)

 

 

 

- HCF and 802.11e/n QoS

 

802.11e, Wi-Fi QoS, WMM이라는 용어로 불리는 802.11 Standard의 5, 6, 7, 9 조항은 멀티미디어 어플리케이션(VoIP 등)을 지원하기 위해 802.11 MAC 계층과 시스템 인터페이스에 변경 사항을 적용한 QoS 기능을 다룬다.

 

QoS 기능은 복잡한 네트워크에서 효과적일 수 있다. (Block ACK 등) 또한 VoIP, 스트리밍과 같은 서비스에서 낮은 jitter를 필요로 하면 QoS를 사용해야한다.

 

QoS 기능은 QoS Station(QSTAs), QoS Access point(QAPs), QoS BSS(QBSS) 라는 용어를 사용한다. QoS를 이용하면, HCF라는 새로운 형태의 조정 기능이 도입되어 경쟁 기반 접근과 제어된 채널 접근을 지원할 수 있다. (보통 경쟁 기반 접근 EDCA가 더 많이 이용된다.) 추가적으로 Admission Control도 지원되며 이를 이용해 네트워크 부하가 높을 시 연결 자체를 거부할 수 있다.

 

 

 

* QAM, BPSK, QPSK 등의 변조 방식과 Data rate, 채널의 주파수 간섭 피하기, 각 나라별 사용 채널 대역폭 등의 내용은 생략한다. Richard stevens의 TCP/IP Illustrated의 챕터 3을 확인해보면 해당 내용이 있다.

 

- VI. Point-to-Point Protocol (PPP)

PPP는 serial link를 통해 IP datagram을 전송하는 방법이다. 저속의 dial-up 모뎀부터 고속 optical link들까지 폭넓게 사용된다. 해당 프로토콜은 DSL 서비스 제공업체들에 의해 널리 퍼졌으며 첫 IP 주소, DNS와 같은 internet system parameter를 할당하는데도 사용된다. PPP는 단일로 구성된 프로토콜이 아닌 여러 프로토콜의 집합으로 간주해야한다. 기본적으로 PPP는 링크를 설정하는 방법인 LCP(Link Control Protocol)을 지원한다. LCP가 기본 링크를 설정한 이후 NCP(Network Control Protocol)가 다양한 프로토콜(IPv4, IPv6 등)에 대한 Network layer를 설정하는데 사용된다. 또한 다양한 압축 및 암호화 제어도 프로토콜에 포함된다.

 

 

 

- Link Control Protocol

 

PPP의 LCP 부분은 Point-to-Point link를 통해 low-level의 two-party communication을 설정하고 유지하는데 사용된다.

 

따라서 PPP는 단일 링크의 두 종단만 처리하면 되므로 802.3, 802.11의 MAC 계층 프로토콜 처럼 공유 자원(medium 등)에 대한 접근을 처리하는 규칙이 필요없다. PPP는 기본 point-to-point link에 최소한의 요구 사항만 부과한다.

 

1. 링크는 양방향 통신을 지원해야한다.(LCP는 ACK 응답을 사용한다.)

 

2. 링크는 Asynchronous 또는 Synchronous 둘 다 지원해야한다.

 

3. LCP는 High-Level Data Link Control(HDLC) 프로토콜을 기반으로 한 간단한 비트 수준 프레임 형식을 사용해 링크를 설정한다.

 

HDLC 기반 프레임 형식

PPP의 프레임 형식은 그림과 같이 두 개의 1 바이트 Flag 필드로 둘러싸여있다. 이 Flag 필드는 고정된 값(0x7E)을 가지며 Point-to-Point 링크의 양 끝단에 있는 두 STA가 프레임의 시작과 끝을 인식하게 하는 역할을 한다. 그러나 이 방법을 사용하게 되면 Flag 내부 프레임에 0x7E라는 표현을 사용할 수 없게 되는 문제가 발생한다. 이 문제는 링크가 Async.인지 Sync.인지에 따라 처리 방법이 다르다.

 

1. Async 링크 일 시, 프레임 내에 0x7E가 나타나면 이를 2바이트 시퀀스 0x7D5E로 대체해서 표현한다. 여기서 0x7D는 PPP escape char.이다. 만약 프레임 내에 0x7D가 나타나는 경우 이를 0x7D5D로 대체한다.

 

(즉, 수신 측에서는 0x7D5E를 0x7E로, 0x7D5D는 0x7D로 복원한다.)

 

2. Sync 링크 일 시, Flag charcter가 01111110이므로 1이 연속해서 6개 나타나는 패턴이다. 따라서 5개의 연속된 1 비트가 나타나면 이 뒤에 0 비트를 삽입하여 Flag character와 충돌을 막는다. 수신 측에서는 연속된 5개의 1 비트가 나타나면 다음 비트 0을 제거하여 원래 데이터를 복원한다.

 

* Async 통신은 문자 단위로 데이터를 처리한다. 각 DU(문자)는 독립적으로 전송되며, 문자 단위의 경계를 확인하기 위해 추가적인 신호 비트(Start/Stop)이 필요하다. 또한 동기화 구간이 없어 비트 단위로 세밀한 인식이 어렵다. 따라서 Byte 문자 단위로 신호를 인식한다.

 

=> Byte Stuffing은 이러한 문자 단위의 구조를 기반으로 쉽게 구현할 수 있다. (데이터 크기가 정의되어있지 않기 때문이다.) 또한 비동기 통신은 비트 단위가 아닌 바이트 단위로 작업하므로 Byte stuffing을 사용한다.

 

 

 

* Sync 통신은 비트 스트림 단위로 데이터를 처리한다. 즉, 데이터가 연속적으로 스트리밍되며 별도의 Start/Stop 비트 없이 프레임 구조만으로 경계를 구분한다. 따라서 문자 단위의 구조가 없어 비트 삽입(Bit Stuffing)으로 데이터 구조를 유지하며 문제를 해결한다.

 

첫 Flag 필드 다음에, Address 필드와 Control 필드를 작성한다. HDLC에서 Address 필드는 특정 STA를 지정하는 데 사용된다. PPP는 1대1 통신을 가정하므로 목적지는 고정이다. 그래서 이 필드는 항상 0xFF로 정의된다. 또한 Control 필드는 프레임 시퀀싱과 재전송 동작을 나타내는 데 사용된다. 그러나 이러한 Link layer의 신뢰성 기능은 PPP에서는 일반적으로 구현되지 않으므로, Control 필드는 고정 값 0x03으로 설정된다.(사실상 목적지 필드와 Control 필드는 사용하지 않지만 기존에 널리 사용되던 HDLC 프레임 구조에 포함되어있기 때문에 호환성을 위해 넣는다.)

 

이후 Protocol 필드는 전달되는 데이터의 유형을 나타낸다. 기존 HDLC 사양을 준수하기 위해, 프로토콜 번호 양식은 2가지 조건을 지켜야한다.

 

1. 최상위 바이트의 LSB는 0이어야한다.

 

2. 최하위 바이트의 LSB는 1이어야한다.

 

16진수 기준 0x0000~0x3FFFF의 같은 네트워크 계층 프로토콜을 나타내며, 0x8000~0xBFFF 범위의 값은 NCP, 0x4000~0x7FFF는 low volume 프로토콜에 사용된다. 0xC000~0xEFFF 범위의 프로토콜 값은 LCP와 같은 control protocol을 나타낸다. 효율성의 측면에서 연결 이전 합의가 된단 전제하에 Protocol 필드가 1바이트로 압축될 수 있다. 이는 0x0000~0x00FF 범위의 프로토콜 번호만을 사용하는 경우에 적용된다. (LCP 패킷은 예외로 항상 2바이트 비압축 형식 활용)

 

PPP 프레임의 마지막 부분에는 FCS(Frame Check Sequence)가 포함된다. 이는 10001000000100001를 Generator polynomial로 사용하는 CRC16이며, FCS 필드, Flag 바이트 제외 byte/bit stuffing이 일어나기 전 프레임 전체를 검사한다. 

 

 

 

- LCP Operation

 



LCP format

LCP는 PPP 형식을 상속하여 구현하는 형식을 지니고 있다. PPP Protocol 필드에서 LCP의 값은 항상 0xC021이다. 

 

모호성을 제거하기 위해 이 부분은 압축될 수 없다. 

 

Ident field는 LCP 요청 프레임을 전송한 송신자가 제공하는 번호이다. 이는 Seq number로써 각 메시지가 전송될 때마다 증가한다.응답(ACK,NACK,REJECT)을 생성할 때 이 필드는 요청에 포함된 Ident 값을 복사하여 응답 패킷에 삽입한다. 이를 통해 요청 송신자측은 식별자를 비교해 해당 요청에 대한 응답을 식별할 수 있다.

 

Code 필드는 요청하거나 응답하는 작업의 유형을 나타낸다. (ex : configure-request(0x01), configure-ACK(0x02)...) 일반적으로 ACK 메시지는 옵션 집합의 수락을 나타내며, NACK은 일부 거부와 제안된 대안을 나타내고, REJECT는 완전히 거부를 나타내는 응답이다.

 

Length 필드는 LCP 패킷의 길이를 바이트 단위로 나타내며, 링크의 최대 수신 단위(MRU)를 초과할 수 없다.

 

 

 

LCP의 주요 작업은 P2P link를 최소한도로 활성화하는 것이다.

 

Configure message는 링크 양쪽 끝에서 기본 구성 절차를 시작하고 연결 옵션을 합의하도록 하는 절차이다.

 

Termination 메시지는 작업이 완료되었을 때 링크를 정리하는데 사용한다. 이외에 몇가지 기능을 더 제공한다.

 

1. Echo Req/Rep : 링크가 활성 상태일 때 피어를 점검하기 위해 언제든지 LCP에 의해 교환되는 메시지

 

2. Discard Request : 링크 성능 측정을 위해 사용되며, 패킷을 응답 없이 삭제하도록 피어에게 지시한다.

 

3. Identification 및 Time-Remaining : 관리 목적으로 사용된다. (피어 시스템의 유형을 알거나 링크 유지 기간을 표시하는데 사용)

 

 

 

과거에 P2P link에서 흔히 발생한 문제는 원격 스테이션이 Loopback 모드에 있거나 looped 상태라고 불리는 경우에 있는 것이었다. 전화 회사의 광역 데이터 회선은 종종 테스트를 위해 Loopback 모드로 설정되곤 했다. 이 경우, 한쪽에서 전송된 데이터가 단순히 다른 쪽에서 반환되기만 한다. 이러한 방식은 회선 테스트로는 유용하나 데이터 통신 측면에서는 도움이 되지 않는다. 따라서 LCP는 발신자가 선택한 임의의 숫자인 Magic number를 전송하여 동일한 메시지 유형으로 즉시 반환되는지를 확인하는 방법을 사용한다. 매직 넘버가 바로 반환되면 해당 회선이 루프 상태로 감지된다.

 

 

PPP 링크가 어떻게 설정되고 옵션이 협상되는지 더 잘 이해하기 위해, 상단의 그림을 참조하자. (Peer는 양쪽 링크 끝에 있다.)

 

링크는 기본 프로토콜 계층이 연결 활성화를 알리면 설정된 것으로 간주된다. 이 기간 동안 링크 품질 보고서와 확인 메시지의 교환을 포함한 링크 품질 테스트도 수행될 수 있다. 링크가 인증을 요구하는 경우는 Auth를 위해 추가 교환이 필요할 수 있다. 링크는 기본 프로토콜이나 하드웨어가 연결이 중단되었음을 알리면 링크 종료 요청을 전송하고 피어로부터 종료 ACK을 받은 뒤 종료된다.

 

 

 

- LCP Options

 

LCP는 하나 이상의 NCP에서 사용할 링크를 설정하며 여러 옵션을 협상할 수 있다. 일반적인 2가지 옵션이 있다.

 

1. Asynchronous Control Character Map(Asyncmap) : PPP가 작동할 때 이스케이프 처리해야하는 제어 문자(0x00 ~ 0x1F)를 정의한다. 이 옵션은 제어 문자가 기본 HW의 동작에 영향을 줄 수 있는 경우에 사용된다. 예를 들어, XON/XOFF 문자를 사용하는 소프트웨어 흐름 제어가 활성화된 상태에서 XOFF가 이스케이프 없이 링크를 통과하면 HW는 XON이 올 때까지 중단되게 된다.

 

문자를 이스케이프 처리한다는 것은 해당 문자의 실제 값을 전송하지 않고 대신 PPP 이스케이프 문자 0x7D를 앞에 추가하고 원래 제어 문자에 0x20을 XOR 연산하여 생성된 값을 함께 전송하는 것을 의미한다. 예를 들어 0x13은 0x7D33으로 전송된다.

 

PPP는 Length 필드가 없고 seial line은 일반적으로 프레임 구성을 제공하지 않으므로, 이론적으로 PPP Frame 길이는 직접적인 제한이 없다. 그러나 실제로는 MRU(Maximum Receive Unit)을 설정하여 최대 프레임 크기를 설정하는 경우가 많다.

 

호스트가 MRU 옵션을 지정하면, 피어는 MRU 옵션에 제공된 값보다 긴 프레임을 전송하지 않도록 요청받는다. MRU 값은 데이터 필드의 길이를 바이트 단위로 나타내며, FCS 등 PPP의 다른 오버헤드를 포함하지 않는다. 또한 MRU는 프레임 크기에 대한 엄격한 제한이라기보다 피어에게 패킷 크기를 선택할 때 참고할 권장값에 가깝다.

 

작은 패킷이 큰 패킷과 동일한 PPP 링크에서 전송되는 경우, 큰 패킷이 저대역폭 링크의 대부분의 대역폭을 점유할 수 있다. (작은 패킷의 전달 지연). MRU를 작게 설정하면, 오버헤드가 증가하는 대신 이러한 문제를 완화할 수 있다.

 

 

 

PPP는 링크 품질 피드백 정보를 교환하기 위한 매커니즘도 지원한다. Option negotiation 과정에서 특정 품질 프로토콜에 대한 요청을 포함하는 설정 메시지를 보낼 수 있다. 16비트 크기의 옵션 필드는 특정 프로토콜을 지정하는데 사용되며, 가장 일반적인 Link Quality Report(LQR)을 포함하는 RFC1989를 사용한다. 

 

LQR이 활성화되면 상대 피어는 일정한 주기로 LQR을 제공하게 된다. 요청된 최대 LQR 간격은 1/100초 단위로 표현된 32비트 숫자로 설정 옵션에 포함된다. LQR에는 매직 넘버, 전송된 패킷 및 바이트 수, 수신된 패킷 및 바이트 수, 오류가 있는 수신 패킷 수, 폐기된 패킷 수, 교환된 LQR 총 수 정보가 포함된다. 이러한 LQR은 PPP 링크가 Establish 상태에 도달한 이후 요청될 수 있다. 

 

또한 대부분의 PPP implementation은 Callback 기능을 지원한다. 일반적인 Callback 설정에서는 PPP dial-up callback client가 PPP callback 서버에 전화를 걸고, 인증 정보를 제공한 후, 서버가 연결을 종료하고 client에 다시 전화를 건다. 이는 통화 요금이 비대칭적인 상황이나 일정 수준의 보안을 제공해야하는 상황에 유용하다. Callback negotiation에 사용되는 프로토콜은 LCP 옵션이다. 이 옵션이 합의되면 Callback Control Protocol이 협상을 완료한다.

일부 PPP에서 사용되는 압축 및 암호화 알고리즘은 작동 시 최소한의 바이트 수, 즉 Block size를 요구한다. 데이터가 이 최소 길이를 충족하지 못하면 padding을 추가하여 보낸다. padding이 추가될 경우 이는 데이터 영역 뒤, PPP FCS 필드 이전에 포함된다. 일반적으로 0으로 채우는 padding과 다르게 self-describing padding 이라는 방법은 padding을 0이 아닌 값으로 설정한다.(각자 자신의 padding area에서 offset value를 가진다.)

예를 들어, 첫 번쨰 바이트는 값이 0x01이고, 마지막 padding 바이트는 추가된 padding 바이트 수를 나타내게 된다. 이 옵션을 사용하게 되면 기본 PPP 프레임에 명시적인 길이 필드 값이 없으므로, 잘라내야할 패딩 바이트 수를 결정할 수 있다.

 

'Computer Network' 카테고리의 다른 글

4. System Configuration: DHCP & Autoconfiguration - 1  (0) 2025.01.17
3. The Internet Protocol (IP) - 2  (0) 2025.01.14
3. The Internet Protocol (IP) - 1  (0) 2025.01.08
2. ARP : Address Resolution Protocol  (0) 2024.12.30
1. Link Layer - 2  (0) 2024.12.26