학습 목표
- 주소지정 방식의 개념을 설명할 수 있고 분류할 수 있다.
- 오류의 개념과 오류제어방식을 설명할 수 있다.
- 다양한 오류검출 방식으로 오류를 검출할 수 있다.
- 귀환오류제어 및 전진오류정정을 설명할 수 있다.
주소지정
- 주소지정 (addressing)
- 명명(naming), 식별(identification)
- 컴퓨터 통신망에서 사용자(컴퓨터, 파일 등)를 식별하는 방법
- 문자 또는 수를 이용
- 배경
- 모든 통신 지국의 쌍이 전용 링크(선)를 갖고 있으면 주소지정은 필요 없음.
- 그러나 컴퓨터 통신망은 ICT 자원(resource)을 공유함.
- 따라서 ICT 자원의 공유를 위해 주소지정이 필요함.
주소 지정 방식
주소 지정 방식을 분류하는 4가지 방법을 알아보자.
- 계층의 수
- 부 네트워크가 제공하는 주소 서비스
- 같은 주소를 갖는 지국의 수
- 단일 지국
- 복수 지국
- 복수 목적지 주소, 그룹 주소
- broadcasting 주소(단톡방에 모두 전송), flooding 주소 (송신자 빼고 모든 수신자에게 전송)
- 주소 할당 모드 (ex. 고정 IP-정적주소, IP가 부분적으로 변경-동적주소)

논리주소 및 물리주소
- 예: 한국방송통신대학교
- 논리주소: 203.232.172.106 // 32비트. 10진수 (4byte)
- domain name: www.knou.ac.kr
- 물리주소: 00:13:77:52:67:78 // 48비트, 16진수 (6byte)
오류제어
1. 오류와 오류제어
오류
- 오류 (error)
- 송신 데이터 != 수신 데이터
- 송신 데이터가 조어진 시간 안에 수신측에 도착하지 못한 경우
- 오류 발생 이유
- 잔류오류율(RER: Resicual Error Rate)
- 오류가 있는 비트[문자, 블록] 수 / 전송된 총 비트[문자, 블록] 수
- 100개중 1개 = 1%
오류제어
- 오류제어
- 잡음, 고장 등의 영향에 대비하여 잔류요류율(RER)을 주어진 한계 이내로 유지하는 통신 기능
- 오류 제어 방식
- 후진오류제어(backward error control)
- 전진오류정정(forward error correction)
2. 오류 검출 방식
- 패리티(parity) 검사
- 검사합(checksum) 검사
- 순환잉여검사(CRC: Cyclic Redundancy Check)
패리티(parity) 검사
- 패리티(parity) 전략: 데이터 전송 시 페리티 비트를 하나 더 추가한다.
- 홀수 패리티(odd parity) 전략
- 내가 보내는 비트를 포함해 모든 비트의 1의 개수가 홀수개
- 짝수 패리티(even parity) 전략
- 내가 보내는 비트를 포함해 모든 비트의 1의 개수가 짝수개
- 단순(1차) 패리티 검사 (홀수 패리티 이용)

- 단, 동시에 짝수개의 비트 오류가 있는 경우 오류를 검출하지 못함.
- 2차원 패리티 검사 (짝수 패리티 이용)
- 수평, 수직 2종류의 패리티 비트를 전송.
- 수평, 수직 모두 짝수개여야 하므로, 짝수개의 비트오류도 검출 가능
검사합(Check Sum) 검사
검사합 생성기
- 데이터를 세그먼트로 분할
- 세그먼트들을 2진수로 간주하고 합함
- carry bit도 합함
- 합한 결과를 1의 보수로 만듦(==> check sum)
- 예: 데이터 Networs의 전송
- 4개의 세그먼트로 나누고, 각 2진수들을 모두 더한다. (carrybit가 생기면 그것도 같이 더해준다.)
- 이후 1의 보수를 취해준다.


검사합 검사기
- 비트열을 수신하여 세그먼트로 분할
- 세그먼트들을 2진수로 간주하고 합함
- carry bit도 합함
- 합한 결과를 1의 보수로 만듦
- 이 결과가 0이면 오류 없음
-
예: 데이터 Networs의 수신

