본 글은 아래의 [변계사 Sam] 블로그에서 개인적인 공부의 목적으로 허가를 받고 발췌하였음을 밝힙니다.
https://better-together.tistory.com/89?category=887984


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

 

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

 

 


네트워크 노드와 호스트 자세히 보기 ▼

더보기

네트워크의 노드와 호스트

 

노드란?

네트워크는 컴퓨터와 네트워크 장비를 유무선의 전송 매체로 연결하여 데이터를 전송하는 시스템이다.

 

복잡한 네트워크 시스템을 단순화하면 네트워크는 위 그림과 같이 전송 매체라는 선(또는 링크, Link)과 컴퓨터와 네트워크 장비라는 점들이 그물망처럼 연결된 것이다.

선을 여러 방향으로 분기시키는 각각의 점들을 노드(Node, 분기점)라고 한다. 다시 말해 일반적으로 네트워크에 연결된 모든 물리적인 기기 또는 장치를 노드라고 한다. 즉, 네트워크 상에서 데이터를 주고받을 수 있는 PC, 노트북, 스마트폰 같은 컴퓨터와 라우터, 인터넷 공유기 같은 네트워크 장비가 각각 하나의 노드입니다.

 

노드는 네트워크에서 데이터를 전송하기 위해 연결된 기기이기 때문에 데이터를 보내는 송신지 또는 데이터를 받는 수신지 역할을 합니다. 따라서 우편물을 주고받기 위해 송신지와 수신지의 주소가 필요한 것처럼 데이터를 주고받는 노드에도 다른 노드와 구별할 수 있는 고유한 주소가 필요합니다. 따라서 다른 노드와 구별되는 고유한 주소를 갖고 있는 노드를 네트워크에 연결된 주소가 있는 물리적인 장치라고 정의하기도 합니다.

 

MAC 주소라는 고유한 물리 주소를 갖고 있는 컴퓨터와 라우터가 네트워크의 대표적인 노드입니다.

 

 

호스트란?

노드 중에서 애플리케이션을 실행할 수 있는 컴퓨팅 시스템을 갖춘 기기를 호스트(Host)라고 합니다. 쉽게 말하면 호스트는 네트워크에 연결된 컴퓨터입니다.

따라서 호스트는 사용자가 애플리케이션을 실행해서 네트워크에 접속할 수 있는 창구 역할을 합니다. 호스트에는 인터넷에서 사용하는 IP 주소가 할당되기 때문에 다른 말로 IP로 식별되는 노드라고 표현하기도 합니다. 

 

 

노드와 호스트의 관계

모든 호스트는 노드가 되지만 모든 노드가 호스트인 것은 아닙니다. PC, 노트북, 스마트폰 등의 컴퓨터는 호스트이면서 노드입니다. 하지만 라우터, 인터넷 공유기 같은 네트워크 장비는 애플리케이션을 실행할 수 있는 기능은 없기 때문에  노드이지만 호스트는 아닙니다. 이렇게 노드 중에 호스트가 아니면서 호스트 중간에 위치하여 데이터를 중계하는 역할을 하는 노드를 중간 노드라고 합니다.

 

서버와 클라이언트

호스트 사이에 제공되는 서비스를 기준으로 호스트를 다시 세분화하여 서비스를 제공하는 호스트를 서버, 서비스를 요청하고 사용하는 호스트를 클라이언트라고 합니다. 호스트는 다양한 서비스를 서로 주고받기 때문에 임의의 호스트가 클라이언트나 서버로 고정되지 않고 이용하는 서비스의 종류에 따라 클라이언트가 될 수도 있고, 서버가 될 수도 있습니다. 컴퓨터에 설치된 애플리케이션이 서버나 클라이언트의 역할을 결정하기 때문입니다. 웹 브라우저가 설치되어 있으면서 FTP 서버 애플리케이션이 설치되어 있는 컴퓨터라면 웹 서비스에서는 클라이언트가 되지만 파일 전송 서비스에서는 서버가 되는 것입니다.

 



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


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

 

호스트 간에 TCP/IP에 기반한 데이터 통신을 할 때는 TCP/IP를 구성하는 각 계층이 아래 위로 인접한 계층과 데이터를 주고 받으며 통신을 처리한다.

송신 호스트에서는 데이터를 만드는 최상위 계층인 응용 계층에서부터 하위 계층인 네트워크 인터페이스 계층까지 4개의 계층을 차례로 거쳐 데이터가 전송 매체로 전달된다.전송 매체를 통과하면서 인터넷에서 수많은 중간 노드를 거친 데이터가 수신 호스트에 도착한다. 수신 호스트에서는 전송 매체로부터 데이터를 수신하는 최하위 계층인 네트워크 인터페이스 계층에서부터 상위 계층인 응용 계층까지 4개의 계층을 순서대로 거쳐 데이터가 전송된다.

 

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

 

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

 


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

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

 

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

 

 

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

 

캡슐화와 데이터의 전송 

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

 


 

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

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

 

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

 

 

역캡슐화와 데이터의 전송

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

 

수신 호스트에서는 네트워크 인터페이스, 인터넷, 전송, 응용 계층의 순서대로 데이터가 이동합니다. 캡술화된 데이터가 각 계층을 지날 때마다 각 계층은 송신 호스트가 추가한 헤더의 정보를 읽고 해당 프로토콜의 기능을 실현한 후 사용한 헤더를 삭제한 데이터를 상위 계층으로 넘깁니다. 송신 호스트가 캡슐화한 데이터를 받은 수신 호스트는 하위 계층부터 상위 계층까지 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 헤더를 읽고 데이터를 전송합니다.

 

+ Recent posts