알아볼 내용

  1. IP의 한계
  2. 전송 계층의 역할
  3. 포트, NAT

IP의 한계 : 신뢰할 수 없는 통신과 비연결형 통신

  • IP의 한계

    1. 신뢰할 수 없는 프로토콜 (Unreliable Protocol) : 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않음
      • 통신 과정에서 패킷의 데이터 손상, 중복된 패킷 전송 등의 문제가 발생해도 확인, 재전송 및 순서대로 도착하는 것을 보장하지 않음
        • 최선형 전달 (best effort delivery)의 특징
    2. 비연결형 프로토콜 (Connectionless Protocol) : 송수신 호스트 간에 사전 연결 수립 작업 없이 패킷을 보내기만 함
  • IP는 왜 위와 같이 통신을 하는 것일까?

    • 위의 작업은 많은 시간, 대역폭, 부하가 요구되기 때문에 성능이 감소함
    • 금융 서비스처럼 신뢰성 있는 전송을 보장해야하는 경우도 있지만, 동영상 스트리밍 서비스나 영상 통화처럼 일부 패킷 손실 감수하더라도 빠른 전송 필요한 경우도 있음

IP의 한계를 보완하는 전송 계층

전송 계층의 특징 by TCP (Transmission Control Protocol)
  1. 연결형 통신을 가능하게 함
    • TCP는 ‘회선 교환 네트워크’ 같이 두 호스트가 정보를 주고받기 전에 마치 가상의 회선을 설정하듯이 연결 수립
    • 송수신 끝나면 연결 종료
  2. 신뢰성 있는 통신을 가능하게 함
    • 패킷이 수신지까지 올바른 순서대로 전달되는 것을 보장하기 위해 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등 다양한 기능 제공
UDP (User Datagram Protocol) : 전송 계층에 존재하는 프로토콜로 ‘신뢰할 수 없는 통신’, ‘비연결형 통신’을 가능케 함
  • 연결형 + 신뢰성 통신이 언제나 좋은 것은 아님 비교적 높은 성능을 위해 포기할 수 있음
  • TCP 보다는 빠른 전송 가능

응용 계층과의 연결 다리, 포트

포트 (port) : 하나의 IP 주소(호스트) 위에서 여러 개의 네트워크 프로세스(서비스)들을 서로 구분하기 위해 쓰이는 ‘논리적인 숫자 식별자’
  • 패킷의 최종 수신 대상 : 특정 애플리케이션 프로세스
    • 패킷을 전송 받거나, 혹은 전송할 때 ‘특정 애플리케이션 프로세스’까지 전송이 되어야 함
    • 웹 브라우저, 게임, 메신저, …
  • 따라서 패킷에 특정 애플리케이션을 식별할 수 있는 정보가 포함되어야 함
  • 형태 : IP주소:포트번호
    • 192.168.0.15:8000
  • 확인 방법 : netstat or lsof -i in macOS
포트의 분류
  • 패킷 내 수신지 포트와 송신지 포트 번호를 통해 송수신지 호스트의 애플리케이션 식별
    • 전송 계층의 프로토콜인 TCP와 UDP 모두 송신지, 수신지 포트 번호 포함
  • 포트 번호 : 16bit 총 65536개 (0번 ~ 65535번)
    • 잘 알려진 포트 (well known port) : 0 ~ 1023
      • 시스템 포트라고도 함
      • 예시
        • 20, 21 : FTP
        • 22 : SSH
        • 23 : TELNET
        • 53 : DNS
        • 67, 68 : DHCP
        • 80 : HTTP
        • 443 : HTTPS
    • 등록된 포트 (registered port)1 : 1024 ~ 49151
      • 흔히 사용되는 애플리케이션 프로토콜에 할당하기 위해 사용
      • 예시
        • 1194 : OpenVPN
        • 1433 : Microsoft SQL Server
        • 3306 : MySQL
        • 6397 : Redis
        • 8080 : HTTP 대체
    • 동적 포트 (dynamic port) : 49152 ~ 65535
      • 사설 포트 (private), 임시 포트라고도 부름
      • 자유롭게 사용 가능하며 보통 웹 브라우저 같이 클라이언트로서 동작하는 프로그램은 동적 포트 내에서 임의 할당

