본문 바로가기
Learnings/Computer Science

네트워크 통신 스토리텔링💁‍♀️ - 서버/클라이언트, IP, TCP, UDP 쉬운 설명

by abcdesong 2021. 2. 3.

* 인터넷 통신에 대한 기초적인 내용을 스토리텔링 방식을 엮어 정리해보았습니다. 구체적인 내용 설명보다는 추상적인 레벨에서 흐름을 이해할 수 있도록 작성하였습니다 :)

Story #1

클컴퓨터 마을엔 여러 애플리케이션들이 살고 있다.

클컴퓨터 마을은 농업이 발달한 마을로, 매년 생산해내는 신선한 식재료들 덕분에 한식 산업이 융성한 곳이다.

그런 마을 안에서만 놀아도 행복한 들이었기에, 다른 마을과의 통신 없이도 잘 살아갈 수 있었다.

그러던 어느날, 클컴퓨터 마을 중 하나인 고구마 브라우저 는 대도시 서컴퓨터 마을에 '햄버거'라는 신문물이 있다는 소식을 듣고 관심이 생긴다.

 

클컴퓨터 이야기 001

그렇게 고구마 브라우저는 '햄버거'를 얻기 위해 네트워크 통신을 시도하는데...

🖥 서버와 클라이언트

눈치가 빠르시다면 이미 아셨겠지만, 스토리의 '클컴퓨터 마을'과 '서컴퓨터 마을'은 각각 클라이언트서버를 나타냅니다.

컴퓨터의 네트워크 통신은 기본적으로 서버와 클라이언트 사이에서 발생합니다.

스토리에서는 '서컴퓨터 마을'을 대도시에 비유하였지만, 장비의 규모에 따라 클라이언트/서버 여부가 결정되는 것은 아닙니다. 중요한 것은 각 컴퓨터가 어떤 역할을 하는 지입니다.

서비스를 제공하는 컴퓨터를 서버(Server) , 서비스를 이용하는 컴퓨터를 클라이언트(Client) 라고 합니다. 레스토랑에서 서비스를 제공하는 점원을 지칭하는 서버와 정확히 같은 개념입니다.

 

클컴퓨터 이야기 002

 

앞서 말했듯, 개인 컴퓨터라고 해서 꼭 클라이언트는 아닌데요,

예컨대, 컴퓨터 간의 파일 교환이 일어나는 P2P(Peer to peer) 방식의 통신에서는 각 컴퓨터가 서버 역할(파일을 보냄)을 하는 동시에 클라이언트(파일을 받음) 역할을 하게 됩니다.


Story #2

'햄버거'를 쟁취하겠다는 원대한 꿈을 가지게 된 클컴퓨터 마을의 고구마 브라우저.

인터넷 세상으로 나가 통신을 시도해야한다는 사실 정도는 알고 있지만, 구체적으로 어떻게 해야할 지는 막막하기만 하다. 이대로 그냥 나갔다가는 길이나 잃고 원하는 목적은 달성도 못할 것 같다.

그러던 중 고구마 브라우저는 다락방에서 먼지 쌓인 문서를 하나 발견하는데...

 

클컴퓨터 이야기 003

 

먼지를 털자 <인터넷 지침서>라고 적힌 제목이 보인다.

📜 인터넷 프로토콜 (IP)

흔히 IP라고 줄여 부르는 인터넷 프로토콜은 인터넷 통신을 위한 지침서라고 볼 수 있습니다.

프로토콜?

protocol은 한국어로 '규약'이라고 해석되며, Cambridge Dictionary에서는 다음과 같이 정의합니다.

공식 행사나 사건에서 쓰이는, 규칙과 허용될만한 행동을 담은 체계

the system of rules and acceptable behaviour used at official ceremonies and occasions

쉽게 말해 공적인 무언가를 하려고할 때 따라야 하는 규칙을 나열한 것이 프로토콜입니다.

반드시 지켜야하므로 의무적인 성격을 띄지만, 이것만 지키면 된다는 안내적인 성격도 동시에 가집니다.

IP

그렇다면 인터넷 프로토콜에는 어떤 내용이 적혀 있을까요?

IP 의 핵심 내용은 크게 2가지입니다.

  1. 데이터패킷 단위로 나눠서 전달하라
  2. IP 주소패킷에 적어 놓아라

1️⃣ 데이터를 패킷 단위로 나눠서 전달하라

인터넷에서는 수많은 통신들이 동시다발적으로 발생합니다. 또한, 출발지에서 목적지까지 단번에 통하는 경로가 있는 것이 아니라 노드라는 경유지들을 거쳐야만 목적지에 도달할 수 있습니다.

 

클컴퓨터 이야기 004

 

이때 각 노드 의 상황에 따라 데이터의 전달이 딜레이되거나 중단되는 일이 발생할 수 있는데, 데이터가 통으로 올라가 있다면 그 피해를 고스란히 전부 받게 됩니다.

 