- 수신측에서는 4개의 세그먼트와 checksum(검사합)까지 더한다. 그리고 1의 보수를 취하면, 결과가 0이 나오게 된다.이 경우 결과가 오류 없다고 판단할 수 있다.
-
검사합 검사기

- 8비트 데이터를 4비트 사이즈로 쪼갠다. (0010, 0110)
- 둘을 더한다 (0010 + 0110): 초록색
- 보수를 취한다 (0111): 주황색
- 보내는 쪽은 초록색과 오랜지색 3개를 보낸다.
- 받는 쪽은 주황색과 초록색 2개를 더한 뒤, 보수를 취한다
순환 잉여 검사(Cyclic Redundancy Check)
- 패리티 검사: 문자 단위 검사
- 순환 잉여 검사: 비트의 블록(block) 단위 검사
- 사진, 소리, 영상 등의 데이터 전송에서 활용
- block [또는 frame] 끝에만 오류제어정보 첨가
- BCC (Block Check Character)
- FCS (Frame Check Sequence)
- 두개 같은거. Block이란 표현을 사용하면 BCC, Frame이란 표현을 사용하면 FCS라고 부름.
BCC 생성 과정
- 비트의 다항식 표현 ==> M(X) (m(x) = ax^3 + bx^2 + cx + d)
- 비트랑 1:1로 대응되는 다항식으로 표현한다.
- 생성다항식 (G(X))에 의한 부호(code)화
M'(X) = M(X) * X^m
(m은 G(X)의 최상위 차수)
- M'(X)를 G(X)로 나누어 나머지 R(X)를 구함
M'(X) / G(X) = M''(X) ... R(X)
- ==>
M'(X) = G(X) * M''(X) + R(X)
- F(X) = M'(X) + R(X) <= BCC
참고: 생성다항식

참고: 모듈로-2 연산

오류 검사 과정
- 수신된 BCC(F(X))를 이용한 오류 검사
- BCC를 동일한 생성다항식(G(X))으로 나누어
- 나머지가 없으면 ==> 오류 없음
- 나머지가 있으면 ==> 오류 있음
- 이유
- F(X) / G(X) = {M'(X) + R(X)} / G(X)
= {G(X) M''(X)) + R(X) + R(X) } / G(X)
- R(X) + R(X)는 0 (모듈러-2 연산에 의해 같은걸 더하는 경우 0이 됨)
= {G(X) M''(X)} / G(X)
= M''(X) (나머지 없음)
예시
-
BCC 생성
- M(X)에 G(X)의 가장 큰 차수(m)만큼 X^m을 곱해준다.
- M'(X)를 G(X)로 나누어 나머지 R(X)를 구한다.
- M'(X) + R(X)로 F(X)를 만들어 BCC를 만든다.
-
오류 검사 과정 (파란 부분은 오류 부분)
- 수신된 BCC를 기반으로, 수신측에서 F(X)를 만들어 본다. (아직 수신 정보의 정확성은 알지 못한다.)

- 나머지가 존재하므로 전송에 오류가 있었음을 알 수 있다.
3. 귀환 오류제어
오류제어 방법의 분류

- 귀환오류제어: 오류 검출 시 재전송 요청
- 전진오류정정: 오류 검출 시 어떻게든 정정까지 수행
귀환 오류 제어
- 지국 사이의 역방향 채널을 이용하는 오류제어 방법
- 귀환오류제어의 분류(오류 검출 위치)
- 오류가 발생되었다는 결정 장치가 송신측인지, 수신측인지에 따라 이름이 바뀐다.

결정 귀환
- 오류 검출의 위치가 수신측에 있는 경우
- ARQ (Automatic Repetition reQuest) 자동으로 반복적으로 요청
-
- 데이터를 문제없이 받았으면 ACK, 수신 오류시 REJ("다시 보내")를 전송
정보 귀환
- 오류 검출의 위치가 송신측에 있는 경우