포트 기반 NAT

NAT 변환 테이블
  • 쉽게 생각하면 네트워크 내부 사설 IP와 대응되는 외부 공인 IP가 일대일 대응되어 있으면 됨
네트워크 외부네트워크 내부
1.2.3.4192.168.0.5
1.2.3.5192.168.0.6
  • 하지만 실제로는 일대일 대응이 아니라 다수의 사설 IP를 더 적은 수의 공인 IP로 변환 포트를 활용
NAPT (Network Address Port Translation) : 포트를 활용해 하나의 공인 IP 주소를 여러 사설 IP 주소가 공유할 수 있도록 하는 NAT
  • NAT 테이블에 변환할 IP 주소 쌍과 함게 포트 번호도 함께 기록하고 변환
    • 외부 IP 주소가 같아도 포트가 다르면 내부 호스트를 식별할 수 있음
    • 네트워크 내부의 여러 호스트와 그 안의 애플리케이션(포트)을 동시에 식별할 수 있음
네트워크 외부네트워크 내부
1.2.3.4:6200192.168.0.5:1025
1.2.3.4:6201192.168.0.6:1026
  • 보통 하나의 호스트에서 모든 포트를 다 사용하는 게 아니기 때문에, 공인 IP의 서로 다른 포트를 내부의 서로 다른 호스트:포트 조합에 할당할 수 있음

포트 포워딩 (Port Forwarding)

네트워크 내 특정 호스트에 IP 주소와 포트 번호를 미리 할당하고, 해당 IP주소:포트 번호로 해당 호스트에게 패킷을 전달하는 기능

  • 주로 네트워크 외부에서 내부로 통신을 시작 할 때, 네트워크 내부의 서버를 외부에서 접속할 수 있도록 접속 정보를 공개하기 위해 사용
  • 외부에서 특정 포트로 들어온 요청을 내부 특정 장치/프로그램에 연결해주는 ‘주소 지정 규칙’
  • NAPT 와의 차이
    • NAPT는 내부 ↔ 외부 모든 방향 트래픽에 대해 변환 / 포트 포워딩은 외부 → 내부로 들어오는 트래픽을 특정 내부IP:포트로 전달
    • NAPT는 자동으로 할당 / 포트 포워딩은 수동 규칙
    • 즉, 포트 포워딩은 외부에서 내부르 들어올 때만 적용하는 ‘특수한 NAPT 활용법’이고 NAPT는 포트 포워딩을 포함한 넓은 개념

ICMP (Internet Control Message Protocol)

IP의 한계를 극복하기 위한 네트워크 계층의 프로토콜로 IP패킷의 전송 과정에 대한 피드백 메시지( ICMP 메시지)를 얻기 위해 사용하는 프로토콜

  • ICMP 메시지 종류
    • 전송 과정에서 발생한 문제 상황에 대한 오류 보고
    • 네트워크에 대한 진단 정보
  • ICMP 패킷 헤더에 포함된 타입과 코드로 정의
    • 타입 : ICMP 메시지 유형이 번호로 명시
    • 코드 : 구체적인 메시지 내용이 번호로 명시
  • 네트워크상의 간단한 문제 진단 및 테스트를 위해 사용하기도 함
    • traceroute
    • ping
  • IP의 신뢰성을 ‘보장’하는 것은 아니고 해당 특성을 보완하기 위한 도우미 역할. 따라서 완전히 보장하기 위해서는 전송 계층의 프로토콜 필요

Footnotes

  1. 잘 알려진 포트, 등록된 포트는 ‘인터넷 할당 번호 관리 기관 (IANA)‘에 의해 할당. 전체 예시