물리 계층과 네트워크 계층 사이에 위치한 "2계층, 데이터링크 계층(Data Link Layer)"에 대해 설명해보겠습니다.
1. 데이터 링크 계층(Data Link Layer)이란?
물리 계층이 전송하는 비트 단위의 데이터를 신뢰성 있게 전달하기 위해 프레임 단위로 규격화하고, 인접한 노드 간의 통신을 제어하는 계층입니다.
2. 주요 역할과 기능
데이터 링크 계층의 주요 역할은 4가지정도 있습니다.
① 프레이밍 (Framing)
물리 계층에서 올라온 0과 1의 비트 열에 헤더(Header)와 트레일러(Trailer)를 붙여 데이터의 시작과 끝을 구분합니다. 이렇게 만들어진 데이터 단위를 프레임이라고 합니다.
② 물리적 주소 지정 (MAC Addressing)
네트워크 카드(NIC)에 할당된 48비트의 고유 주소인 MAC 주소를 사용합니다. 3계층의 IP 주소가 '최종 목적지'라면, 2계층의 MAC 주소는 '다음 정거장'을 찾아가는 주소입니다.
③ 흐름 제어 (Flow Control)
송신측과 수신측의 처리 속도 차이를 해결합니다. 수신측이 감당할 수 없을 정도로 빠르게 데이터를 보내면 잠시 멈추거나 천천히 보내도록 조절합니다.
④ 에러 제어 (Error Control)
전송 중에 발생한 데이터 손상을 검출합니다. 주로 CRC(Cyclic Redundancy Check) 방식을 사용하여 프레임 끝에 체크섬을 붙여 보냅니다.
위의 설명에서 에러 제어에서 CRC를 주로 사용한다했지만, 그 외에 패리티 검사, 체크섬과 같은 방식들이 더 있습니다. CRC를 포함한 3가지 검출 방법은 다음과 같습니다.
패리티 검사 (Parity Check)
가장 단순한 형태의 오류 검출 방식입니다. 전송하는 데이터 비트들에 1개의 '패리티 비트'를 추가하여, 전체 비트 중 '1'의 개수를 짝수또는 홀수로 맞춥니다.

- 한계: 1비트의 오류는 찾아낼 수 있지만, 2개의 비트가 동시에 오류가 나면 검출하지 못합니다. 이를 해결하기 위해 2차원 패리티 검사도 존재합니다.
체크섬 (Checksum)
전송할 데이터를 일정한 크기로 자른 뒤, 이들을 모두 더하고 1의 보수(비트 반전)를 취한 값을 데이터 끝에 붙여 전송하는 방식입니다.

- 특징: 수신측은 받은 데이터와 체크섬을 모두 더했을 때 결과가 전부 '1'이 나오는지 확인하여 오류를 판별합니다.
순환 중복 검사 (CRC, Cyclic Redundancy Check)
이더넷과 와이파이 등 현재 네트워크 어댑터(NIC) 하드웨어에서 가장 널리 쓰이는 강력한 방식입니다. 다항식 연산을 기반으로 합니다.

- 작동 방식: 송신측과 수신측이 사전에 약속한 '생성 다항식(Generator)'으로 데이터를 나눈 '나머지(FCS)'를 프레임 끝에 붙여 전송합니다. 수신측에서 다시 나누어 떨어지지 않으면 오류로 간주하여 프레임을 폐기합니다.
다음은 데이터 링크 계층에서 가장 중요한 문제 중 하나인 다중 접속 프로토콜(Multiple Access Protocol)에 대해서 알아보겠습니다.
다중 접속 프로토콜(Multiple Access Protocol)?
하나의 공유 매체(ex: 허브로 연결된 선, 와이파이 주파수)에 여러 노드가 동시에 데이터를 보내면 충돌(Collision)이 발생합니다. 이를 해결하는 방식(MAC 프로토콜)은 크게 3가지 정도가 있습니다.
1. 채널 분할 (Channel Partitioning)
채널을 시간(TDMA)나 주파수(FDMA)단위로 쪼개어 각 노드에게 고정적으로 할당하는 방식입니다.
주파수 분할 다중접속(FDMA), 시분할 다중접속(TDMA), 코드 분할 다중 접속(CDMA)등이 있습니다.
주파수 분할 다중 접속(FDMA)
전체 주파수 대역을 여러 개의 좁은 주파수 채널로 쪼개어 각 사용자에게 하나씩 할당하는 방식입니다

시분할 다중 접속(TDMA)
주파수를 쪼개는 대신, 시간을 아주 짧은 조각(Time Slot)으로 쪼개어 사용자들이 번갈아 가며 하나의 주파수 대역을 전체 다 쓰는 방식입니다.

