본문 바로가기
네트워크/컴퓨터 네트워크 수업

3-2. Multiplexing/Demultiplexing

by dustnn 2024. 10. 21.

Transport 계층의 프로토콜의 역할은 multiplexing과 demultiplexing이다.

 

- multiplexing

sender측에서 이루어짐

많은 socket으로부터 데이터를 모으되, 나중에 demultiplexing이 가능한 정보를 실어주는 작업이다.

 

-demultiplexing

receiver측에서 이루어짐

목적지 socket을 찾아 데이터를 application계층으로 보냄

 

**여러 개의 receiver로 보낸다면 각 receiver별로 socket을 둔다.

 

 

 

 

How Demultiplexing works

 

sender에서 receiver로 전달되는 IP datagram은 sender와 receiver의 IP주소들을 가지고 있고

 

 

sender에서 receiver로 전달되는 IP datagram은 sender와 receiver의 IP주소들을 가지고 있고

transport-layer의 segment는 source port#와 destination port#를 가지고 있다.

 

socket의 IP 주소와 source/destination port#을 통해 demultiplexing이 가능하다.

 

 

Connectionless demultiplexing(UDP protocol의 demultiplexing)

 

!! 하나의 socket 사용 !!(UDP)

 

Multiplexing(By client)

(참고)Sender가 multiplexing할 때

DatagramSocket mySocket1 = new DatagramSocket(12345)

 

이렇게 socket의 이름(mySocket1)과 port#(12345)를 지정해 정보를 실어준다.

 

clientSocket.sendto(message.encode(), (serverName, serverPort))

 

그리고 server로 보낸다.

 

Demultiplexing(By server)

: serverName과 serverPort를 사용한다 !

 

 

UDP는 socket을 하나만 두어 모든 client가 같은 socket을 사용한다.

그래서 모든 IP datagram들은 같은 destination port#를 달고 온다.

 

message, clientAddress = serverSocket.recvfrom(2048)  #message와 client address 추출해냄
modifiedMessage = message.decode().upper()  #client가 요청한 일 해줌
serverSocket.sendto(modifiedMessage.encode(), clientAddress)
#요청한 일을 해준 결과를 보낼 때 client측에서 demultiplex할 수 있는 정보 보내줌

 

 

(Example)

 

 

1. 서버가 socket 생성하면 자동으로 포트번호(6428) 지정된다.

DatagramSocket serverSocket = new DatagramSocket(6428);

 

2. 클라이언트가 request 보내기 위해 socket 생성하고 포트번호(9157) 지정된다.

DatagramSocket mySocket1 = new DatagramSocket(9157);

 

3. clieint가 source(client) IP주소와 port#, destination(server) IP 주소와 port#를 server에게 보낸다.

4. server가 source(server) IP주소와 port#, destination(client) IP 주소와 port#를 client에게 보낸다.

 

 

 

 

Connection-oriented demux(TCP protocol의 demultiplexing)

 

!! client별로 별도 socket 사용 !!(TCP)

=> 위에서 UDP 때는 destination의 IP, port#만 있어도 된다.
하지만 TCP의 경우에는

socket을 찾아가기 위해 client별로 다른 socket을 사용하기 때문에 source와 destination의 정보 모두 필요하다.

(그냥 미리 말하자면 welcome socket 번호는 80으로 같으므로 socket port 지정해주기 위해서는 source의 정보를 보기 때문)

 

- source IP address

- source port#

- destination IP address

- destination port#

 

 

1. host가 source IP(A)와 port#(9157), destination IP(B)와 port#(80)

** server의 welcome socket port# = 80 => destination의 

2. server가 source(client)와 destination정보를 보고(특히 client의 정보를 보고) welcome socket이 아닌 다른 socket 지정

3. client에게 source, destination 정보 보냄