전송 계층은 OSI 7 Layer 중 네 번째에 위치한 계층으로서 데이터 단위는 세그먼트[Segment]다. 전송 계층의 역할은 '논리적 통신'이다. 송신자[Sender]와 수신자[Receiver]가 서로 통신할 때 물리적 관점에서 이들의 메시지는 많은 라우터와 링크를 거쳐야하지만, 이를 직접 연결된 것처럼 보이게끔 하는 것이다. 즉 정리하자면 쉽게 그냥 '전송'을 담당하고 있다고 생각하자.
전송 계층은 메시지의 전송이 올바르게 되는 것을 보장하기 위해서 몇가지 역할을 하고 있다.
1. 다중화와 역다중화 (=세그먼트 생성)
전송 계층은 Application 계층에서 메시지[Msg]를 받은 후 이를 쪼개 세그먼트 단위로 만든다. 그 후, 각 세그먼트마다 전송 계층의 헤더를 붙인다. 이 과정을 다중화[Multiplex]라고 한다. 이와 반대로, 하위계층인 Network 계층에서는 데이터그램[Datagram]을 받은 후, 데이터그램에서 세그먼트를 추출하여 알맞은 소켓에 전송하는 역할을 담당한다. 이 과정을 역 다중화[DeMultiplex]라고 한다.
즉 상위계층으로부터 받은 데이터를 전송의 계층의 데이터 단위로 만든 후 이를 하위계층에 전달하는 것과 하위계층으로부터 받은 데이터에서 전송 계층이 이해할 수 있는 메시지를 추출해낸 후 상위로 보내는 역할을 한다.
2. 포트[Port]
포트란 하나의 호스트 내에서 존재하는 프로세스를 찾아갈 수 있는 번호다. 예를 들어보자. 나는 데스크탑 PC를 통해 동시에 노래도 듣고 있고, 인터넷 쇼핑도 하고 있으며, 게임 다운로드도 받고있는 중이다. 즉, 세 개의 프로세스가 하나의 PC 내에서 동시에 돌아가고 있다.
노래는 멜O 서버에서 데이터를 요청해서 받는 것이고, 인터넷 쇼핑은 네이O에서 요청해서 데이터를 가져오며, 게임 데이터 블리자O 서버에서 받아온다. 그럼 각각의 서버는 내 PC의 IP 주소를 기반으로 내 PC까지 찾아왔다. 그러나 그 후에, 이 데이터가 어떤 프로세스를 위한 것인지를 IP 주소로는 알 도리가 없다. 왜냐면 IP 주소는 프로세스가 아니라 내 PC 주소를 명시해 놓은 것이기 때문이다.
이때 사용되는 것이 '포트'다. 포트는 프로세스의 번호를 담는다. 하나의 메시지는 IP 주소를 담아놓았을 뿐만 아니라 포트 번호도 명시되어있다. 따라서, 포트 번호에 따라서 특정 데이터 어떤 프로세스를 위한 것인지 찾을 수 있다. 즉, 포트란 하나의 호스트[PC] 내에 존재하는 프로세스를 찾아갈 수 있는 번호다.
포트번호는 굉장히 많다. 흔히 0번~1023을 잘 알려진 포트라 한다. 또한 포트번호를 묻는 공기업 전산 문제도 있기 때문에 그냥 지나치지 말고 시험 전엔 꼭 외워놓자.
PORT NUMBER | Protocol |
1 | TCPMUX (TCP 포트 서비스 멀티플렉서) |
7 | ECHO |
13 | DAYTIME |
20, 21 | FTP (20: Data, 21: Control) |
22 | SSH |
23 | Telnet |
25 | SMTP [Simple mail transfer protocol] |
53 | DNS |
67 | BOOTP[Bootstrap] 또는 DHCP |
69 | TFTP (UDP 기반) |
80 | HTTP |
88 | 케르베로스 (인증 서비스) |
109,110 | POP2, POP3 |
123 | NTP [Network Time Protocol] (시간 동기화) |
179 | BGP |
443 | HTTPS over SSL (암호화 전송) |
잘 알려진 포트와 반대로 임시 포트 번호[Ephemeral]라는 것이 있다. 이는 1024~5000번 대의 포트들이다. 잘 알려진 포트들은 서버 쪽에 사용되는 프로토콜이 대부분이다. 클라이언트 쪽에는 포트 번호를 크게 신경쓰지 않으며 내 PC 내에서 유일한 포트 번호인가? 여부만 신경 쓴다.
예를 들어, PC 내에서 NodeJS 같은 서버 만들어서 실행시키면 서버 실행 번호 아무거나 생성되는 것과 같은 이치다.
3. 소켓[Socket]
소켓은 네트워크 에서 서버와 클라이언트가 특정 포트를 통해서 양방향 통신이 가능하도록 만들어주는 SW 장치다. 외부 네트워크에서 들어오는 데이터는 꼭 이 소켓을 통해서 특정 프로세스로 들어간다. 즉, 특정 포트에 존재하는 프로세스의 출입문(꼭 거쳐야만 하는)이라고 생각하자.
흥미롭게도 하나의 프로세스는 같은 프로토콜, 같은 IP 주소, 같은 포트 넘버를 가지는 수십 혹은 수만 개의 소켓을 가질 수 있다. (1포트 1소켓 XXX) 이런 이유로 인해 하나의 프로세스는 하나의 포트번호만으로도 다른 여러 호스트들에 있는 프로세스의 요청을 처리할 수 있다. 예를 들어 게임 서버의 동시 접속자 수가 여러 명일 수 있다는 것처럼.
'전공 > 네트워크' 카테고리의 다른 글
전송 계층 - TCP 의 모든 것 (#1. 핸드세이킹, 혼잡제어) (0) | 2020.10.29 |
---|---|
전송 계층 - UDP와 TCP의 모든 것 (0) | 2020.10.29 |
네트워크 계층 - DHCP [Dynamic Host Configuration Protocol] (0) | 2020.10.29 |
네트워크 계층 - NAT[Network Address Translation] (0) | 2020.10.28 |
네트워크 계층 - 경로 설정 프로토콜 #3. OSPF와 BGP. (1) | 2020.10.28 |