캡슐화와 역캡슐화
데이터 전송 시 캡슐화(Encapsulation)가 이뤄지고 수신 시 역캡슐화(Decapsulation)가 이뤄진다. 데이터에 헤더를 붙이고 아래 계층에 보내는 것을 캡슐화, 데이터에 헤더를 제거하고 위 계층에 보내는 것을 역캡슐화라 한다.
위 그림을 보면 데이터 통신 시 상위 계층부터 캡슐화가 이뤄지면서 데이터는 아래 계층으로 흘러간다. 데이터 수신 시 하위 계층 부터 역캡슐화가 이뤄지면서 데이터는 상위 계층으로 흘러간다. 전송된 데이터는 패킷 단위로 라우터를 거쳐가므로 정확하게는 아래 그림처럼 흘러간다.
프로토콜과 헤더
왜 헤더를 붙일까? 헤더는 곧 프로토콜이다. 프로토콜을 정의한다는 말은 헤더를 정의한다는 말과 같다. 각 계층에는 다양한 프로토콜이 정의되어 있고 그에 따라 헤더도 정의되어 있다. 프로토콜에 맞춰 일을 하는 녀석은 프로그램이다. 라우팅, 재결합, 에러체크, 흐름제어 등의 통신에 필요한 일을 한다. 각 계층에서 헤더를 보고 동작한다. 즉 프로그램은 인간이 정한 프로토콜을 이해할 수 없으니 0,1로 된 헤더로 프로토콜을 표현하고 프로그램은 헤더에 맞춰 일을 하기 때문에 헤더를 붙이는 것이다. 만약 어떤 프로토콜을 이해하고 싶다면 헤더를 살펴보면 된다. 헤더가 복잡하면 많은 일을 한다는 뜻이지만 그만큼 헤더 정보가 붙기 때문에 전송 효율이 떨어진다. 그래서 프로토콜 설계자는 되도록이면 원하는 기능을 구현할 수 있으면서도 작은 크기의 헤더를 정의하는 것이 필요하다.
프로토콜의 진정한 의미
Peer to Peer 간의 통신 약속
즉 같은 계층끼리의 통신 약속이다. 네트워크 계층에서 붙은 헤더는 오직 네트워크 계층에서만 그 의미를 가진다. 캡슐화로 인해 내려온 데이터는 알 수도 없고 알 필요도 없다. 상위 계층 역시 하위 계층의 헤더는 필요가 없기에 역캡슐화 되어진, 하위 계층의 헤더가 떼어진 데이터를 받는 것이다.
만약 여러분이 채팅 응용프로그램을 만든다고 가정하자. 그러면 채팅 서버 프로그램, 채팅 클라이언트 프로그램, 서버와 클라이언트 간의 채팅 메시지 송수신을 위한 프로토콜이 필요하다. 이미 잘 만들어진 메시지 전송 프로토콜이 있지만 여러분은 GUNJOON이라는 자신만의 프로토콜을 만들고 헤더(GUNJOON 헤더)를 정의했다. 이 프로토콜은 HTTP, FTP와 같은 응용 계층의 프로토콜이 된다. 클라이언트에서 메시지를 보내면 클라이언트와 서버에서 각각 다음과 같은 일이 벌어진다.
클라이언트 프로그램은 채팅 메시지에 GUNJOON 헤더를 붙여 보내고 서버 프로그램은 응용 계층에서 채팅 메시지와 GUNJOON 헤더로 이루어진 데이터를 받는다. 그리고 GUNJOON 헤더를 보고 채팅 메시지를 적절하게 처리한다. GUNJOON 프로토콜의 헤더가 전송 계층에서 쓰였는가? 아니면 네트워크 계층에서 쓰였는가? 아니다. 오직 응용 계층에서 사용되었다.
'Computer Science > Network' 카테고리의 다른 글
[데이터통신 - 6] 데이터링크 계층 (0) | 2022.08.08 |
---|---|
[데이터통신 - 5] 물리 계층 (0) | 2022.08.08 |
[데이터통신 - 4] 정보통신망(Network) (0) | 2022.08.07 |
[데이터통신 - 2] 프로토콜 (0) | 2022.08.05 |
[데이터통신 - 1] 데이터 통신 (0) | 2022.08.05 |