클컴퓨터 이야기 005

 

만약 여러 번에 나눠서 보낸다면, 다음 전송은 막히지 않은 다른 경로를 이용할 수가 있게 됩니다.

 

클컴퓨터 이야기 006

 

게다가 데이터의 용량이 클 경우엔 애초에 노드 활용에 비효율적이라고 합니다.

따라서, 데이터를 작은 규모로 나눠서 전달하는 것이 효율적이며, 나눈 데이터를 패킷이라고 지칭합니다. 자그마한 택배 박스들이라고 이해할 수 있습니다. 이렇게 데이터를 패킷으로 나누어 전송하는 방식을 패킷 교환 방식이라고 합니다.

 

클컴퓨터 이야기 007

2️⃣ IP 주소패킷에 적어 놓아라

출발지에서 목적지까지 직통으로 갈 수 없으니, 경유지를 거치다가 길을 잃을 가능성이 있습니다.

 

클컴퓨터 이야기 008

 

그렇기 때문에 IP는 각 패킷에 출발지/목적지의 주소를 전부 적도록 정하였습니다. 각 패킷에는 송/수신지의 IP 주소(IP Address)가 적히게 됩니다.

177.77.27.7과 같은 숫자의 나열을 보신 적이 있을 텐데, 이것이 바로 IP 주소입니다.

참고: 회선 교환 방식

패킷 교환 방식과 대비되는 데이터 교환 방식으로 회선 교환 방식이 있습니다.

회선 교환 방식은 말 그대로 회선을 통해 데이터를 교환하는 방식으로, 출발지에서 목적지까지 가능 직통 경로가 있는 것입니다. 교환 대상이 서로를 점유하는 1:1 교환 방식이라고 이해할 수 있습니다.

이 방식의 경우 방해 요인이 적으므로 대용량의 데이터도 무리 없이 전송할 수 있습니다. 하지만 한번에 하나의 통신밖에 하지 못하므로 비효율적입니다. 유선 전화망이 그 예시입니다.

(응답하라 시리즈 등에서 많이 보이는 전화 쓰면 인터넷 못 쓰는 과거의 인터넷도 회선 교환 방식의 경우)


Story #3

IP를 따라 네트워크 통신을 통해 서컴퓨터 마을에 '햄버거' 요청을 보낼 수 있게 된 고구마 브라우저!

설레는 마음으로 서컴퓨터 마을의 응답을 기다린다.

그런데...

 

클컴퓨터 이야기 009

 

!!! '햄버거'가 반만 온 것이 아닌가! 뭔가 잘못됐나 싶어서 한번 더 시도를 해보았다.

 

클컴퓨터 이야기 010

 

!!! 이번엔 '햄버거'가 옆 동네 감자 브라우저에게 가버렸다.

🤷‍♀️ IP의 한계

'고구마 브라우저'가 처한 문제는 IP의 대표적인 한계를 보여줍니다.

감자 브라우저에게 간 햄버거

IP 주소만으로는 애플리케이션 끼리의 구분이 불가능하다는 문제가 있습니다.

같은 IP 주소를 사용하는 한 컴퓨터에서 여러 프로그램이 통신을 시도한다면, 그 중 어떤 프로그램이 햄버거를 요청한 것인지 판단할 수가 없는 것입니다.

'고구마'가 아닌 '감자'에게 햄버거가 배송되었지만, IP는 신경쓰지 않습니다.

반만 온 햄버거

IP패킷이 중간에 사라지거나, 패킷이 순서대로 오지 않더라도 문제 삼지 않습니다.

즉 햄버거의 재료 중 일부가 빠지거나, 처음과 끝에 와야할 빵이 중간에 전달되더라도 신경쓰지 않는다는 것입니다.

이는 보낸 이의 의도나 받는 이가 기대하는 바와는 다른 데이터가 전달될 수 있다는 가능성을 의미합니다.

이러한 한계와 더불어, IP는 패킷을 수신할 대상이 없거나 서비스가 되지 않아도 무조건 패킷을 전송하도록 합니다.

'고구마'가 다른 곳에 외출해 있거나 '클컴퓨터 마을'이 불타 없어졌더라도 개의치 않고 햄버거가 전송될 것입니다.


Story #4

계속되는 실패에 실망한 고구마 브라우저는 옷장을 뒤지다 또 무언가를 발견하게 되는데...

 

클컴퓨터 이야기 011

 

먼지를 털자 <전송 컨트롤 지침서>라고 적혀있다.

📜 전송 제어 프로토콜 (TCP)

인터넷 통신은 IP의 한계를 보완하기 위해 TCP라는 또다른 프로토콜을 따르고 있습니다.

TCPTransmission Control Protocol의 약자이며 말 그대로 전송을 제어하는 것과 관련한 내용을 담은 규약입니다.

햄버거는 무조건 시킨 사람에게로

어떤 애플리케이션에게서 온 요청인지는 구분할 수 없던 IP 주소의 한계를 보완하기 위하여

