프로토콜이란. 프로토콜의 이해

2024. 7. 12. 11:38기타

"통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다."

위키백과에서는 프로토콜을 이렇게 정의하고 있고 이어서 TCP/IP, HTTP와 같은 프로토콜 종류부터

프로토콜 구성요소 등에 관해 설명한다. 하지만 프로토콜이 뭔지 이해하지 못했다면 이런 설명은 약간 뜬구름 잡는 식이 될 수 밖에 없다. 

그래서 여기서는 "프로토콜" 이라는 것 자체에 대해 이해해보도록 하자. 

 

 

 

통신의 시작과 디지털변조

옛날에는 빛과 소리로 신호를 전달하였지만 19세기 접어들면서 전기로 신호를 전달하기 시작했습니다.

최초의 전기신호를 개발한 폰 죄머링부터, 모스( 모스부호할 때 모스), 벨과 그레이(전화) 등에 의해

본격적으로 멀리 떨어진 곳에서 서로 신호를 보내는 통신의 시대가 시작되었습니다.

또 19세기 후반에는  헤르츠가 전파의 존재를 입증했고,  마르코니가 최초로 무선통신을 성공했습니다. 

 

이제 사람들은 서로 멀리떨어진 곳끼리 신호를 주고받는 것이 더 이상 불가능하지 않다는 것을 알게 되었습니다.

원거리 통신에서  유선이든, 무선이든 앞으로의 과제는  더 빨리, 더 멀리, 더 정확히 신호를 보내는 것이었습니다.

처음에는 아날로그 신호를 여러가지 방식으로 변조했지만. 

점차 디지털 변조 방식이 더 빨리, 더 멀리, 더 정확히이라는 목적을 더 만족한다는 것을 알게됩니다.

그리고 현재, 실제로 대부분의 통신은 디지털 방식으로 이루어집니다.

 

프로토콜의 탄생

디지털로 변조해서 신호를 보낸다는 것은  0과 1만을 데이터로 보낸다는 것입니다.  

이런 상황에서 약 0과 1로 이루어진 데이터를 보내면 무작위로 주고받는다면 다음과 같이

데이터를 해석하지 못하는 상황이 발생합니다. 

그래서 0과 1로만 통신을 하기 위해선  0과 1을 어떻게 해석해야 할지 미리 약속을 정해야합니다.

약속의 한가지 예시로서 다음과 같은 약속을 합니다. 

 

  • 송신측은  데이터를 ASCII 코드로 보낼거야.  그러니까 수신측도 ASCII코드로 해석해줘.
    (8비트씩 끊어서 해석하면 되겠군...)

 

이렇게 약속을 하면 위에 무작위로 보낸 0과1이라는 데이터가  의미를 갖습니다.

 

이런식으로 아무 의미없는 0과1을 올바르게 해석하기 위해서는 통신 주체들간에 사전약속이 필요합니다.

이를 통신규약, 프로토콜이라고 합니다.

 

 

프로토콜에 있어야 할 약속들  예시

1.  잡음 또는 에러 방지 

통신은 결국 전파를 통해 멀리있는 곳에 0과1을 보내는 것입니다. 

전파또한 파동인데 이 파동이라는 것은 주변환경(잡음)에 영향을 받습니다.  

즉,나는 0으로 전파를 보냈는데, 전파가 전달되는 과정에서 수신측에서는 1로 받을 수도 있습니다.

이런 상황을 물리적, 논리적으로 해결해야  합니다. 

일차적으로는 물리적으로 잡음에 관한 전파를 만들어서 보냅니다.

(변조, 퓨리에변환  등에 관한내용인데 어렵습니다.. ㅠㅠ)

하지만 이렇게 물리적으로 보낸 전파도 낮은 확률로 데이터가 잘 못 보내질 수가 있습니다. 

그래서 논리적으로 이 에러의 확률을 낮추는 방법도 필요한데 이를 인터리빙이라고 합니다.

인터리빙의 가장 기초적인 방식은 블록 반복입니다.

블록 반복이란 0을 보내는 대신 000, 1을 보내는 대신 111을 보내는 방식입니다.

 

기존의 방식과 비교하면 다음과 같은 장점이 있습니다.

-기존의 방식 : 낮은확률로 오류발생했을 경우.   데이터가 잘못 전달 된다.

