해당 글은 한양대학교 이석복 교수님의 과목 "컴퓨터 네트워크"를 공부하고 작성한 글입니다. 해당 강의를 직접 수강하시려면 다음 링크를 참고해주세요.
1. 다중화(Multiplexing)와 역다중화(Demultiplexing)
(1) 다중화
다중화(Multiplexing)와 역다중화(Demultiplexing)이라는 단어가 있다.
전송(Transport) 계층에서 다중화(Multiplexing)란 애플리케이션(Application) 계층의 여러 개의 소켓에서 전송되는 데이터를 모아 하나로 모으는 것이다. 이렇게 모아진 메시지 데이터를 세그먼트(Segment)라 한다.
다중화는 전송(Transport) 계층에서만 할 수 있는 것이 아니라, 어느 계층에서든 여러 곳에서 나온 데이터를 하나로 묶을 때에 사용한다.
전송 계층에서의 다중화 데이터는 세그먼트라 부르지만 네트워크 계층에서 다중화한 것은 다른 이름으로 부르는데, 그 경우에는 패킷이라 부른다.
계층마다 다중화했을 때 메시지의 이름이 다르므로 헷깔릴 수 있다.
이렇게 다중화한 메시지엔 헤더(Header)가 붙게 된다.
헤더란 메시지 앞에 붙은 정보를 말한다.
실제 전송하고자 하는 데이터는 헤더 다음에 붙게 된다.
그럼 헤더는 어떤 기능을 하느냐?
헤더는 우편 배달을 할 때 주소 역할을 한다.
데이터가 원하는 곳에 전달되고, 정상적으로 전달될 수 있도록 데이터를 포함하고 있다.
자세한 것은 다음 씩이님의 블로그에 재미있게 설명되어 있으니 참고하면 좋을 것 같다.
[인터넷:원리] 다중화와 역다중화란?: Multiplexing and Demultiplexing: 네트워크 프로토콜 계층 :: 씩이 머릿속 (tistory.com)
(2) 역다중화
전송을 위해 여러 개를 하나로 묶는 것(Multiplexing)이 있다면, 전송이 되었을 때 이를 적절한 소켓에 전달해주는 것도 필요할 것이다.
이를 역다중화(Demultiplexing)라 한다.
역다중화(demultiplexing)는 전송받은 세그먼트의 데이터를 적절한 소켓에 전달해주는 것이다.
mutliplexing이 여러 개를 하나로 묶어주고, demultiplexing은 반대로 하나의 데이터를 적절하게 분배해주는 역할을 한다.
(3) 세그먼트
세그먼트는 전송(Transport) 계층에서 다중화하여 만들어진 데이터이다.
헤더와 데이터에는 다음과 같은 것이 들어간다.
- 헤더(header): 전송 측의 포트(source port number), 목표 포트(dest port number), 기타(other header fields)
- 데이터: 메시지(application data, message)
1) 포트 번호
데이터가 상대에게 도달하면 전달받는 측(receiver)은 이를 역다중화(demultiplexing)하여 데이터를 적절한 소켓에 전달한다.
여기서 전달해야 할 소켓을 고르기 위해 포트 번호를 통해 구분한다.
전달하는 쪽의 포트 번호를 source port, 전달받는 쪽의 포트 번호를 dest port로 하여 헤더에 저장한다.
2) 헤더 크기 <<< 데이터 크기
일반적으로 헤더의 크기보다 데이터의 크기가 훨씬 크다.
그리고 헤더에 IP 주소가 존재하지 않는데, IP 주소는 Transport 영역이 아니라 네트워크 단의 헤더에 기록된다.
2. TCP/UDP의 다중화/역다중화
TCP와 UDP는 역다중화하는 방법이 서로 다르다.
UDP는 TCP에 비해 신뢰성이 낮아 더 단순한 방식으로 되어 있다.
(1) UDP의 역다중화
UDP는 신뢰성 낮은 통신 프로토콜이므로 TCP보다 더 단순하다.
- 서버는 하나의 소켓만으로 통신한다.
- 하나의 서버 소켓만 있으면 모든 클라이언트와 자유롭게 통신 가능
- dst IP, dst port로 데이터를 전송할 소켓을 구분한다.
- 역다중화(demultiplexing) 중에 서버의 IP와 port가 같으면 동일한 서버 소켓으로 전송된다.
(2) TCP의 역다중화
TCP는 보다 높은 신뢰성 보장을 위해 UDP보다 복잡하다.
- UDP와 달리, 하나의 클라이언트 소켓에 하나의 서버 소켓이 매핑된다.
- ex) 네이버, 티스토리 등의 웹 페이지에 사용자 하나가 접속하면 그 사람을 위한 소켓 하나를 생성한다.
- 클라이언트 수만큼 소켓이 필요하므로 TCP는 UDP보다 네트워크 자원 소비가 큼
- 클라이언트가 서버를 찾기 위해 src IP/src Port, dst IP/dst Port를 사용한다.
- 역다중화(demultiplexing) 중에 이 중 하나라도 다를 경우 다른 서버 소켓에 전송된다.
- UDP와 달리, dst IP, dst Port가 같아도 src IP, src Port가 다르면 서버의 다른 소켓으로 데이터가 전송됨
(3) UDP의 세그먼트 헤더
TCP, UDP, IP 등 다양한 프로토콜에서는 header 필드가 존재한다.
header 필드에 어떤 정보가 들어있는지 알아야 동작을 이해할 수 있다.
UDP 세그먼트의 특징은 다음과 같다.
- header 필드의 수: 4개 → 단순한 구조로 되어 있다.
- source port 번호: 0~65535 (16 bits이므로 2^16 = 65536)
- destination port 번호: 이를 통해 역다중화(demultiplexing)을 함
- 길이(length) : UDP 세그먼트의 전체 바이트 길이. 본문(message)의 길이와 헤더(header)의 길이를 모두 포함한다.
- 체크섬(checksum) : 전송 도중에 데이터에 에러가 있는지 아닌지를 판단하기 위한 용도
- checksum에 문제가 발생하면 에러가 발생했음을 확인하고 메세지를 버리게 된다.
- 이를 통해 udp는 mutliplexing/demutliplexing, 에러 체크 작업을 해주게 된다.
UDP는 단순한 구조로 되어 있어 헤더 또한 짧은 편이다.
그러나 TCP는 동작 방식이 복잡하여 헤더 또한 복잡하다.
따라서 TCP가 어떻게 동작하는지를 먼저 알아보아야 한다.
다음 글에서 TCP를 알아보자.
'컴퓨터과학 > 네트워크' 카테고리의 다른 글
3-3. 전송(Transport) 계층: 파이프라인 프로토콜 (0) | 2021.10.14 |
---|---|
3-2. 전송(Transport) 계층: 신뢰성 있는 데이터 전송(RDT) (0) | 2021.10.10 |
2. 소켓 프로그래밍 (0) | 2021.10.06 |
1-2. 컴퓨터 네트워크 기본 2 (0) | 2021.10.03 |
1-1. 컴퓨터 네트워크 기본 1 (0) | 2021.10.01 |
댓글