IT 기획의 길

네트워크 정복하기 8. 인터넷의 TCP/IP 데이터 전송 과정(ft. 캡슐화와 역캡슐화) 본문

IT 인프라/네트워크

네트워크 정복하기 8. 인터넷의 TCP/IP 데이터 전송 과정(ft. 캡슐화와 역캡슐화)

완벽하기 쉽지 않지만 완벽해지려고 노력해야 한다 2021. 10. 1. 11:24

인터넷에서 데이터를 전송하는 과정

TCP/IP를 지원하는 인터넷에 연결된 컴퓨터, 즉 호스트는 TCP/IP의 4 계층의 프로토콜을 구현하는 소프트웨어만 있으면 아무런 문제 없이 다른 종류의 호스트와도 통신을 할 수 있습니다.

 

호스트에 대해 자세히 => <개발자의 언어> 노드, 호스트와 서버/클라이언트의 구별

 

통신은 원칙적으로 데이터를 주고받는 양방향으로 이루어지기 때문에 데이터를 송신하는 호스트와 수신하는 호스트가 항상 정해져 있는 것은 아닙니다. 따라서 클라이언트가 서버에게 서비스를 요청할 경우에는 클라이언트가 데이터를 송신하는 호스트가 되고, 서버가 데이터를 수신하는 호스트가 됩니다. 반면 서버가 클라이언트에게 서비스를 제공할 경우에는 서버가 데이터를 송신하는 호스트가 되고, 클라이언트가 데이터를 수신하는 호스트가 되는 것입니다.

 

호스트 간에 TCP/IP에 기반한 데이터 통신을 할 때는 TCP/IP를 구성하는 각 계층이 아래 위로 인접한 계층과 데이터를 주고받으며 통신을 처리합니다. 송신 호스트에서는 데이터를 만드는 최상위 계층인 응용 계층에서부터 하위 계층인 네트워크 인터페이스 계층까지 4개의 계층을 차례로 거쳐 데이터가 전송 매체로 전달됩니다. 전송 매체를 통과하면서 인터넷에서 수많은 중간 노드를 거친 데이터가 수신 호스트에 도착합니다. 수신 호스트에서는 전송 매체로부터 데이터를 수신하는 최하위 계층인 네트워크 인터페이스 계층에서부터 상위 계층인 응용 계층까지 4개의 계층을 순서대로 거쳐 데이터가 전송됩니다.

 

 

<그림 1> 인터넷에서 데이터를 전송하는 과정

따라서 한 계층이 정상적으로 기능한다는 것은 데이터를 전송한 바로 이전 계층이 제대로 동작하고 있다는 것을 전제하고, 송신 호스트와 수신 호스트의 4개의 계층의 프로토콜이 모두 정상적으로 기능을 해야 성공적인 데이터 전송이 이루어집니다.

 

이번 포스팅에서는 TCP/IP를 사용하는 인터넷에서 데이터가 각 계층을 이동하면서 처리되는 과정에 대해 송신 호스트와 수신 호스트로 나누어 살펴보도록 하겠습니다.

 

송신 호스트의 데이터 전송 과정

상위 계층과 하위 계층의 관계 - 헤더 추가와 캡슐화

송신 호스트의 각 계층에서는 맡은 역할에 따라 프로토콜을 처리하고, 상위 계층으로부터 받은 데이터에 헤더라는 정보를 붙여 하위 계층으로 넘깁니다. 헤더에는 수신 호스트의 해당 계층에서 데이터를 처리할 때 필요한 정보가 담겨 있습니다. 좀 더 구체적으로 말하면 헤더에는 송신지나 수신지에 대한 정보(예를 들면, 네트워크 인터페이스 계층에서 필요한 물리 주소, 인터넷 계층에서 필요한 IP 주소, 전송 계층에서 필요한 포트 번호)와 해당 프로토콜이 전송하고 있는 데이터에 관한 정보가 기술되어 있습니다. 즉 송신 호스트와 같은 계층의 수신 호스트의 프로토콜을 위한 정보가 헤더이고 송신 호스트의 다음 하위 계층으로 전달하는 정보가 데이터입니다. 각 계층이 데이터를 전송할 때 데이터보다 앞에 추가하는 정보라는 의미에서 헤더라고 부릅니다. 송신지 호스트의 각 계층을 지날 때마다 해당 계층의 프로토콜을 처리하고 데이터에 헤더를 추가하는 것을 캡슐화(Encapsulation)라고 합니다.

 

<그림 2> 헤더 추가와 캡슐화 

 

캡슐화로 각 계층은 헤더와 데이터 단위로 정의되며, 헤더에는 각 계층의 해당 프로토콜이 필요로 하는 정보 및 처리 내용에 관한 정보가 포함됩니다. 송신 호스트가 헤더를 생성해 추가하면 수신 호스트의 해당 계층이 이 헤더를 사용하여 데이터를 처리함으로써 통신 상대방 간에 동일한 프로토콜이 구현되는 것입니다.

 

캡슐화와 데이터의 전송 

송신 호스트에서는 응용, 전송, 인터넷, 네트워크 인터페이스 계층의 순서대로 데이터가 이동합니다. 데이터가 각 계층을 지날 때마다 해당 프로토콜의 기능을 실현하기 위한 정보인 헤더가 추가되어, 즉 데이터가 캡슐화되어 하위 계층으로 이동하는 것입니다. 송신 호스트의 애플리케이션이 만든 데이터는 상위 계층부터 하위 계층까지 4개의 계층을 통과하는 동안 여러 개의 헤더가 추가되면서 캡슐화 된 후 최하위 계층에서 이 디지털 데이터를 전기 신호로 변환하여 전송 매체를 통해 라우터 등의 중간 노드를 거쳐 수신 호스트의 최하위 계층인 네트워크 인터페이스 계층으로 전송됩니다.

 