TCP패킷PORT 번호를 추가적으로 기입하도록 합니다.

 

클컴퓨터 이야기 012

 

PORT항구라는 뜻으로, 데이터가 어디에 정박해야하는 지를 알려주는 상세 주소라고 이해할 수 있습니다.

생사여부 확인

받는 이가 없거나, 보낸 이가 존재하지 않는다면 통신은 더 이상 이루어질 필요가 없습니다.

이러한 연결 확인을 확실히 하기 위해, TCP3 way handshake라는 과정을 거치도록 합니다.

 

클컴퓨터 이야기 013

 

상대방에게 접속 요청을 하는 것을 SYN(싱크)라고 하며, 요청을 수락하는 것을 ACK(앸ㅋ)라고 합니다. (앸ㅋ는 오타가 아닙니다,,)

각각 Synchronize와 Acknowledgement에서 유래한 명칭입니다.

  1. 클라이언트 가 먼저 접속 요청을 보내면
  2. 서버요청 수락과 함께 다시 접속 요청을 보내고,
  3. 클라이언트가 다시 그 요청수락하면...

드디어 데이터 전송이 시작됩니다!

햄버거는 햄버거로 온전하게

TCP패킷 유실 방지와 순서 보장을 위해, 패킷 순서 등의 정보 역시도 패킷에 기입하도록 합니다.

만약 기입된 순서와 다른 순서로 패킷이 전달되었다면, 패킷을 다시 순서대로 보내라고 재요청하거나

각 서버가 지정하는 개별 로직에 따라 순서를 올바르게 조정할 수 있습니다.

IP의 한계에 대응되는 TCP의 특징 (표)

위의 내용을 표로 정리하면 다음과 같습니다.

IP의 한계 TCP의 특징
IP 주소로는 상세 애플리케이션을 알 수 없다 PORT를 기입하도록 한다
송수신 대상의 유무와 상관없이 데이터를 전송한다 3 way handshake를 통해 연결을 확인한다
패킷의 소멸이나 순서 뒤바뀜에 무관심하다 패킷의 성공적 전달 여부와 순서를 보장한다

참고: UDP (User Datagram Protocol)

UDPTCP와 같은 층위에 있는 프로토콜로, TCP와 마찬가지로 IP의 한계를 보완할 수 있는 프로토콜입니다.

다만, TCP3 way handshake유실 방지/순서 보장과 같은 기능은 제공하지 않습니다.

PORT를 기입하도록 정하고 있으며, 데이터의 총량을 체크하는 체크섬(checksum) 정도의 기능만을 제공합니다.

따라서 정확도는 보장되지 않지만 대신 빠르다는 장점이 있어 비디오, 오디오 통신에 자주 사용된다고 하네요.

* 다만 최근 인터넷망의 발전으로 인해 TCP가 제공하는 것과 같은 정밀한 연결 확인이 불필요해진데다가, UDP에는 커스터마이징이 쉽다는 장점이 있어 최근 대두하고 있는 HTTP3와 함께 UDP의 위상이 높아지고 있다고 합니다.


Story #Final

클컴퓨터 마을의 고구마 브라우저는 프로토콜들의 도움 덕에 드디어!

서컴퓨터 마을의 명물 '햄버거'를 온전한 모습으로 받아볼 수 있게 되었다.

 

클컴퓨터 이야기 014

 

그리고 고구마 브라우저 덕에 통신의 맛을 알게 된 클컴퓨터 마을들은 오래도록 행복하게 살았답니다!(?)

 

 

-The End-

 


🌐 부록) 인터넷 프로토콜 계층 살펴보기

여기서는 위에서 언급하지 않았던 앞뒤 맥락들을 간단하게 설명해보겠습니다.

 

클라이언트서버가 통신하기 위해서는 크게 4가지 계층의 프로토콜을 따르게 됩니다.

다이어그램으로 살펴보면 다음과 같습니다. (출처: https://i.stack.imgur.com/Zknbj.png)

 

4계층

 

위에서 TCPUDP같은 층위의 프로토콜이라는 언급을 잠시 했는데요, 이 둘은 모두 전송 계층(Transport)에 있는 프로토콜입니다.

IP인터넷 계층(또는 네트워크 계층)에 속하는 프로토콜이고요.

 

네트워크 통신 시, 애플리케이션 계층에서 전달하고자 하는 데이터를 생성한 뒤 각 계층을 거치면서 통신에 필요한 정보를 더하고, 최종적으로 물리적 네트워크(다이아그램에서 Physical)에 넘기게 되는 것입니다.

 

참고로 애플리케이션 계층의 프로토콜로는 HTTP(웹 페이지), FTP(파일 전송), SMTP(이메일) 등이 있고

데이터 링크 계층(네트워크 인터페이스 계층이라고도 함)의 프로토콜엔 이더넷, ARP, PPP 등이 있습니다.

 


참고 자료

댓글