[지식창고]/네트워크

[컴퓨터 네트워크] 3.2 multiplexing and demultiplexing

개발새발주발 2023. 4. 7. 19:56
728x90

우리는 현재 3장, Transport layer에 대해 배우고 있다. 

 

 Transport layer의 주 기능은 end-to-end 통신을 제공한다는 것이다. 이 계층은 송신 호스트와 수신 호스트 간의 데이터 전송에 필요한 신뢰성, 효율성 및 보완성을 제공한다. Transport 라는 이름때문에 Network layer와 헷갈리기 쉬운데 데이터를 보낼 곳에 대한 주소를 이용하여 전송에 도움을 주는 것은 Network layer에서 담당하고 Transport layer에서는 데이터 전송에 있어서 사용자의 요청(Message)를 담아 원하는 Socket으로 전송해주고 신뢰성을 부여한다고 생각해보면 좋을 것 같다. 

 

3.1부터 3.4까지는 빠르고 짧게 진도가 나갈 것이다.. 하지만 만약에 이 글을 보고 있는 미래의 후배님들에게 한마디 조언을 남기자면 .. 3.5부터 정신을 빠짝 차려야할 것이다. 그 이유 첫번째로 내용이 어렵고 두번째로 진도가 빨리 나간다.. 그러니 다들 파이팅 ~~ ! 사실 내가 제일 파이팅 ~~ ! 


 3장 두번재 포스팅에서는 multiplexing과 demultiplexing에 대해 다루어볼 것이다.

우선 ! 그 전에 Data Encapsulation/Decapsulation에 대해 알아보자 

 

1. Data Encapsulation/Decapsulation

우리는 앞서 이 개념에 간략히 다루어 본 바 있다. 바로 여기에서 !

하지만 아무래도 조금 부족하다고 느껴져 추가 설명을 마구마구 해보겠다. 

 

우리는 5 layer에 대해 배우면서 application → physical layer으로의 이동은 Encapsulation, 그 반대로의 이동은 Decapsulation이라고 배웠다. 캡슐화를 하며 우리에게 필요한 데이터를 추가하여 패킷을 만들어 나갔고 Decapsulation은 이렇게 만들어진 패킷을 받은 수신측에서 패킷을 해독하기 위해 각 계층의 헤더 정보를 제거하고 해당 계층에서 데이터를 추출하는 과정이다. 

앞서 말한 과정을 도식화한 그림이다. 

PDU(Protocol Data Unit) : 각 계층에서 생성되는 데이터의 논리적 단위 

Transport Layer Segement = Data Chunk + Port # 

Network Layer   Datagram = Segment + IP Addr

Data Link Layer Frame = Datagram + HW Addr 

 

 

2. Multiplexing/ demultiplexing 

Transport layer의 주 기능 
Multiplexing : 다수의 소켓으로부터 데이터를 수집하여 네트워크 층에서 처리 가능한 데이터를 만들기 위해 분할하는 과정
Demultiplexing : 수신 측에서 도착한 세그먼트를 해당 소켓으로 전달하기 위해 수신 측 포트 번호를 사용하여 세그먼트를 구분하는 과정

쉽게 말하자면 Multiplexing은 원하는  Socket으로 보내기 위한 과정이고 Demultiplexing 은 Segment에서 넘어온 정보를 받는 과정이다 ~ 

 

그럼 차차 자세히, 하나하나 톺아보자 ! 

 

Multiplexing at Sender : 송신측에서는 Multiplexing 

- 여러개의 소켓으로부터 데이터를 다루고 transport header를 붙인다. 이 헤더는 후에 demultiplexing을 할 때 사용된다!

 

Demultiplexing at Receiver : 수신측에서는 Demultiplexing 

- 헤더를 사용하여(transport layer에서는 transport header를 사용하겠지 ~ )  전달받은 segment를 올바른 소켓으로 보낸다. 

강의자료에 있는 그림이다. 하지만 서버에서 모이고, 모여지는 데이터에 대한 설명이 부족하다고 생각하여 아래 그림을 첨부한다 ~ 

이 그림을 보시고 이해가 되시길 바란다 🐢

Multiplexing은 비교적 쉽다. 합치는 과정에 connect에 따라 달라지는 점이 없기 때문이다. 하지만 Demultiplexing은 비교적 어렵다. connet에 따라 달라지는 점이 있기 때문이다 ! 

 

그럼 이제 Demultiplexing에 대해 좀 더 자세히 알아보자 ~ 

 

Demultiplexing는 어떻게 일하니 ~ ? 

network layer에 오는 하나의 Data stream을 받아 Port 에 맞게 delivery 한다(distribution)

 

Host receives IP datagrams : 

  • 각각의 데이터그램은 source IP, destination IP주소를 가지고 있음
  • 각각의 데이터그램은 transport-layer segment를 carrie한다!
  • 각각의 segment는 source, destination의 port num을 가진다.

Host use IP adderss & port number  

: 세그먼트에 적절한 소켓을 전송하기 위해 

 

 

 

 

 

 

 

Connectionless Demultiplexing : UDP 

소켓을 연다 → destination IP, destination port 로 보냄 → 받는 쪽에서 IP, port를 본다 (transport layer에서는 port 만 본다! ) → connectionless에서는 destination만 같으면 같은 socket으로 연다 

 

* 보내는 쪽이 어떻든 간 destination port가 같으면 socket을 하나만 연다 ! 

 

 

Connextion-oriented demultiplexing : TCP 

TCP socket identified - 4튜플로 

- source IP address

- source port number 

- dest IP address

- dest port number 

: 이 4개의 튜플을 한 쌍으로 볼 수 있다 ! 

좌 - 이론에 따른 프로그래밍  우 - 실제 프로그래밍 

socket을 각각 연다 → destination IP/port 가 같아도 source가 다르면 connection이 각각 열리고 socket도 각각 열려야한다. 

 

⭐️ Connect이 4개의 튜플 item에 따라서 하나라도 틀리면 다른 connection 이 맺어진다.

 

* 좌-우 이론과 실제가 다른 이유는 thread가 있기 때문이다 ! 이 부분은 네트워크에서 깊게 짚고 넘어가지 않았기에 OS에서 다루도록 해보겠다  ~ 


소켓을 주로 다루는 Transport layer에 대해 알아보았다 ~ ! 

이 계층에서 하는 주요 기능인 Multiplexing, Demultiplexing에 대해 알아보았고 Demultiplexing에서 connectionless, connection-oriented 되는 방법도 알아보았다 ~ 다음 시간엔 UDP에 대해 다루어보겠다 : > 


[출처 및 참고]

https://k-elon.tistory.com/36 

한국항공대학교 「컴퓨터 네트워크」 강의 자료