개요

프로토콜 본래의 의미는 외교에서 의례 또는 의정서를 나타내는 말이지만, 네트워크 구조에서는 표준화된 통신규약으로서 네트워크 기능을 효율적으로 발휘하기 위한 협정이다. 즉, 통신을 원하는 두 개체간에 무엇을, 어떻게, 언제 통신할 것인가를 서로 약속한 규약이다.[출처:텀즈]

개념 잡기

네트워크 과목을 망친 나로서는 프로토콜이라는 것이 매 번 사용하는 용어이면서도 생소하다. 도대체 이게 무슨 개념이란 말인가. TCP/IP가 있고 MAC이 있고 이게 다 뭔소리지. 아무래도 개념적 내용을 글로 설명하려다 보니 더 어려워 진 것 같다. 마치 영어를 문법 구조로 배우는 느낌이랄까?
사실 응용 계층에서 소켓 라이브러리를 사용한다고 생각만 해도 좀 더 이해하기가 편할 것 같다.
단순한 채팅 프로그램 같은경우엔 서로 텍스트만 주고 받으면 된다.

ex)
철수 : 안녕하세요.
영희 : 네~ 안녕하세요.

하지만 이런 단순 텍스트가 아니라 어떤 명령과 동작을 포함하는 문자열을 주고 받으려면 규칙이 필요하다.

메시지 : 컴퓨터 1 전원 꺼라

위와 같은 명령을 내린다고 가정해 보자. 그럼 한국 어법상 다양한 표현이 나올 수 있다.

메시지 : 1 컴퓨터 꺼라 전원

문맥상 틀린 말은 아니다. 하지만 저러한 명령을 파싱하여 프로그래밍한다고 가정해보자. 개발자는 여러 상황을 모두 고려하여 프로그래밍해야 하며 그러한 상황을 모두 고려한다는 것은 이만저만 스트레스를 받는 일이 아니며, 상황이 많아진다는 것은 고려하지 못 하는 예외 상황 또한 발생할 수 있다는 것이다. 때문에 우리는 프로토콜이 필요하다.
이야기를 주고 받기 위한 어떤 일정한 규칙이 필요한 것이다. 영어 문법과도 비슷하겠다.
먼저, 컴퓨터를 꺼라는 명령을 하기 위해 다음과 같은 규칙을 만들 수 있다.

[Object Name] [Object Number] [Resource] [Operation]

위 규칙은 앞선 예제에서 각각 다음과 같이 매치가 된다.

[Object Name] = 컴퓨터
[Object Number] = 1
[Resource] = 전원
[Operation] = 꺼라

이러한 규칙을 정해두면 다양한 응용이 가능해진다. 컴퓨터만 제어하는 것이 아니라 다른 하드웨어도 같은 규칙을 통해 제어가 가능 한 것이다. 때문에 우리는 프로토콜을 정의하고 이 프로토콜에 맞게 서로 데이터를 주고 받는 것이다.

TCP/IP 통신 프로토콜

좀 더 프로그램적으로 접근하여 보자. 우리가 네트워크를 통해 데이터를 주고 받기 위해 TCP/IP 통신 프로토콜을 사용한다는데 이게 도대체 뭐지? 그동안 소켓 라이브러리만 사용해봐서 소켓 라이브러리가 TCP/IP인지 뭔지 개념이 안 잡힌다.
내가 이해한바로는 소켓 라이브러리는 우리가 전송하고자 하는 데이터를 TCP/IP 프로토콜 형태에 맞게 변형하여 하위 계층으로 전달하는 역할을 하는 것이다.

예를 들어보자. “Life is beautiful”이라는 문자열을 COM1에서 COM2보낸다고 생각해보자. 우리는 쉽게 소켓 라이브러리를 사용하여 데이터를 전송하려고 할 것이다. 보내려는 문자열은 “Life is beautiful”이지만 COM2라는 목적지를 명시하여 보내야 한다. 1:1 네트워크로 구성되었다면 목적지는 하나이기 때문에 굳이 주소 같은 것이 필요하지 않다. 하지만, COM1은 경기도 여주에 있고 COM2는 경기도 수원에 있다면 수원으로 보내야 할 것 아닌가. 그럼 저 문자열은 다음과 같이 바뀌어야 할 것이다.

[수원]“Life is beautiful”

위와 같이 TCP/IP 는 목적지를 포함하는 구조로 전환이 되어야 한다는 프로토콜 규칙처럼 볼 수 있다. 하지만, 이는 단순히 이해를 돕기 위한 내용이지 실제 구성이 저렇게 되는 것은 아니다. 다음 그림을 보면 좀 더 세부적으로 TCP/IP 프로토콜 계층이 어떻게 구성되어지는가를 알 수 있다.

참고