ComputerScience/Network

컴퓨터통신 - 10. Framming, 오류검출

jsdysw 2021. 10. 12. 16:50
728x90

1. Framming

- 데이터를 끊임없이 계속 보낼 수는 없다.

- 따라서 비트들의 연속을 묶음들로(frame) 잘라서 보낸다.

- 이때 frame을 보낼때 추가로 처음, 끝 등의 정보들을 추가한다.

- 이 작업은 2계층에서 이루어진다.

- 1계층에서 신호를 하나씩 bit로 바꾸어 보낸다면 2계층에서는 데이터+헤더로 묶음처리해서 보낸다.

2. Byte Oriented Protocols

- frame을 바이트 중심으로 해석하는 방법이다.

 

Sentinel Approach (보초 방법)

- syn : 수신자에게 frame 수신을 알리는 문자이다

- soh : 헤더의 시작을 알리는 문자

- stx : body의 시작을 알리는 문자.

- etx : body의 끝을 알리는 문자.

 

ByteCounting Approach (바이트 수 방법)

- count가 body의 길이를 담고 있기 때문에 stx, etx가 필요없다.

3. Bit Oriented Protocols

- 비트 중심 프로토콜 중 하나인 HDLC프로토콜이다.

- 특별한 bit sequence를 프레임 앞뒤에 붙여서 프레임을 구분한다.

- 만약 이 특별한 비트 sequence가 body에 포함되면 어떡할까?

- bit stuffing으로 위 문제를 해결한다. 만약 메세지 중간에 연속되는 1이 5개가 나오면 무조건 0을 사이에 끼워서 보내는 것이다. 

- 수신자 입장에서 1을 연속해서 5개 받았다면 다음비트가 0, 10, 11인 경우를 고려하여 이해를 한다. (0인 경우는 끝 비트를 삭제, 10이라면 프레임의 끝, 11이라면 오류)

- 데이터를 보낼때 송신량이 늘어날 수 있다.

4. 오류 검출

- 데이터를 송수신 하는 과정에서 오류를 검출, 복구 하는 방법을 알아본다.

5. Error Detecting Code

- 데이터 영역 안에 오류가 있는지 없는지 알아내는 부가 데이터이다.

- 오버헤드가 될 수 있다.

- 송신자가 데이터로부터 EDC라는 검출 코드를 만들어서 함께 보낸다.

- 수신자도 받은 데이터로 똑같은 함수를 거쳐서 EDC를 만들어본다. 수신받은 코드와 동일한지 확인해서 수신이 맞게 되었는지 확인한다.

- 데이터의 상징성을 잘 나타낼 수 있는 f()을 고안해야 한다. 즉 오류 검출율을 높일 수 있는 함수를 고안하는 것이다.

- 만약 EDC가 너무 길면 오버헤드가 크기 때문에 data 보다는 당연히 작아야 한다.

- 즉 부하는 작되 오류 검출율은 높도록 하는 것이 중요하다.

6. Two Dimensional Parity

- 가로로 1개수가 홀수이면 parity bit는 1, 1개수가 짝수이면 parity bit는 0이된다.

- 세로로도 1개수가 홀수이면 Parity bit는 1, 1개수가 짝수이면 Parity bitsms 0이 되고 

- 이 2차원 parity bit가 일치하는지 확인하여 오류를 인식한다.

- 검출율은 떨어지지만 만약 한 비트만 틀렸다면 오류 위치를 식별/수정할 수 있다. 

7. Internet Checksum Algorithm

- ip protocol에서 사용하는 알고리즘이다.

- 메시지를 16-bit의 정수의 연속으로 간주하고각 정수들을 16-bit 1의 보수 연산을 사용하여 모두 더한다그리고 그 결과의 1의 보수를 얻는다이 16-bit 숫자가 체크섬(checksum)이다.

​- 검출율이 parity보다는 높지만 만족스러운 정도는 아니다.

8. CRC (Cyclic Redundancy Check)

- 오늘날 사용하고 있는 방법이다. crc는 네트워크 어댑터처럼 하드웨어 차원에서 계산된다.

- 약속된 비트패턴 C를 가지고 MF를 나눈 나머지가 0이 되도록 하는 F를 찾는다.

- 이 F가 EDC가 된다.

  • 더하기 보다 복잡한 나누기 사용 : 나머지를 오류 검출코드로 전송
  • 젯수로 사용될 송수신 사이에 약속된 비트 패턴 : C
  • 보낼 메시지 :  M
  • 오류 검출을 위해 추가되는 정보 : F (EDC)
    송신쪽
    • ( M || F ) % C = 0 이 되도록 F를 생성
    • ) C=1101, M= 10011010 이면
    • F = 101 를 생성 (10011010101  1101로 나누어 떨어짐)
    • ( M || F ) 10011010101 전송
    수신쪽
    • 수신된 메시지 전체를 C로 나누어서
    • 나누어 떨어지지 않으면 => 오류 발생
    • 나누어 떨어지면 => 오류 없는 것으로 간주

 

- 아래 연습을 한번 해보자.

- crc-32(비트) 방식은 오류 검출율이 매우 높은데 부하도 작다. 

- 결국 오류가 나지 않았다면 다 overhead이기 때문에 보내는 메시지의 크기에 따라 적절한 crc 표준 코드를 사용하면 된다.

- crc-32는 f가 32 bit라는 뜻이고 따라서 나누는 C는 33비트가 된다.

- crc는 body뒤에 위치한다. 왜냐햐면 데이터를 보내는 동시에 crc계산이 parallel하게 이루어지기 때문이다. 그래서 부하가 매우 적으면서도 높은 검출율을 보장하게 된다.

 

- 정리하면 데이터를 수신할때 올바르게 수신했는지 검출하기 위한 코드이며 송신자가 계산을 통해 생성하여 추가한 코드이다.

- crc-32는 검출율이 99.9...퍼센트로 매우 높으며 계산과정이 하드웨어 구현이 되어있어 부하가 매우 적다.

- 나눈 나머지가 0이면 오류가 없다고 간주하고 0이 아니면 오류라고 간주한다.

- 여러 계층에서 중복으로 오류 검사를 하기 때문에 0.000000...00001의 검출 오류를 커버한다.

728x90
반응형