-블록 방법 적용: 낮은 확률로 오류가 1개 발생해도, 데이터는 올바르게 전달된 것으로 해석된다.

 물론  블록 방법 적용해도 낮은확률의 오류가 2번 이상 발생하면 데이터는 잘못 전달됩니다.

000보냈는데 110,011,111 로 받은 경우가 그렇습니다. 다만 그 확률이 훨씬 낮을 것입니다.

 

이제 이런 인터리빙 방식을 적용해서 통신하기로 해 봅시다.

이제 통신예시는 'L'을 보내기로 하겠습니다.  (LOVE전부 하기엔 너무 데이터가 많다..ㅠㅠ)

이 때 송신측과 수신측은 전부 ASCII코드로 해석한다는 것과, 블록방법을 통해 인터리빙 하겠다는 

약속을 해놓은 상태입니다.

 

 

 

 

 

2. 통신기기가 여러대일 경우

이제 통신기기가 여러대일 경우를 생각해봅시다. 
전파는 기본적으로 방향이 없이 360도 전방위로 전달됩니다.  

그래서 메시지자체는 여러 통신대대에 동시에 전달되는데, 이 경우 다음과 같은 문제가 있습니다.

A는 B한테만 데이터를 보내고 싶었는데 전파 특서상 C한테도 데이터가 전달 됩니다. 

 

 

 

그래서 우리는 약속을 하기로 합니다. 

  • 통신기기가 총 3대이므로 2bit로 충분히 나타낼 수 있겠군
    그럼 A는 "00",   B는 "01",    C는 "10"라고 하자.
  • 받는 쪽에서는 누가 못냈는지도 알아야 하니까 
    송신이 누구인지, 수신이 누구인지도 데이터에 포함되어야겠군
  • 그럼  처음2bit는 송신측을 나타내고, 그 다음 2bit는 수신측을 나타내자고 하자. 
    보내려고 하는 메시지는 이 4bit 다음에 오는걸로 하자. 

라고 약속을 했습니다. 

 

그럼 이제 데이터를 보낼 때 다음과 같이 보내게 됩니다.

데이터 자체는 B와 C 둘다 수신합니다. 

처음 2bit를 통해 A로부터 온 데이터인것을 알 수 있고, 

그 다음2bit를 통해 B한테 보낸 데이터라고 판단해, 

B는 정상적으로 메시지 'L'을 수신하고,  C는 나한테 온것이 아님으로 이 데이터를 무시합니다.

 

 

 

나만의 프로토콜

지금까지 한 약속을 보면 다음과 같습니다.

  • 블록 반복을 통해 메시지를 보내자. (0보낼 거 000 보냄)
  • 첫 2bit는 송신측,  다음 2bit는 수신측이다.     
  • 메시지는 ASCII코드로 해석하자

통신기기가 A,B,C 총 3개가 있고 이 약속들을 전부 지키면서 데이터를 보내기로 했을 때

A가 B한테 'L' 을 보내면 다음과 같이 보내게 됩니다.

 

000 000     000 111     000 111 000 000 111 111 000 000

(0     0          0     1        0     1    0     0     1     1     0     0         )

  A가          B한테                    L 

 

 

 

 

OSI 7계층에 대한 간단한 이해

지금 까지 살펴본 것처럼  원활한 통신을 위해 필요한 약속들을 프로토콜이라고 합니다.

여기서는 간단하게 통신기기3대, ASCII코드,블록반복 등을 사용하기로 했지만

현실에서는 훨씬 더 다양한 통신규약(프로토콜)이 필요합니다.

프로토콜(약속)이 많이 생기다보니까  프로토콜(약속)들을 분류해보기로 합니다. 

  • 전기적인 신호
  • 물리적 주소지정 체계 둥
  • 논리적 주소지정,최적화경로,오류감지  등
  • 흐름 제어, 분할/분리 및 오류 제어 등
  • 전이중,반이중 체크, 체크 포인팅과 유휴, 재시작 과정 등
  • 인코딩,디코딩
  • 사용자가 네트워크 자원에 접근하는 방법 ( 응용프로그램-브라우저,텔넷 등)

등등 약속들을 분류해 봅니다.

약속들을 분류하다보니 7개로 분류하는게 좋아보였는데 이를  OSI 7계층이라고 합니다.