코드 분할 다중 접속(CDMA)
주파수도 나누지 않고, 시간도 나누지 않습니다. 모든 사용자가 동일한 주파수 대역을 동일한 시간에 통째로 사용합니다. 대신, 사용자마다 고유한 수학적 암호 코드(Chipping Sequence)를 부여하여 데이터를 구별합니다.
2. 랜덤 접속 (Random Access)
랜덤 접속에는 크게 3가지 방식 정도가 있습니다.
- 전송할 데이터가 있는 노드는 매체가 비어있으면 일단 전송 시도(현재 가장 널리 쓰임)
- CSMA/CD(Carrier Sense Multiple Access / Collision Detection)
- CSMA/CA(Carrier Sense Multiple Access / Collision Avoid)
CSMA / CD
"말하기 전에 듣고, 말하면서도 듣는다."가 기본 전제입니다. 충돌을 감지(Detection)하면 전송을 즉시 멈추고 잼 신호를 보낸 뒤, 랜덤한 시간 동안 대기했다가 재전송합니다.

- Carrier Sense : 전송 전, 케이블에 다른 데이터가 흐르고 있는지 확인합니다.
- 전송 및 감지: 회선이 비어있으면 데이터를 보냅니다. 중요한 점은 데이터를 보내는 와중에도 계속 회선의 상태를 모니터링한다는 것입니다.
- 충돌 감지 및 Jam 신호 전송: 만약 전송 중 충돌이 감지되면, 전송을 즉시 멈추고 네트워크 상의 모든 노드에게 "모두 데이터 전송 멈춰"라는 의미의 재밍 신호를 보냅니다.
- 랜덤 대기 후 재전송 : 충돌을 겪은 노드들은 잠시 대기했다가 다시 전송을 시도합니다. 이때 무작정 기다리는 것이 아니라 임의 지수 백오프(Binary Exponential Backoff) 알고리즘을 사용합니다. 충돌 횟수가 늘어날수록 대기 시간의 범위가 2^n배로 기하급수적으로 늘어나, 네트워크 혼잡을 효과적으로 줄입니다.
CSMA / CA
무선은 충돌 감지가 어려워, 충돌을 사전에 회피(Avoidance)하기 위해 데이터를 보내기 전 짧은 제어 메시지(RTS/CTS)를 교환하여 채널을 예약합니다.

- Carrier Sense : 채널이 비어있어도 바로 보내지 않고, DIFS라는 규정된 시간만큼 무조건 대기한 후, 추가로 랜덤한 시간을 더 기다립니다.
- RTS (Request to Send): 데이터를 보내기 전, 수신자(공유기)에게 "곧 데이터 보낼거니까, 채널 예약함"이라는 짧은 예약 문자를 보냅니다.
- CTS (Clear to Send): RTS를 받은 수신자는 주변의 모든 노드에게 "~제외하고 당분간은 데이터 전송 X"라는 허락 문자를 보냅니다.
- 데이터 전송 및 ACK : 무선은 충돌 감지가 안 되므로, 데이터를 다 보냈다고 끝이 아닙니다. 수신자가 데이터 훼손 없이 잘 받았다라는 ACK 응답을 보내줘야만 비로소 한 번의 통신이 성공적으로 끝납니다.
3. 순번 프로토콜 (Taking-turns)
마스터 노드가 각 노드에게 전송 권한을 순서대로 부여(Polling)하거나, '토큰(Token)'이라는 특수한 프레임을 가진 노드만 데이터를 전송할 수 있게 하는 방식입니다.
Polling 방식
마스터 노드는 각 노드를 라운드 로빈 방식으로 폴링을 합니다. 랜덤 접속 프로토콜의 단점을 극복했지만, 노드가 전송할 수 있음을 알리는 데 걸리는 시간인 폴링 지연과 마스터 노드 고장 시 전체 채널 동작 불가라는 단점이 있습니다.

- 지정: 중앙 장치가 특정 노드에게 "데이터가 있냐?"라고 묻습니다.
- 응답: 데이터가 있다면: 데이터를 전송합니다. 없으면 없다고 알립니다.
- 다음 순서: 답변을 들은 중앙 장치는 다음 번호의 노드에게 가서 똑같이 묻습니다. 이 과정을 무한 반복합니다.
Token Passing 방식

- 토큰 순환: 네트워크상에 '토큰'이라는 특수한 프레임이 노드들 사이를 일정한 순서로 계속 빙글빙글 돕니다.
- 권한 획득: 데이터를 보내고 싶은 노드는 자기 차례에 온 비어있는 토큰을 잡습니다.
- 데이터 전송: 잡은 토큰에 자신의 데이터와 목적지 주소를 실어서 다음 노드로 보냅니다.
- 수신 및 확인: 목적지 노드는 데이터를 복사하고, 데이터가 잘 도착했다는 표시를 해서 다시 돌려보냅니다.
- 토큰 해제: 데이터를 다 보낸 송신 노드는 토큰을 다시 '비어있는 상태'로 만들어 다음 노드에게 넘겨줍니다.
다음은 데이터 링크 계층에서 빼놓을 수 없는 MAC(Media Access Control) 주소입니다.
MAC 주소란?
IP 주소는 위치에 따라 변할 수 있습니다. 그러나 MAC 주소는 네트워크 인터페이스 카드가 생산될 때 부여받는 "고유한 하드웨어 식별 번호" 입니다.

