• [Network] Multiplex & Demultiplex ( with Transport Layer )

    2021. 9. 17.

    by. KimBangg

    전송 계층이란?

     

    전송 계층이라는 말을 들으면, 머리 속에 어떤 느낌이 먼저 떠오르시나요?

    저에게는 실제 데이터를 전송해주는 다른 컴퓨터를 사용하는 유저 또는 어플리케이션에게 전달해준다는 느낌이 굉장히 강했는데요.

     

    하지만, 느낌과는 다르게 전송 계층은 제 컴퓨터 내부의 데이터를 각 어플에게 올바르게 전달하고, 이러한 방식이 다른 컴퓨터 내부에서도 올바르게 전달될 수 있도록 양식을 정해준다는 느낌을 많이 받았던 것 같습니다.

     

    쉽게 말하자면 반장 같은거죠 :D.

     

    그래서 아래의 글을 읽을 때 다음과 같은 생각을 가지고 계시면 이해하기가 훨씬 쉬울거라고 생각합니다.

    "전송 계층은 반장이다. 그래서 컴퓨터(=섬) 내부의 앱(=사람들의 메세지)를 관리해주는 사람이다."

     

     

    전송 계층은 무슨 역할을 수행하나요?

     

    전송계층은 다른 컴퓨터에 있는 앱들을 논리적으로 연결시켜주는 역할을 제공합니다.

    데이터를 받을 때는 쪼개진 Segment를 합치는 역할, 보낼 때는 앱을 여러 개의 Segment로 쪼개는 역할을 수행합니다.

    ( => 세그먼트를 나누는 이유는, 데이터 손실이 발생하더라도 전체를 잃는 불상사를 방지 하기 위함입니다. ) 

     

     

    * 예시

    동쪽과 서쪽 총 2개의 섬이 존재하고, 각 집에는 3명의 사람들이 있다고 가정을 해봅시다 !

    이 때 동쪽 섬에 사는 동현이가 가 사람들의 편지를 모아서 우편함에 넣는 역할을 수행합니다. 

    위에서 언급한 섬은 컴퓨터(=End System)이고, TCP/UDP와 같은 전송계층의 포로토콜은 "동현이" 라는 사람을 의미합니다.

     

    - 용어 정리

    섬 ( = 컴퓨터, EndSystem )

    집 (= Application )

    편지(= Data, Segment)

     

     

     

    소켓 ( Socket )

     

    이전 파트에서 응용 계층(Application Layer)에는 "소켓"에 대해서 이야기를 했던게 기억이 나시나요?

    전송 계층은 전달 받은 데이터를 직접 어플리케이션에 전달 하지 않고, 반드시 "소켓"을 거쳐서 수행을 합니다 :D

     

     

     

     

     

     

    왜 소켓을 반드시 거쳐야 하는데?

     

    그런데 여기서 저는 다음과 같은 의문이 들었습니다.

     

    어플리케이션 계층에서는 왜 소켓이 필요할까?

     

    다른 계층은 이런 기능이 없어도, 데이터를 잘만 넘기던데 왜 굳이! 어플리케이션에만 있어야할까? 라는 의문이 머리 속을 맴돌았는데요.

    이에 대한 답을 찾던 도중 응용 계층에 소켓이 존재하는 것이 아닌 각 어플리케이션마다 1개  이상의 소켓이 있다는 점에서 영감을 얻을 수 있었습니다.

     

    즉, 어플리케이션 계층과 전송 계층 사이에 수많은 소켓이 존재하는거죠 :D

     

    각 어플리케이션과 응용계층을 연결해주는 하나의 "문" 이고, 이러한 문에는 포트 넘버라는 고유의 값이 존재하는데요.

    이 값을 통해서 필요한 데이터를 골라서 받고, 어떤 어플리케이션이 보낸 것인지 증명 할 수 있지 않을까 하는 약간의 깨달음을 얻을 수 있었습니다.

     

     

    * 예시

    다시 이전의 예시로 돌아와서, 소켓 번호를 메일 서비스에 비유하자면 "주소" 정도로 생각하시면 될 것 같습니다.

    동쪽 섬에 여러 개의 메일이 왔을 때  A집에  가야하는 메일을 B집에게 주면 안되겠죠? :D

     

     

    - 용어 정리

    섬 ( = 컴퓨터, EndSystem )

    집 (= Application )

    편지(= Data, Segment)

     

     

      

    멀티플렉싱과 디멀티플렉싱 ( Multiplexing and Demultiplexing )

     

     

    멀티플렉싱과 디멀티플렉싱을 정리하면서, 제가 얻은 깨달음에 확실함을 얻을 수 있었습니다.

     

     

    책을 보게 되면,

    gathering data from multiple sockets, enveloping data with header (later used for demultiplexing)

    "디멀티플렉싱을 위해 사용될 데이터를 헤더에 싣어서 동봉한다. " 라는 표현을 사용하는데요.

     

    이 말은 즉슨 데이터를 단순히 "합치는" 것에 그치지 않고, 필요한 정보를 추가한다 것을 의미한다고 생각할 수 있었습니다.

    그렇다면 합쳐진 데이터를 분해할 때 어떤 정보가 필요할까? 다시 고민을 해보면 전송 계층은 받아온 정보를 각 어플리케이션에게 적절히 전달하는 것이 목적이라는 결론에 도달할 수 있었습니다.

     

    그러면 우리가 이전에 고민했던 포트 번호의 목적과 부합을 하게 되고, 저는 끝내 멀티플렉싱이 포트 넘버를 데이터와 합쳐주는 작업으로 이해할 수 있었습니다bb

     

     

     

     

     

     

     

     

     

    그렇다면 이제 디멀티플렉싱은 간편하죠? :D

    멀티플렉싱에서 데이터 + 포트 번호를 동봉을 해놨는데, 이 값을 분해해서 특정 데이터를 원하는 어플리케이션에게 전달 해주는 기능을 수행합니다! 

     

     

     

     

     

    * 예시

     

    멀티플렉싱은 편지 봉투에 [ 주소 ] 를 적는 작업을, 

    디멀티플렉싱은 편지 봉투에 있는 주소를 바탕으로 편지를 전달하는 역할이라고 생각하시면 좋습니다 :D

     

    - 용어 정리

    섬 ( = 컴퓨터, EndSystem )

    집 (= Application )

    편지(= Data, Segment)

     

     

      

    전송 계층이 받게 되는 "데이터 구조"

     

    실제로 전송계층이 받는 정보는 포트 넘버 외에도, IP주소도 전달 받게 됩니다 :D.

     

     

     

     

      

    Connectionless vs Connection Demultiplexing

     

    1. UDP ( = Connectionless ) 

    [출발, 도착 IP / 출발 PortNumber] 를 모두 고려하지 않고 오직 도착 Port Number만을 고려합니다.

     

     

     

    2. TCP ( =Connection ) 

    TCP는 주어진 정보를 모두 이용하여, 하나의 값이라도 다르면 다른 소켓에 데이터를 전달합니다.

     

     

     

     

    출처

     

    https://medium.com/coderscorner/transport-layer-multiplexing-and-demultiplexing-670e16b6bfc

     

    Transport Layer Multiplexing and Demultiplexing

    In this post we are going to talk about how multiplexing and demultiplexing happens at the transport layer. Before we jump into the…

    medium.com

     

    댓글