[Network] #14 전송 계층 개요 - IP의 한계와 포트
[혼자 공부하는 네트워크↗️], 컴퓨터 네트워킹: 하향식 접근 (제8판)을 바탕으로 정리한 글입니다.
- 전송 계층이 네트워크 계층의 대표적인 프로토콜인 IP의 한계를 어떻게 극복하는지 그리고
- 전송 계층이 응용 계층에서 동작하는 다양한 애플리케이션 프로세스를 어떻게 식별할 수 있도록 하는 포트에 대해서 알아보도록 하자.
1. IP 한계를 보완하는 전송 계층
전송 계층은 네트워크 계층과 응용 계층 사이에 존재하고 있다.
- 전송 계층의 대표적인 기능
- IP 한계 보완: 신뢰할 수 있는 통신과 연결형 통신 기능 제공
- 응용 계층의 프로세스 식별: 포트 번호 활용
- 즉, 전송 계층은 포트 번호를 통해 사용자가 실행하는 프로그램이 무엇인지 식별하고, IP 프로토콜의 한계를 보완해준다.
1.1 IP 특징
- 신뢰할 수 없는 (비신뢰성) 프로토콜
- 비연결형 프로토콜
-
IP 패킷의 전달 = 신뢰성이 없는 통신 + 비연결형 통신
1.1.1 신뢰할 수 없는 통신
- 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않음.
- 통신 과정에서 패킷이 잘못 전송되어도 이를 확인하지 않고, 재전송도 하지 않으며, 순서대로 패킷이 도착할 것이라는 보장도 하지 않는다는 의미
1.1.2 비연결형 통신
- 송수신 호스트 간에 사전 연결 수립 작업을 거치지 않음.
- 그저 수신지를 향해 패킷을 보내기만 할 뿐.
IP는 왜 신뢰할 수 없는, 비연결형 통신을 할까?
- 주된 이유는 성능!
- 신뢰할 수 있는 연결형 통신은 성능에 악영향을 끼침
1.2 전송 계층의 프로토콜
1.2.1 TCP
- 연결형 통신을 가능하게 함
- 송수신하는 동안에는 연결을 유지하고, 송수신이 끝나면 연결을 종료
- 신뢰성 있는 통신을 가능하게 함
- 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능들을 제공
1.2.2 UDP
- 신뢰할 수 없는 통신, 비연결형 통신을 가능하게 함
- TCP 보다는 비교적 빠른 전송이 가능
2. 응용 계층을 식별하는 전송 계층
2.1 포트를 활용한 애플리케이션 식별
포트(port)란? 네트워크 상의 애플리케이션 식별 정보
- 컴퓨터에서 포트(port)는 소프트웨어 프로그램이 컴퓨터 내에서 통신할 때 사용하는 “문”과 같은 개념이다. 이 문을 통해 다른 컴퓨터나 장치와 정보를 주고받을 수 있다. 이 때 각각의 소프트웨어 프로그램은 고유한 포트 번호를 가지고 있으며, 이 포트 번호를 통해 정보를 주고받는다.
- 패킷이 최종적으로 향해야 할 곳은 특정 컴퓨터가 실행하는 특정 프로세스다.
2.2 포트의 분류
패킷 내 수신지 포트와 송신지 포트를 통해 송수신지 호스트의 애플리케이션을 식별
- 16비트로 표현 가능: 사용 가능한 포트의 수는 2^16 (65536)개
- 할당 가능한 포트 번호: 0번~65535번
포트의 분류
포트 종류 | 포트 번호 범위 |
---|---|
well-known port (잘 알려진 포트) | 0 ~ 1023 |
registered port (등록된 포트) | 1024 ~ 49151 |
dynamic port (동적 포트) | 49152 ~ 65535 |
2.1.1 well-known port (잘 알려진 포트)
0번부터 1023번까지의 포트
- 시스템 포트라고도 불림
- 범용적으로 사용되는 애플리케이션 프로토콜이 일반적으로 사용하는 포트 번호를 의미
2.1.2 registered port (등록된 포트)
1024번부터 49151번까지의 포트
- 잘 알려진 포트에 비해서는 덜 범용적
- 흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용
registered port | 설명 |
---|---|
1194 | OpenVPN |
1433 | Microsoft SQL Sever 데이터베이스 |
3306 | MySQL 데이터베이스 |
6379 | Redis |
8080 | HTTP 대체 |
2.1.3 dynamic port (동적 포트)
동적 포트(dynamic port), 사설 포트(private port), 임시 포트(ephemeral port) 라고도 불림
- 특별히 관리되지 않는 포트 번호 범위: 자유롭게 사용 가능
- 클라이언트는 대부분 동적 포트 사용 (e.g., 웹 브라우저)
- 서버는 대부분 잘 알려진 포트와 등록된 포트 사용
2.3 인터넷 할당 번호 관리 기관 (IANA)
- well-known port와 registered port는 IANA(IANA; Internet Assigned Numbers Authority) 에서 할당을 해준다.
- 포트 번호는 권고일 뿐 강제 사항은 아니다.
2.4 IP 주소:포트 번호 형식
“특정 호스트”에서 실행 중인 “특정 애플리케이션 프로세스” 식별하기 위해
IP주소:포트번호 형식
로 표기
2.5 포트 번호 관찰하고 해석하기
window의 경우 “리소스모니터” 프로그램을 통해 관찰 가능
크롬 브라우저는 35.197.145.196 호스트의 HTTPS라는 애플리케이션 프로세스와 통신하고 있다는 것을 확인할 수 있음.
3. 포트를 활용하는 기술
3. IP 주소를 변환하는 NAT
NAT는 사설 IP를 공인 IP로 바꿔주는 주소 변환 서비스이다.
- 변환 대상이 되는 IP 주소와 포트 번호를 관리하는 NAT 변환 테이블이 존재한다. 이 테이블에는 내부 사설 IP 주소와 외부 공인 IP 주소 간의 변환 정보를 저장한다.
- e.g.,
192.168.0.5
가 네트워크 외부로 나갈 때에는 송신지 주소가1.2.3.4
로 변환, 반대로 네트워크 외부에서 네트워크 내부로 이동할 때에도1.2.3.4
이192.168.0.5
로 변환
하지만, 사설 IP 주소 하나당 공인 IP 주소 하나가 대응되는 방식은 많은 사설 IP 주소를 변환하기에는 무리가 있다.
- 사설 IP 주소의 수만큼 공인 IP 주소가 필요해서 공인 IP 주소가 낭비된다.
- 이러한 한계를 포트를 기반으로 극복할 수 있다.
3.2 포트 기반의 NAT, NAPT
NAPT는 NAT의 확장 개념으로, 여러 사설 IP 주소가 하나의 공인 IP 주소를 공유하도록 하여 포트 번호를 이용해 구분하는 방식이다.
- 즉, 하나의 공인 IP 주소(1.2.3.4)를 여러 사설 IP 주소들이 공유하면서, 각 연결을 포트 번호(1001, 1002, 등)로 구분하게 된다.
- 오늘날 일반적으로 사용한다.
- NAPT는 사설 네트워크의 여러 장치가 하나의 공인 IP 주소를 사용해 인터넷에 연결할 수 있도록 하며, 각 연결을 구분하기 위해 IP 주소 쌍과 더불어 포트 번호를 추가로 변환한다.
- 하나의 공인 IP 주소(1)을 여러 사설 IP 주소(N)가 공유 가능하다.
- 사설 IP 주소: 공인 IP 주소를 N:1로 변환
- 공인 IP 주소 수 부족 문제를 개선한 기술
아래 예시를 보자.
- 네트워크 내부에
192.168.0.5
,192.168.0.6
이라고 하는 사설 IP 주소에 할당된 두 호스트가 있다고 가정. 192.168.0.5
,192.168.0.6
이1.2.3.4
라는 같은 공인 IP 주소에 변환이 된다고 하더라도 변환되는 포트 번호가 다르다면 같은 공인 IP 주소를 공유하면서 변환이 가능하다.192.168.0.5
의 경우1.2.3.4:6200
으로 변환,192.168.0.6
의 경우1.2.3.4:6201
로 변환이 되서 네트워크 외부로 나가게 된다.
💡 이처럼 포트 번호가 다르면 네트워크 내부의 호스트도 특정 지을 수 있기 때문에, 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있는 것이다.
4. 포트 포워딩
4.1 포트 포워딩 개념
포트 포워딩(Port Forwarding)은 외부에서 들어오는 네트워크 트래픽을 내부 네트워크의 특정 장치나 포트로 전달하는 기술이다.
- 즉, 네트워크 내 특정 호스트에 IP 주소와 포트 번호를 미리 할당하고,
해당 IP 주소:포트 번호
로써 해당 호스트에게 패킷을 전달하는 기능을 포트 포워딩이라고 한다. - 특정 IP주소와 포트 번호 쌍을 호스트에게 할당한 뒤, 외부 호스트에게 해당 접속 정보(
IP 주소:포트 번호
쌍)을 알려주면 된다. - 네트워크 보안 장비인 공유기나 라우터에서 자주 사용되며, 내부 네트워크에서 여러 장치가 하나의 공인 IP 주소를 공유할 때 유용하다.
4.2 포트 포워딩의 필요성
- 같은 공인 IP를 공유하는 상황
- 여러 장치가 하나의 공인 IP 주소를 공유할 경우, 외부에서 오는 요청을 어느 내부 장치로 보내야 할지 알기 어렵다.
- 예를 들어, 여러 호스트가 있는 내부 네트워크에서 하나의 공인 IP로 인터넷에 접속하는 경우, 외부에서 어떤 호스트에 접근할지 알 수 없기 때문에 포트 포워딩을 통해 이를 해결한다.
- 외부에서 내부로의 접속
- 외부에서 내부 네트워크로 원격 접속(e.g., 웹 서버, FTP 서버)에 대한 요청을 할 때, 공인 IP 주소와 포트 번호를 이용해 내부 호스트로 트래픽을 보내는 방식을 설정한다.
- 포트 포워딩을 사용하여 외부에서 오는 특정 포트의 트래픽을 해당 호스트로 전달할 수 있다.
4.3 포트 포워딩 설정 예시
포트 포워딩은 공유기에서 어렵지 않게 설정할 수 있는 대중적인 기술이다.
외부 IP:포트 번호 | 내부 IP:포트 번호 |
---|---|
공인 IP:1234 | 192.168.100.100:102 |
공인 IP:4321 | 192.168.100.101:1026 |
공인 IP 주소:1234
로 전송한 패킷은192.168.100.100:102
로 전달공인 IP 주소:4321
로 전송한 패킷은192.168.100.101:1026
로 전달
5. IP의 전송 특성을 보완하는 ICMP
5.1 ICMP 개념
ICMP(Internet Control Message Protocol) 는 IP 패킷의 전송 과정에서 발생할 수 있는 문제에 대한 피드백 메시지를 제공하며, IP의 전송 특성을 보완하는 역할을 한다.
- 피드백 메시지란:
- ① 전송 과정에서 발생한 문제 상황에 대한 오류 보고
- ② 네트워크에 대한 진단 정보(네트워크상의 정보 제공)
ICMP는 기본적으로 IP 패킷이 정상적으로 전송되지 않거나, 네트워크에 문제가 발생할 때 해당 오류를 보고하거나 진단 정보를 제공한다. 이를 통해 네트워크 연결의 문제를 파악할 수 있다.
5.2 전송 과정에서 발생한 문제 상황에 대한 오류 보고
- ICMP 메시지 = 타입(type) + 코드(code)로 구성
- 타입: ICMP 메시지 유형 번호
- 구체적인 메시지 내용 번호로, 오류의 종류나 추가 정보를 제공
5.3 네트워크에 대한 진단 정보
ICMP는 진단 목적으로도 사용된다. 네트워크 상태나 경로를 확인하기 위해 널리 사용되는 ICMP 메시지는 다음과 같다.
에코 요청, 에코 응답은 ping 명렁어에서 사용되는 ICMP 메시지이다.
ping 뿐만 아니라 굉장히 많은 컴퓨터 명령어들이 ICMP 메시지를 기반으로 동작한다.
- 예를 들어, traceroute 명령어는 ICMP의 피드백 메시지를 기반으로 동작한다.
- 이 명령어는 네트워크 패킷이 특정 목적지에 도달하기 위해 거치는 라우터들을 추적하고, 각 경로를 따라가는 데 걸린 시간을 보여준다.
5.4 ICMP가 신뢰성 있는 연결형 통신을 보장하지 않는 이유
ICMP 메시지를 사용하여 신뢰성 있는 연결형 통신을 완벽하게 보장할 수 있을까?
- ICMP는 보조적인 역할만 하며, IP의 신뢰성을 완전하게 보장하는 프로토콜은 아니다.
- ICMP는 오류보고와 진단을 주로 다루기 때문에, 데이터 전송의 신뢰성을 직접적으로 보장하지 않는다.
- IP 한계를 극복하기 위해선 전송 계층의 TCP를 이용해야 한다.
댓글남기기