수신 호스트의 데이터 전송 과정

하위 계층과 상위 계층의 관계 - 헤더 제거와 역캡슐화

수신 호스트의 각 계층에서는 하위 계층으로부터 받은 데이터에 포함된 헤더 부분의 정보를 사용해서 해당 계층의 프로토콜을 처리한 후 헤더 부분을 제거한 데이터를 상위 계층으로 넘깁니다. 각 계층은 송신 호스트의 해당 계층에서 보낸 헤더만을 읽고 사용할 수 있으며, 데이터가 하위 계층에서 상위 계층으로 넘어갈 때마다 헤더가 제거되므로 최종적으로 송신 호스트가 보낸 데이터만 남게 됩니다. 이렇게 캡슐화와 정반대의 방향으로 수신지 호스트의 각 계층을 지날 때마다 해당 계층의 프로토콜을 처리하고 데이터의 헤더가 삭제되는 것을 역캡슐화(Decapsulation)라고 합니다.

 

<그림 3> 헤더 제거와 역캡슐화

역캡슐화와 데이터의 전송

전송 매체를 통해 전기 신호를 받은 수신 호스트의 최하위 계층인 네트워크 인터페이스 계층은 이 전기 신호를 디지털 데이터로 변환합니다. 네트워크 인터페이스 계층이 변환한 데이터는 원래 데이터에 여러 개의 헤더가 추가된 캡슐화된 데이터입니다.

 

수신 호스트에서는 네트워크 인터페이스, 인터넷, 전송, 응용 계층의 순서대로 데이터가 이동합니다. 캡술화된 데이터가 각 계층을 지날 때마다 각 계층은 송신 호스트가 추가한 헤더의 정보를 읽고 해당 프로토콜의 기능을 실현한 후 사용한 헤더를 삭제한 데이터를 상위 계층으로 넘깁니다. 송신 호스트가 캡슐화한 데이터를 받은 수신 호스트는 하위 계층부터 상위 계층까지 4개의 계층을 통과하는 동안 송신 호스트가 추가한 여러 개의 헤더를 삭제하고 송신 호스트가 보낸 원본 데이터를 수신하는 것입니다.

 

 

TCP/IP에 의한 전체 데이터의 전송

송신 호스트의 하위 계층은 상위 계층으로부터 온 헤더를 데이터로 취급하며 자신의 프로토콜을 실현하기 위한 특성을 담은 정보만을 헤더화시킵니다. 따라서 캡슐화는 한 계층에서 추가된 헤더를 다른 계층에 볼 수 없게 하는 은닉의 효과가 있습니다(은닉화). 다른 계층의 헤더를 볼 수 없기 때문에 송신 호스트의 각 계층에서 추가된 헤더는 수신 호스트의 동일한 계층에서만 사용됩니다. 이 때문에 한 계층만 보면 같은 계층끼리만 직접 데이터를 주고받는 것처럼 보입니다.

 

같은 계층끼리 데이터를 주고 받는 측면에 주목해 각 계층마다 데이터를 구분해 부르는 것을 PUD(Protocol Data Unit, 프로토콜 데이터 단위)라고 합니다. 헤더가 추가되는 데이터를 응용 계층에서는 메시지(Message), 전송 계층에서는 세그먼트(Segment), 인터넷 계층에서는 데이터그램(Datagram) 또는 패킷(Packet), 네트워크 인터페이스 계층에서는 프레임(Frame)이라고 부릅니다.

 

 

<그림 4> TCP/IP에 의한 전체 데이터의 전송 

TCP/IP 에 의해 처리되고 전송되는 데이터의 모습

TCP/IP에 의해 처리되고 전송되는 데이터의 모습을 요약하면 다음 <그림 5>와 같습니다.

 

<그림5> TCP/IP에 의해 전송되고 처리되는 데이터의 모습

 

각 계층이 사용하는 프로토콜에 따라 헤더에 추가되는 정보가 달라지지만, 각 헤더에는 적어도 ① '송신지와 수신지의 주소'와 ②'헤더에 이어지는 데이터의 종류를 알려주는 식별자' 정보가 있습니다. 

 

이더넷 헤더엔 MAC 주소가, IP 헤더엔 IP 주소가, TCP 헤더엔 포트 번호라는 주소 정보가 포함되고, 응용 계층은 사용하는 프로토콜에 따라 다르지만 이메일의 메일 주소와 같은 주소가 사용되는 경우가 있습니다.

 

헤더에 이어지는 데이터의 종류를 알려주는 식별자는 상위층의 프로토콜의 종류를 알려주는 정보입니다. 이더넷 헤더에는 상위 계층의 프로토콜이 IP라는 정보를, IP 헤더에는 상위 계층의 프로토콜이 TCP 라는 정보를, TCP 헤더에는 상위 계층의 애플리케이션이 사용하는 프로토콜에 대한 정보를 담고 있습니다.

 

네트워크 장비의 헤더 사용

송신 호스트와 수신 호스트 사이에는 데이터의 전송을 돕는 스위치, 라우터 같은 네트워크 장비가 있습니다. 송신 호스트에서 캡슐화된 데이터가 네트워크 장비를 통과할 때 각 네트워크 장비는 자신의 역할에 대응하는 헤더를 읽고 데이터를 전송합니다.

 

예를 들어, 네트워크 인터페이스 계층에서 데이터 전송을 돕는 스위치는 이더넷 헤더를 읽고 데이터를 전송하고, 인터넷 계층에서 데이터의 전송을 돕는 라우터는 IP 헤더를 읽고 데이터를 전송합니다.



출처: https://better-together.tistory.com/89?category=887984 [변계사 Sam의 테크 스타트업!]