일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- node
- gmaps
- commit
- Q-Map
- SSH Key
- Retrofit
- Repository
- cordova
- Linux
- rest
- AWS
- express
- node.js
- Android
- Ionic
- 저장소
- IT 도서
- angularJs
- 인공지능
- mean
- 깃
- 안드로이드
- git
- ssh
- EC2
- HTML
- JSP
- java
- ubuntu
- 자바
- Today
- Total
UroA 개발 블로그
[Network] (트랜스포트 계층) 다중화와 역다중화 본문
다중화와 역다중화
트랜스포트(전송) 계층(trransport layer)은 애플리케이션(응용)계층과 네트워크 계층 사이에 존재한다.
트랜스포트 계층은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스에게 직접 통신 서비스를 제공하는 기능을 한다.
트랜스포트 계층 개요
- 트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들간의 논리적 통신을 제공
* 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공
- 논리적 통신 : 애플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트는 직접 연결된 것처럼 보인다는 것
- 트랜스포트 계층 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현
- 세그먼트 : 트랜스포트 계층에서 전송되는 패킷 호칭
- 애플리케이션에서 보낸 메시지 길이가 길어 세그먼트에서 지원하는 길이를 초과하면?
-> 두 개 이상의 세그먼트로 나눠 전송
-> 네트워크 계층의 데이터그램에 캡슐화되어 전송 (※네트워크 라우터들은 오로지 데이터그램의 네트워크 계층 필드들에 대해서만 동작)
- 네트워크 애플리케이션에는 하나 이상의 트랜스포트 계층 프로토콜이 사용 가능
ex) 인터넷 : TCP, UDP 두 개의 프로토콜을 가짐 (서로 다른 서비스 집합 제공)
- UDP(User Datagram Protocol) : 애플리케이션에게 비신뢰적이고 비연결형인 서비스를 제공
- TCP(Transmission Control Protocol) : 애플리케이션에게 신뢰적이고 연결지향형 서비스 제공
(*애플리케이션 개발자는 네트워크 애플리케이션 설계시 두 가지 프로토콜 중 하나를 명시해야 함)
- IP는 호스트들 간에 논리적 통신을 제공 (최선형 전달 서비스(best effort delivery service))
-> 호스트들 간 세그먼트를 전달에 있어 최대한 노력하지만, 반드시 전달됨을 보장하지 않는다. (+ 순서대로 도착하는 것도 보장x)
-> 안정성↓
- TCP와 UDP 모두 IP 데이터그램을 사용해 세그먼트 전송
- 트랜스포트 계층은 여러 개의 소켓(socket)과 네트워크 계층간의 다중화(multiplexing)와 역다중화(de-multiplexing) 동작 지원
* 네트워크 계층은 호스트와 호스트간의 데이터 전송을 맡음
- 소켓? -> 네트워크에서 프로세스로 데이터를 전달하고, 프로세스로부터 네트워크로 데이터를 전달하는 출입구
- 하나의 애플리케이션(이하 AP)은 하나 이상의 소켓을 생성할 수 있다.
- 네트워크 계층은 서로 다른 호스트간에 데이터그램을 전송하기 위한 계층
트랜스포트 계층은 호스트에 존재하는 여러 개의 소켓 간에 데이터를 전달하기 위한 계층
-> 하나의 IP로 들어온 패킷을 여러 개의 소켓 중 어느 소켓으로 전달할 것인지 ?
-> 역다중화 필요
- 여러 개의 소켓으로부터 들어오는 패킷을 서로 공유하는 네트워크 계층을 통해 전송
-> 다중화 필요
간단하게 다중화란 여러소켓으로부터 데이터를 수집하여 헤더를 붙여 전송하는것을 말하고, 역다중화란 수신된 세그먼트(다중화로 생성된 패킷)를 올바른 소켓에 전달하는 것을 합니다.
-포트(port)
*다중화 및 역다중화를 구현하기 위해 포트 번호 사용 (호스트 내에서 unique하게 부여)
-> 소켓 IP주소 + 포트번호로 인터넷 상에 uniquely identified
*0~65535 범위 (16bit)
*0~1023는 well-known 포트 번호 (ex> HTTP 80, FTP 21)
*그 외 번호 -> 일반 응용 프로그램에 의해 사용됨 (OS가 할당)
- 역다중화 과정
*TCP 소켓은 4개 투플(출발지 IP주소, 출발지 포트번호, 목적지 IP 주소, 목적지 포트번호)로 된 집합에 의해 식별
-> 네트워크로부터 호스트에 TCP 세그먼트 도착
* 다른 출발지 주소/포트번호를 가지고 도착한 두 개의 TCP 세그먼트는 두 개의 다른 소켓으로 향하게 됨
(Socket clientSocket = new Socket ("SeverHostName", 4652); -> TCP 연결 설정 세그먼트 생성 명령)
-> 클라이언트 프로세스를 위한 TCP 소켓을 생성 (이 소켓을 통해서만 데이터는 클라이언트 프로세스로 들어오고 떠남)
-> 서버 컴퓨터의 호스트 OS가 세그먼트 수신
-> 연결요청을 포트넘버 4652로 연결 수락을 기다리는 서버 프로세스로 보냄
(Socket connectionSocket = welcomeSocket.accept();)
#서버 호스트는 동시에 존재하는 많은 TCP 소켓 지원 가능
-> 각각의 소켓은 프로세스에 접속돼있고, 네 가지 투플에 의해 식별됨
[출처] 컴퓨터 네트워킹 하향식접근 (제 6판)
'Network' 카테고리의 다른 글
[Network] 전송계층 프로토콜의 구현방식 (0) | 2015.12.13 |
---|---|
[Network] WireShark에서 캡쳐 가능한 인터페이스가 보이지 않을 때 (5) | 2015.12.06 |
[Network] REST란 무엇인가? (0) | 2015.11.29 |
[Network] URI와 URL의 차이점 (0) | 2015.11.29 |