프로토콜은 컴퓨터, 통신장비 간의 원활한 소통을 위한 약속입니다.
원래 프로토콜은 외교상의 약속이나 의례를 의미하는 개념이었는데요, 통신과 인터넷의 발달로 그 의미가 확대되었습니다. 프로토콜은 쉽게 이야기하면 전화통화와 비슷하죠. 제가 안녕하세요라고 말할 경우 상대방이 Hello라고 답할 경우 통신 준비가 되지 않았다고 판단합니다.
프로토콜은 통신을 위한 약속이라고도 할 수 있는데요, 이러한 프로토콜은 데이터를 어떻게 전송하고 송수신자가 어떻게 상호작용하는지 등의 대한 세부사항 등을 정의합니다.
TCP와 IP는 인터넷에서 가장 중요한 역할을 담당하는 프로토콜입니다.
과거 미국과 소련의 냉전 시절, 미국에서 서킷 통신의 단점을 보완하고자 패킷 통신을 고안합니다. 서킷 통신은 일대일로 연결되는 방식을 의미하는대요, 때문에 선이 연결되어 있어야 하고 교환원을 통해서 연결해야 합니다. 과거 전화 교환원이란 직업이 존재했던 이유 역시 이 때문이죠.
반면 패킷 통신이란 데이터를 보낼 경우 잘게 쪼개서 보내는 형태입니다. 데이터를 쪼개서 보내면 도착할 경우 순서나 데이터가 달라질 수 있습니다. 그리고 이를 보완하기 위해 TCP / IP가 등장한 것입니다.
IP는 보내고자 하는 데이터를 잘라서 순서와 관계없이 빠르게 보내는 역할을 합니다. 그 후 전송이 누락되었거나 순서가 맞지 않는 데이터를 다시 요청하는 것이 TCP의 역할이죠. 이후 설명할 프로토콜들이 모두 TCP 기반으로 만들어졌고, TCP가 IP 위에서 동작하기 때문에 주로 TCP / IP라고 현재 부릅니다.
HTTP는 월드 와이드 웹에서 데이터를 주고받기 위한 프로토콜 중 하나입니다. 주로 웹 브라우저와 웹 서버 간에 사용되며, 클라이언트가 서버에 요청을 보내고, 서버가 요청에 대한 응답을 반환하는 형식으로 동작하게됩니다.
하이퍼텍스트는 텍스트를 초월한 문서입니다. 그리고 이것을 전송하는 프로토콜이 바로 HTTP입니다. 우리가 흔히 접하는 웹 사이트들은 프로토콜을 따르고 있는데요, 웹 사이트 주소가 http:// 로 시작하는데 이것은 HTTP라는 프로토콜을 이용해서 문서를 받겠다는 약속을 의미합니다.
HTTP는 클라이언트 - 서버 모델을 기반으로 동작합니다. 클라이언트는 웹 브라우저와 같은 어플리케이션을 통해 서버 요청을 보내고, 서버는 이러한 요청을 통해 응답을 반환합니다.
- 클라이언트가 웹 브라우저를 통해 웹 페이지에 액세스하려고 할 경우, 브라우저는 해당 페이지에 대한 HTTP 요청을 생성하게 됩니다. 이 요청을 일반적으로 URL을 통해 식별됩니다.
- 클라이언트의 요청은 HTTP 메서드인 GET, POST, PUT, DELETE와 함께 웹 서버로 전송됩니다. 이 중에서 가장 일반적인 메서드는 GET과 POST인데요, GET 메서드는 서버로부터 리소스를 요청하고, POST 메서드는 서버에 데이터를 호출합니다.
- 서버는 클라이언트의 요청을 받고 처리한 후, 해당 요청에 대한 응답을 생성하게 됩니다. 응답은 우리가 알고 있는 상태 코드 (200, ok, 404 NOT Found등등)와 함께 클라이언트에게 전송됩니다.
- 클라이언트는 서버로부터 받은 응답을 해석하고 적절히 표시합니다. 이를 통해 사용자는 웹 페이지를 볼 수 있게 됩니다.
FTP는 파일을 컴퓨터 네트워크 상에서 전송하기 위한 프로토콜입니다. 주로 클라이언트와 서버 간에 파일 전송을 수행하는 경우 사요욉니다. FTP는 앞에서 살펴본 TCP / IP 프로토콜 스택을 기반으로 하며, 특히 TCP를 사용하여 안정적인 데이터 전송을 보장합니다.
쉽게 이해하자면 단어 그대로 파일을 전송하기 위해 사용하는 프로토콜입니다. 우리가 대용량 파일을 전송하거나, 불특정 다수에게 배포하는 데에 용이해서 예전에 게임 회사나 소프트웨어 회사들이 주로 이용했습니다. 다만 FTP는 구조가 단순한 만큼 보안에 취약하다는 단점도 존재합니다. 그리고 이를 보완하기 위해 SFTP라는 것이 생겼습니다.
우리가 알고 있는 알드라이브와 같은 FTP 클라이언트 / 서버를 이용하면 전문 지식이 없어도 GUI로 쉽게 파일을 주고 받을 수 있습니다.
언어에 문법이 있듯이, 구문은 프로토콜에서 문법과 같은 역할을 합니다. 데이터를 구성하는 형식이나 부호화 신호 레벨, 순서와 같은 정보들을 정의합니다.
예를 들어 우리가 친구의 주소 정보를 알고 싶다면, 00의 주소를 알려줘, 00이 어디 사는지 알아? 와 같이 다양하게 말할 수 있습니다. 반면 컴퓨터는 다양한 형식이 아닌 프로토콜이라는 형식을 지켜줘야하며, 안녕 나 00인데 00의 주소 알려줘와 같은 정해진 프로토콜 형식으로만 소통이 가능합니다.
이름 그대로 각 데이터가 무엇을 의미하는 지를 정의합니다. 예를 들어 위에서 프로토콜을 지킨 구문 예시를 살펴보자면 이렇습니다. 첫 번째 00은 본인이름, 두 번째 00은 친구 이름이라는 각각의 의미를 정의하는 것이죠.
또한 받은 데이터가 왜곡된 데이터가 아닌지 확인하고, 왜곡되었을 경우 다시 복구하는 제어 데이터들을 담을 수도 있습니다. 여기서 대표적인 제어 데이터는 체크섬, 패리티 등이 존재합니다.