- 수신측에서 BCC를 붙여서 송신측으로 보낸다. 보낸쪽에서 오류 검출을 확인. 정상인 경우메나 다음 블럭(B)를 보낸다.
- 송신측에서 오류 검사 후, 오류 발생시 다시 B를 보낸다.
복합 귀환
- 오류율을 줄이기 위해 오류제어방법을 복합적으로 이용
- 결정귀환 및 정보귀환을 이용 (동시에 같이 사용)
- 수신측에서 오류 검출하면 => REJ 송신
- 수신측에서 오류 검출 못하면 => 정보귀환 방식으로 BCC 송신
- 결정귀환 및 전진오류정정(FEC)을 이용
- 수신측에서 오류 검출하면 => REJ 송신
- 송신측에서는 전진오류정정 방식으로 송신
- 전진오류정정 방식: 오류 발생시 받은 수신측에서 직접 고치도록 하는 것.
ARQ
- ARQ: Automatic Reqpeat reQuest
- 정지-대기 (stop-and-wait) ARQ
- 연속적 (continuous) ARQ
- N-프레임 후퇴 (go-back-N) ARQ
- 선택적 반복 (selective-repeat) ARQ
- 적응적 (adaptive) ARQ
- 정지-대기 (stop-and-wait) ARQ
- 1개의 데이터 프레임을 송신하고 기다림
- (하나의 전송 단위만큼 기다린다: ACK, REJ, 대기시간)
- ACK를 수신하면 다음 프레임을 송신 후 기다림
- REJ를 수신하면 처음 프레임을 재송신후 기다림
- 대기시간을 초과하면 처음 프레임을 재송신 후 기다림
- 특징
- 구현이 단순, 비용(버퍼)이 저렴
- 전송효율이 떨어짐 (기다리는 시간)
- 연속적 ARQ (전송 효율을 높이기 위해 데이터를 많이 보냄)
- 여러 개의 데이터 프레임을 송신하고 기다림
- 1) go-back-N ARQ
- window size만큼 보내고, 오류 발생시 그 사이즈(n)만큼 뒤(back)로 돌려 다시 window size만큼 전송한다. NAK(4)로 왔으면 4부터 다시 전송
- sliding window

- 2) Selective-Repeat ARQ
- NAK(1)로 오면 거의 window size를 전부 다시 보내야 함.(비효율적) 그래서 선택적으로 "오류가 발생한 애"만 다시 보내자는 생각으로 사용
- 여러 개의 데이터 프레임을 송신하고 기다림
- 특징
- 전송 효율이 go-back-N ARQ 보다 높음
- 프레임의 송수신 순서가 달라 재배열이 필요한 문제 등 복잡
- 3) 적응적(Adaptive) ARQ
- 프레임의 길이를 동적으로 변경시키는 방법
- 수신측에서 받을 수 있는 window size를 확인하고, 거기서 수용 가능한 사이즈만큼 유동적으로 늘리고 줄여가며 전송하는 방식
- 수신측은 통신오류발생률을 송신측에 통보
- 송신측은 그에 적합한 프레임 길이로 전송함
- 전송 효율을 높이기 위해
- 오류발생률이 높을 때 짧은 프레임으로 전송
- 오류발생률이 낮을 때 긴 프레임으로 전송
- 구현이 매우 복잡한 단점
4. 전진 오류 정정
- 전진오류정정 (Forward Error Correction)
- 수신측에서 오류 검출 및 정정까지 할 수 있는 방식
- 연속적인 데이터의 흐름이 필요하고 역방향 채널의 제공이 어려울 때 많이 사용 예) 화성에 데이터 보낼때. 화성에서 다시 보내오는 역방향이 너무 힘드니, 오류 정정 정보까지 같이 전송한다.
- 오류정정 코드를 전송
- 데이터 프레임에 잉여 비트를 추가하여 만ㄷ름
- 헤밍(Hamming) 코드
- 리드-뮬러(Read-Muller) 코드
- 리드-솔로몬(Read-Solomon) 코드 등
- 잉여 비트의 크기만큼 전송효율이 떨어지는 단점
Reference
너무 정리를 잘하셨네요. 저도 이번에 시험 보는데 화이팅입니다~