보통 48비트(6바이트)로 구성되어 있으며, 일반적으로 1A:2B:3C:4D:5E:6F 이렇게 16진수로 표기합니다. 크게 두 부분으로 나뉘는데 앞의 24비트는 IEEE에서 벤더에게 할당하는 고유 회사 식별자인 OUI, 뒤 24비트는 제조사가 자사 제품에 일련 번호처럼 겹치지 않게 자체적으로 할당하는 UAA로 이루어져있습니다.
다음은 ARP(Address Resoulution Protocol)입니다.
ARP(Address Resolution Protocol)이란?
ARP는 네트워크 계층인 3계층과 데이터 링크 계층인 2계층을 잇는 역할을 해줍니다. 흔히 우리는 IP주소를 논리적 주소, MAC주소를 물리적 주소라고 칭하는데, 목적지의 IP 주소는 알지만 MAC 주소를 모를때, IP 주소를 MAC 주소로 변환해주는 필수 프로토콜이 ARP라고 할 수 있습니다. 데이터를 이더넷 프레임으로 포장하기 위해서는 반드시 목적지의 MAC 주소가 필요하기 때문입니다.

ARP의 동작 과정은 크게 2가지로 나누어져있습니다.
1. ARP Request(브로드캐스트) : IP 주소 "123.10.20.2"를 가진 사람, MAC 주소 알려주세요~"라는 메시지를 브로드캐스트로 네트워크 전체에 뿌립니다.
2. ARP Response(유니캐스트) : 해당 IP를 가진 장비가 "오케이. 내 MAC 주소는 00:1b:63:84:45:e6 야" 라고 요청자에게만 응답합니다.
이더넷(Ethernet)
이더넷은 현재 유선 로컬 영역 네트워크(LAN)에서 가장 널리 사용되는 기술 표준입니다. 1계층과 2계층의 스펙을 정의합니다.
이더넷의 프레임 구조에 대해셔 알아보자면,

1. Preamble과 SFD (8바이트) : 프레임의 시작을 알리고 수신측과 비트 동기화를 맞추는 신호입니다.
2. Destination MAC (6바이트) : 목적지 MAC 주소
3. Source MAC (6바이트) : 출발지 MAC 주소
4. EtherType (2바이트) : 페이로드에 담긴 데이터가 상위 계층의 어떤 프로토콜인지 알려줍니다.
5. Payload(Data) (46 ~ 1500바이트) : 상위 계층에서 내려온 실제 데이터입니다.
6. FCS(Frame Check Sequence, 4바이트) : CRC알고리즘을 사용해 프레임이 전송 중 손상되지 않았는지 검사하는 체크섬입니다.
링크 계층 스위치(Switch)
단순히 전기 신호를 복제하는 1계층 장비인 허브(Hub)의 한계를 극복하고, 충돌 도메인(Collision Domain)을 분할하여 네트워크 성능을 획기적으로 높인 장비입니다.

스위치의 4가지 핵심 기능
- Learning (학습): 스위치의 포트로 프레임이 들어오면, 프레임의 출발지 MAC 주소를 읽어 'A포트에는 MAC 1번이 있네'하고 MAC 주소 테이블(CAM Table)에 기록합니다.
- Forwarding (전달): 목적지 MAC 주소가 테이블에 있으면, 해당 포트로만 프레임을 보냅니다.
- Filtering : 출발지와 목적지가 같은 포트에 연결된 장비끼리 통신하는 경우, 다른 포트로 프레임이 나가지 않도록 막아 대역폭을 절약합니다.
- Flooding (플러딩): 목적지 MAC 주소를 테이블에서 찾을 수 없거나(Unknown Unicast), 브로드캐스트/멀티캐스트 트래픽일 경우, 들어온 포트를 제외한 모든 포트로 프레임을 복제해서 뿌립니다.
스위칭 방식:
- Store-and-Forward: 프레임 전체를 다 받은 후 FCS(에러 검사)까지 마치고 전송합니다.
- Cut-Through: 목적지 MAC 주소만 읽고 바로 포워딩을 시작합니다.
'CS > 네트워크' 카테고리의 다른 글
| [OSI 7계층] 물리 계층(Physical Layer) (0) | 2026.03.26 |
|---|---|
| [OSI 7계층] 세션 계층(Session Layer) (0) | 2026.03.18 |
| [OSI 7계층] 표현 계층(Presentation Layer) (0) | 2026.03.18 |
| [OSI 7계층] 응용 계층(Application Layer) (1) | 2026.03.18 |