핵심 인사이트
- 블록 코딩(Block Coding)은 데이터 비트 그룹(4B, 8B)을 더 많은 비트 그룹(5B, 10B)으로 변환하여 DC 균형(DC Balance)·클럭 동기화·에러 감지 능력을 확보하는 라인 코딩 기법으로, 오버헤드(20~25%)를 감수하고 신호 신뢰성을 높인다.
- 4B/5B는 100BASE-TX 이더넷(FDDI)에서, 8B/10B는 기가비트 이더넷·파이버채널·USB 3.0에서 표준으로 채택됐으며, 더 효율적인 64B/66B가 10GbE 이상에서 8B/10B를 대체하고 있다.
- DC 균형이 중요한 이유는 광섬유와 AC 결합 회로가 직류(DC) 성분을 전달하지 못하므로, 연속적인 0 또는 1이 없도록 인코딩하여 클럭 복원과 신호 완전성을 보장해야 하기 때문이다.
Ⅰ. 블록 코딩의 필요성
블록 코딩이 필요한 이유:
문제 1: DC 성분 문제
연속 0 또는 1 → 직류 성분 발생
광섬유, 변압기 결합 = AC만 전달
→ 신호 손실 및 왜곡
문제 2: 클럭 동기화
수신측은 데이터에서 클럭을 추출
연속 0이나 1이 많으면 클럭 복원 불가
→ 비트 경계 파악 실패
문제 3: 에러 감지
원시 데이터 = 에러 감지 능력 없음
블록 코딩 해결 방법:
m비트 → n비트 (n > m) 변환
변환 테이블에서 제외된 코드 = 에러 검출용
DC 균형 보장 코드만 테이블에 포함
블록 코딩 종류:
4B/5B: 4비트 → 5비트 (오버헤드 25%)
8B/10B: 8비트 → 10비트 (오버헤드 25%)
64B/66B: 64비트 → 66비트 (오버헤드 3.1%)
128B/130B: 128비트 → 130비트 (오버헤드 1.5%)
📢 섹션 요약 비유: 블록 코딩은 메시지 암호화 — 원본 4글자 메시지를 5글자 코드로 바꾸는데, 이 5글자 코드에는 "의미 있는 것"만 허용하고 나머지는 에러로 판별.
Ⅱ. 4B/5B 코딩
4B/5B 코딩 (FDDI, 100BASE-TX):
원리:
4비트(16가지) → 5비트(32가지)
16가지 데이터 코드 + 제어 코드 배정
16가지 미사용 = 에러 검출용 (또는 금지)
규칙:
각 5비트 코드: 연속 0 최대 3개
클럭 동기화 가능한 코드만 선택
4B/5B 코드 예시:
Data | 5B Code | 설명
-----|---------|---------
0000 | 11110 | DC 균형
0001 | 01001 |
0010 | 10100 |
0011 | 10101 |
0100 | 01010 |
0101 | 01011 |
0110 | 01110 |
0111 | 01111 |
1000 | 10010 |
... | ... |
1111 | 11101 |
제어 코드:
11111: 유휴 (Idle)
11000: 시작 구분자
01101: 종료 구분자
결합: 4B/5B + MLT-3 라인 코딩
100BASE-TX = 4B/5B 후 MLT-3 적용
125 Mbaud × 4/5 = 100 Mbps 실제 데이터율
📢 섹션 요약 비유: 4B/5B는 4글자 단어를 5글자로 표기하는 비밀 코드 — 허용된 5글자 목록에 없는 것이 오면 "에러"로 판단!
Ⅲ. 8B/10B 코딩
8B/10B 코딩 (기가비트 이더넷, FC, USB 3.0):
원리:
8비트(256가지) → 10비트(1024가지)
256가지 데이터 + 제어 심볼(K-codes)
나머지 = 금지/에러 코드
분할 인코딩:
8비트를 5비트 + 3비트로 분할
5비트 → 6비트 (5B/6B)
3비트 → 4비트 (3B/4B)
결합: 6+4 = 10비트
RD (Running Disparity):
누적 DC 불균형 추적
1의 개수 - 0의 개수 = +1 or -1 유지
매 심볼마다 균형 점검
K-코드 (제어 심볼):
K28.5: Comma Character (동기화)
K27.7, K29.7, K30.7: 기타 제어
8B/10B 장점:
최대 런렝스(연속 같은 비트): 5개 이하
DC 균형: 항상 보장
에러 감지: 금지 코드 = 즉시 에러 표시
클럭 복원: 용이 (transitions 보장)
단점:
25% 오버헤드 (8→10비트)
10GbE 이상: 64B/66B로 교체 (3.1% 오버헤드)
📢 섹션 요약 비유: 8B/10B는 회계 장부 균형 맞추기 — 항상 빌려간 것(0)과 빌려온 것(1)의 차이를 ±1 이내로 유지하는 자기 균형 코드.
Ⅳ. 64B/66B와 발전 방향
64B/66B 코딩 (10GbE, 25GbE, 100GbE):
원리:
64비트 데이터 → 2비트 동기 헤더 추가
동기 헤더: 01(데이터), 10(제어)
오버헤드: 2/66 ≈ 3.125%
장점: 8B/10B 대비 오버헤드 25% → 3.1%
단점: 동기화 패턴 보장 약함
(8B/10B보다 DC 균형 약함)
128B/130B (USB 3.1 Gen 2):
128비트 + 2비트 = 1.5% 오버헤드
더 높은 효율
진화 방향:
속도 증가 → 오버헤드 최소화
FEC (Forward Error Correction) 결합
100G+: 64B/66B + FEC 조합
비교:
코딩 | 오버헤드 | DC 균형 | 용도
--------|---------|---------|----------
4B/5B | 25% | 보통 | 100BASE-TX
8B/10B | 25% | 강함 | 1GbE, FC
64B/66B | 3.1% | 약함 | 10GbE+
128B/130B| 1.5% | 약함 | USB 3.1
📢 섹션 요약 비유: 블록 코딩 진화는 포장재 효율화 — 4B/5B는 100g 물건에 25g 포장, 64B/66B는 100g에 3g 포장 — 속도가 높아질수록 포장은 가벼워진다.
Ⅴ. 실무 시나리오 — 기가비트 이더넷
데이터센터 1GbE 링크 8B/10B 적용:
물리적 전송:
1GbE PHY 레이어에서 8B/10B 인코딩
전기/광 신호로 변환
논리 속도: 1 Gbps
물리 신호 속도: 1.25 Gbps (25% 오버헤드)
클럭: 125 MHz (1.25 Gbps / 10비트)
수신측 처리:
1.25 Gbps 신호 수신
K28.5 comma 심볼로 바이트 동기화
8B/10B 디코딩 → 원본 8비트 복원
금지 코드 감지 → 에러 플래그 설정
에러 감지:
정상 링크: 수십 분에 1개 에러 미만
금지 코드 검출 = 신호 왜곡/간섭 징후
sfp+ 광모듈 교체 필요 신호:
ifconfig eth0: errors 카운터 급증
dmesg: "PCS error detected"
네트워크 스위치 통계:
input errors = 8B/10B 금지 코드 수신
→ 케이블/광모듈/SFP 문제 진단 근거
📢 섹션 요약 비유: 8B/10B 에러 감지는 통화 중 잡음 감지 — 허용된 발음이 아닌 소리(금지 코드)가 오면 "신호 품질 나쁨" 경보.
📌 관련 개념 맵
블록 코딩 (4B/5B, 8B/10B)
+-- 필요성
| +-- DC 균형 (광섬유/변압기)
| +-- 클럭 동기화
| +-- 에러 감지
+-- 종류
| +-- 4B/5B: 100BASE-TX, FDDI
| +-- 8B/10B: 1GbE, FC, USB 3.0
| +-- 64B/66B: 10GbE+ (효율 개선)
+-- 핵심 개념
| +-- Running Disparity (RD)
| +-- K-코드 (제어 심볼)
| +-- 금지 코드 (에러 감지)
📈 관련 키워드 및 발전 흐름도
[4B/5B 코딩 (FDDI, 1990)]
100Mbps FDDI 네트워크 표준화
100BASE-TX 이더넷 채택
|
v
[8B/10B 코딩 (IBM, 1983; 1GbE 1998)]
기가비트 이더넷 PHY 표준
파이버채널, USB 3.0 채택
|
v
[64B/66B (10GbE, 802.3ae, 2002)]
오버헤드 25% → 3.1% 대폭 절감
10G/25G/100G 이더넷 표준
|
v
[128B/130B (USB 3.1, 2013)]
USB SuperSpeed 10Gbps
1.5% 오버헤드
|
v
[현재: FEC + 최소 오버헤드 코딩]
PAM4 변조 + 64B/66B + RS-FEC
400G/800G 이더넷 표준 진행 중
👶 어린이를 위한 3줄 비유 설명
- 4B/5B는 "10001000"처럼 같은 숫자가 너무 많이 반복되는 문제를 막으려고 4글자 → 5글자로 바꾸는 규칙이에요!
- 이 코딩 덕분에 수신기가 클럭(박자)을 쉽게 맞출 수 있고, 규칙에 없는 5글자가 오면 "에러!" 하고 알 수 있어요.
- 속도가 빨라질수록 오버헤드를 줄여야 해서 10기가 이더넷에서는 64B/66B(3.1% 오버헤드)로 더 효율적인 방식을 써요!