티스토리 뷰
이 포스트는 「Computer Networks: A System Approach , By L.Peterson , 5th, 2011」을 참고하여 작성했습니다.
지금까지 점대점 링크의 계층 1에 속하는 하드웨어 구성요소와 인코딩에 대해 살펴보았다.
프레이밍
프레이밍은 계층2로서 두 노드 사이의 프레임 교환에 이용된다.
패킷 네트워크에서 데이터를 끝없이 보낼 수 없다. 그렇기에 비트를 하나의 묶음으로 자르는 것을 프레임이라고 한다.
즉, 수신하는쪽이 프레임을 인식할 수 있도록 송신하는 쪽에서 봉투를 씌워 묶는 것을 프레이밍이라고 한다.
프레이밍은 전형적으로 네트워크 어댑터에서 구현된다. 네트워크 어댑터는 호스트 메모리로 부터 프레임(데이터+헤더 일부분)을 넣고 가져오는 작업을 진행한다.
프레이밍에는 대표적으로 바이트 중심 프로토콜과, 비트 중심 프로토콜이 있다.
바이트 중심 프로토콜(Byte-Oriented Protocols)에는 보초방법(Sentinel approach)이 있다.
보초 방법이란 프레임을 짜는 방법 중 하나로 초기에 많이 사용되었던 방법이다.
위와 같은 구조를 가지고 있으며 STX부터 TEXT가 시작되어 ETX에서 끝나게 된다. CRC는 오류 검출을 위한 필드이다.
다만, 이 방법은 데이터 부분에서 ETX문자가 나올 경우 데이터가 끊기는 문제가 생기게 된다.
이를 해결하기 위하여 DLE문자를 ETX문자 앞에 부착하여 해결한다. C언어에서 문자열을 읽을 때 "(큰따옴표)를 이용하여 문자를 묶어 그게 문자열의 끝을 확인하는 것과 비슷한 원리라고 생각하면 된다.
다음 방법에는 바이트 수 방법(Byte Counting approach)이 있다.
이 방법은 Count(개수)항을 통하여 에러를 검출한다.
비트 중심 프로토콜에는 HDLC가 존재한다. 이는 특별한 bit를 프레임의 앞과 뒤에 붙여 프레임을 구분하는 방법이다.
이 때 사용하는 비트는 '01111110'과 같은 형태를 띠고 있다. 따라서 만약 메시지에 1이 5개 등장할 경우 0을 삽입하여 프레임 구분에 혼선이 없도록 한다.
오류 검출
컴퓨터 통신에서 오류는 존재할 수 밖에 없다. 그렇기에 오류처리는 통신에서 매우 중요하다.
오류 검출 코드(EDC)는 데이터에 오류가 있는지 없는지를 알아내는 부가 데이터이다(EX. parity)
EDC는 데이터보다 반드시 작아야 하며, 오류 검출률이 높아야하며, 시간이 적게 소모되어야 한다.
만약 EDC가 데이터보다 크다면 배보다 배꼽이 큰 모순적 상황이 발생하게 된다.
송신자는 특정한 함수에 데이터를 넣어 DC를 만들어 보내게 되고, 수신자는 EDC를 통해 데이터를 확인하게 된다.
그러나, 만약 같다고 하더라도 그게 오류가 0%라고는 확신할 수 없다. 오류가 없다고 "간주"할 뿐이다.
오류 검출에서 가장 유명한 방법에는 CRC(순회 중복 검사)가 있다.
이는 체크섬알고리즘 등 더하기를 사용하는 것보다 더 복잡한 나누기를 이용하여 오류 검출을 진행한다.
송신자와 수신자가 젯수를 약속한 뒤에, 보낼 메시지에 M에 추가되는 정보 F를 붙여 보내고 수신자는 M+F를 젯수인 C로 나누어 나누어 떨어지다면 해당 데이터는 오류가 없다고 "간주"하는 코드가 된다.
CRC는 XOR연산을 통해 구현되며 CRC의 오류검출률은 젯수인 C의 값과 관계가 크다. 즉, C를 정하는 것이 오류 검출의 효율을 좌우하게 된다. 이는 수학적 분석을 통하여 구현하게 되며, 일반적으로 32비트 코드를 사용 시 1500바이트 이상의 데이터에 대해서도 99.99%의 검츌율을 보인다.
신뢰성 있는 전송
위에 살펴본 방법은 하드웨어에서 이루어지는 방법들이다. 이제는 소프트웨어에서 이루어지는 방법에 대해 보겠다.
크게 1.오류 수정 코드와 2. 자동 반복 요청으로 이루어진다.
오류 수정코드(ECC)는 2차원 패리티 등을 이용하여 잘못된 데이터가 전송되었을 시 수신자 쪽에서 코드를 수정하도록 한다. 그러나 이는 부가 정보가 커진다는 단점이 있다.
자동 반복 요청(ARQ)는 ACK와 TIME OUT을 이용하여 역방향 수정이 이루어지게 된다. 즉, 전달이 안되었을 경우 데이터를 다시 보낸다. 일반적으로 컴퓨터 통신에선 ARQ방법이 더 많이 쓰인다.
송신자가 Frame을 보내고 수신자는 Frame이 잘 도착하면 잘 도착했다는 의미로 ACK를 송신자 측에 보내게 된다. ACK 역시 프레임으로 구성되어 있다. 만약 송신자 측에 ACK가 도착하지 않거나 Time out이 발생한다면 전달이 안된 것으로 간주하고 버퍼에 있던 데이터를 재전송한다.
프레임을 구분하기 위하여 프레임에 순서 번호를 붙여 전송하게 된다. ACK도 마찬가지로 순서번호를 붙인다.
ARQ에서 통신이 이루어지는 그림과 효율을 아래와 같이 나타낼 수 있다.
위와 같은 구조에서 링크의 효율은 Tf/Tf+Tp+Tp로 나타낼 수 있다.
Lecture Note #7에서 계속..
'Lecture Note > 컴퓨터 통신' 카테고리의 다른 글
컴퓨터 통신(CC) Lecture Note #5 (0) | 2020.10.06 |
---|---|
컴퓨터 통신(CC) Lecture Note #4 (0) | 2020.09.30 |
컴퓨터 통신(CC) Lecture Note #3 (0) | 2020.09.21 |
컴퓨터 통신(CC) Lecture Note #2 (0) | 2020.09.15 |
컴퓨터 통신(CC) Lecture Note #1 (0) | 2020.09.10 |
- Total
- Today
- Yesterday
- 컴퓨터 구조
- java
- 스레드
- 구현
- 알고리즘
- 컴퓨터 통신
- 벨만포드
- 중앙대학교
- 자바스크립트
- nest.js
- boj
- 세그먼트 트리
- 동적계획법
- dfs
- typeORM
- nestjs
- 그리디
- 시뮬레이션
- BFS
- 예외처리
- node.js
- 백트래킹
- Computer Architecture
- 그래프
- ReactNative
- 자바
- nodeJS
- 재귀
- 투포인터
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |