백엔드 개발자

IP 인터넷 프로토콜 본문

CS/네트워크

IP 인터넷 프로토콜

임잠탱 2024. 10. 24. 19:29

IP는 인터넷 프로토콜(IP, Internet Protocol)로 컴퓨터 네트워크에서 데이터를 패킷(packet) 단위로 송수신하기 위한 규칙이다.
데이터를 목적지까지 안전하고 효율적으로 전달하는 데 필요한 핵심 프로토콜로, 인터넷을 비롯한 네트워크 통신의 기본 원리를 규정한다.

OSI 7 계층에서 3계층인 네트워크 계층에서 사용하는 대표적인 프로토콜이다.

IP 주소와 라우팅

이때 네트워크 상에서 호스트들은 고유한 IP 주소로 식별되고, 출발지 IP 주소에서 목적지 IP 주소까지 전달하는데 라우터를 거치는 과정인 라우팅이 일어난다.

IP 특징

이런 IP의 특징은 비신뢰성비연결성 이다.
기본적으로 데이터가 손실되거나 잘못된 순서로 도착할 수 있으며, 데이터를 전송하기 전에 발신자와 수신자 간에 연결을 설정하지 않는다. 각각의 패킷은 독립적으로 전송되며, 서로 다른 경로를 통해 이동할 수도 있다. 이는 TCP 같은 상위 계층 프로토콜에서 신뢰성과 연결성을 보장할 수 있다.
네트워크계층에서는 패킷 단위로 통신이 이루어진다.

IP 패킷

IP 패킷은 여러 필드를 가진 헤더와 실제 데이터를 담은 페이로드(payload)로 이루어진다.

  • 버전(Version): IPv4 또는 IPv6를 구분한다.
  • 헤더 길이(Header Length): 헤더의 크기를 나타낸다.
  • 총 길이(Total Length): 전체 패킷의 크기를 나타낸다.
  • 출발지 및 목적지 IP 주소: 송신자와 수신자의 IP 주소를 나타낸다.
  • TTL(Time to Live): 패킷이 라우터를 통과할 때마다 1씩 줄어드는 값. TTL 값이 0이 되면 패킷은 폐기된다.
  • 프로토콜: 다음 계층의 프로토콜(예: TCP, UDP)을 나타낸다.

TTL은 라우팅 과정에서 무한루프를 방지하기 위해 존재한다.

그럼 이제 좀 더 자세히 살펴보자.

IP 주소

위에서 언급했듯이, IP 주소는 네트워크 상에서 어떤 장치(호스트)를 구분하는 고유한 값이다.
잘 알려진 IP 버전으로 IPv4와 IPv6가 있는데, IPv4부터 살펴보자.

  • IPv4
    • 32비트 주소 공간을 사용하여 약 43억 개의 IP 주소를 할당할 수 있다.
    • 일반적인 주소 형식은 8비트씩 .으로 구분하여 표시하며, 각 자리는 십진수로 나타낸다. 예: 192.168.1.1

IP 주소는 클래스로 구분할 수 있다.

  • 클래스 A: 큰 네트워크에 할당, 주로 대형 기관이나 국가 단위 네트워크에 사용.
  • 클래스 B: 중간 규모의 네트워크에 사용.
  • 클래스 C: 소규모 네트워크에 사용, 보통 소기업 또는 가정용 네트워크.
  • 클래스 D: 멀티캐스트(특정 그룹에 데이터 전송).
  • 클래스 E: 연구용 및 예약됨.

네트워크마다 필요한 IP 주소 개수가 다르기 때문에, 모든 네트워크에 동일한 크기의 IP 범위를 할당하면 자원 낭비가 발생한다. 클래스 A, B, C, D, E로 나누어 네트워크 크기에 따라 다양한 크기의 주소 범위를 할당할 수 있도록 만든 것이다.

IP 주소를 네트워크 ID + 호스트 ID로 구분할 수 있는데 A클래스는 8비트, B클래스는 16비트, C 클래스는 24비트가 네트워크 주소 범위이다.
그래서 그 나머지 24비트, 16비트, 8비트가 호스트 주소로 사용되기 때문에 그 만큼의 주소를 할당해 줄 수 있게 된다.

표기 방식

서브넷 마스크

클래스 A:
네트워크: 8비트
호스트: 24비트
서브넷 마스크: 255.0.0.0
10.0.0.1에서 255.0.0.0 서브넷 마스크를 사용하여 AND 연산을 하면 10이 네트워크 주소이고, 나머지 24비트는 호스트 주소인 것을 구분할 수 있다.

프리픽스 (CIDR)

네트워크 비트수를 슬래시와 숫자로 표기하는 방식이다.
위 서브넷 마스크와 같은 경우 10.0.0.1/8 로 표기할 수 있다.

CIDR 방식으로 더 이상 클래스 구분을 사용하지 않게 되었는데, 100개의 IP 주소만 필요한 경우에도 가장 작은 네트워크 범위인 C 클래스 호스트 ID 범위가 8비트가 되기 때문에 낭비되는 자원이 생기게 된다.
CIDR에서는 클래스에 고정되지 않고 유연하게 비트를 조절할 수 있는데 네트워크 비트를 12로 지정했을 때, 10.0.0.0/12로 표현할 수 있고, 이 주소는 서브넷 마스크는 255.240.0.0이다. #서브넷팅 #Supernetting

그런데 전세계 인구를 모두 커버하기엔 43억은 부족하다. 컴퓨터, 노트북, 핸드폰 등 다양한 기기들이 생겼기 때문에 더 많은 IP 주소가 필요하게 되었고, IPv4는 주소 고갈 문제가 생긴다.

그래서 이에 대한 대안으로 나온 것이 IPv6이다.

  • IPv6
    • 128비트 주소 공간을 사용하여 거의 무한대의 IP 주소를 할당할 수 있다.
    • 주소 형식은 콜론-16진수 형태로 나타낸다. 예: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
    • 더 효율적인 라우팅과 자동 구성 기능을 제공한다.

IPv6는 확장성과 보안 기능이 강화되어 있으며, 더 많은 기기를 지원하고 자동 구성(Stateless Address Autoconfiguration, SLAAC)을 통해 네트워크 설정을 단순화한다. 이미 많은 기능이 내장되어 있어 헤더 구조가 간단해 패킷 처리 속도가 빠르고, IPv6는 NAT 없이도 대규모 네트워크를 지원할 수 있도록 설계되었다. 자동 IP 구성 기능을 통해 별도의 설정 없이도 장치가 네트워크에 연결되며, 보안 측면에서 IPsec(Internet Protocol Security)이 기본 내장되어 있다.

그런데 아직까지도 IPv4가 많이 쓰이고 있다. 어떻게 그게 가능한걸까?

공인 IP 주소, 사설 IP 주소

IP는 공인 IP주소와 사설 IP 주소 두 가지로 나눌 수 있다.
여기서 공인 IP가 위에서 말한 고유한 식별자인 IP주소가 된다. 이 IP 주소는 중복되지 않고 고유한 주소로서 네트워크 상에서 호스트를 식별 가능하게 한다.
그렇다면 사설 IP는 이 공개 IP 주소를 나눠 쓰는 것이라 할 수 있다. 공인 IP 내 내부 네트워크에서만 사용 가능하기 때문에 다른 공개 IP의 내부 네트워크에서도 중복된 사설 IP 주소를 가질 수 있다.

그림으로 먼저 살펴보자.
인터넷에 접속할 수 있는건 공인 IP 주소 뿐이다.
ISP 인터넷 서비스 제공자인 LG 유플러스, KT 같은 곳에서 인터넷에 접속할 수 있는 공인 IP 주소를 할당받게 되는데 공유기라는 것을 통해 여러개의 장치를 연결할 수 있다. 이때 공유기 내부의 DHCP 가 사설 IP 주소를 할당해준다.

이 사설 IP를 통해 내부 네트워크끼리의 통신을 할 수도 있고, 외부 네트워크와도 통신할 수 있다.
위에서 인터넷에 접속할 수 있는건 공인 IP 주소 뿐이라 했는데, 이를 가능하게 해주는 기술을 살펴보자.

포트 포워딩

    - 특정 포트를 내부 네트워크의 특정 장치로 연결해 주는 설정이다.
    - 예를 들어, 외부의 특정 요청을 내부의 웹 서버로 연결하려면 80번 포트로 들어온 요청을 사설 IP 주소로 전달하는 포트포워딩 규칙을 설정할 수 있다.

DMZ(Demilitarized Zone)

    - 특정 장치를 외부 네트워크와 완전히 연결시키는 방식이다. 모든 포트를 해당 장치에 열어 외부에서 직접 접근할 수 있게 한다.
    - 일반적으로 메일서버, 웹서버, DNS 서버와 같이 외부에서 접근되어야 할 필요가 있는 서버들을 위해 사용된다.

NAT(Network Address Translation)

    - 사설 IP 주소를 공인 IP 주소로 변환해 준다.
    - 사설 네트워크의 장치가 외부로 데이터를 보내면, 라우터는 출발지 IP 주소를 공인 IP로 변경한다.
    - 응답 패킷이 돌아올 때 라우터는 목적지 공인 IP를 다시 사설 IP로 변환한다.
    - 이 과정을 통해 내부 네트워크가 외부로부터 보호된다.

NAT 동작 방식

  1. NAT Table
    • NAT은 테이블을 사용하여 사설 IP 주소와 공인 IP 주소간의 매핑을 기록한다.

예시와 같이 10.10.0.2 주소를 가지고 있고 포트번호가 8992인 내부 네트워크의 컴퓨터에서 4.4.4.4 주소의 80포트로 어떤 요청을 보낸다고 한다.
이때 NAT를 통해 패킷의 출발지 IP 주소와 출발지 포트 번호를 공인 IP와 임의의 포트 번호로 바꿔보내고, 이것을 테이블에 기록한다.

외부에서 패킷이 들어올 때 NAT는 패킷의 출발지 IP 주소와 포트 번호, 목적지 포트 번호를 확인하고, NAT 테이블에서 매칭되는 값을 찾는다.
그리고 패킷의 목적지 IP 주소와 목적지 포트 번호를 사설 IP와 원래의 사설 포트 번호로 변환해준다.

이러한 NAT의 동작 방식으로 인해, 외부로 나간 기록이 있는 패킷만 처리가 되어 내부 네트워크를 향한 악성 공격도 자연스럽게 보호가 되게 된다.

라우터

위에서 봤듯이, A에서 B로 데이터를 전달하기 위해 라우터를 거쳐가는 라우팅이 일어난다.
라우터는 네트워크 간에 데이터를 전송하고 경로를 선택하는 장치로, 패킷을 목적지까지 전달하는 핵심 역할을 한다. 라우터는 각 네트워크에 연결된 장치들 간의 통신을 관리하고, 네트워크 외부로 패킷을 전송할 때 가장 효율적인 경로를 찾아 전달한다. 이를 위해 라우터는 라우팅 테이블을 활용하여 목적지 IP 주소에 따라 적절한 경로를 결정한다.

라우터의 기본 동작 원리

  • 패킷 수신: 라우터는 네트워크로부터 데이터 패킷을 하는데, 각 패킷에는 출발지 IP 주소와 목적지 IP 주소가 포함되어 있다.
  • 라우팅 테이블 조회: 라우터는 패킷의 목적지 IP 주소를 확인하고, 자신의 라우팅 테이블을 조회하여 이 패킷이 어느 인터페이스를 통해 나가야 하는지 결정한다.
  • 패킷 전달: 결정된 인터페이스로 패킷을 전송하여 다음 목적지(다른 라우터 또는 최종 목적지 장치)로 패킷이 이동합니다.
  • 이러한 과정을 통해 패킷은 라우터 간 홉(hop)을 거치며, 최종 목적지까지 전달된다. 라우터는 출발지와 목적지 간의 가장 효율적인 경로를 선택하여 패킷을 전달하는데, 이때 경로는 라우팅 프로토콜에 따라 다를 수 있다.

2. 라우팅 테이블

  • 라우팅 테이블은 라우터가 패킷을 적절한 경로로 보낼 수 있도록 경로 정보를 저장한 테이블이다. 각 라우팅 테이블은 네트워크 주소와 목적지 IP 주소 범위, 다음 홉(Next Hop) 정보, 인터페이스 등을 포함하고 있다. 이를 바탕으로 라우터는 패킷이 어느 방향으로 이동해야 할지를 결정한다.
  • 네트워크 주소(Network Address): 목적지가 속한 네트워크의 IP 주소 범위. 예를 들어, 192.168.1.0/24는 192.168.1.0에서 192.168.1.255까지의 범위를 의미합니다.
  • 서브넷 마스크(Subnet Mask): 네트워크와 호스트를 구분하는 마스크 값으로, 라우터가 어느 부분이 네트워크 주소인지를 판단하게 해줍니다.
  • 다음 홉(Next Hop): 패킷이 최종 목적지로 가기 위해 다음에 거쳐야 할 라우터의 주소.
  • 출구 인터페이스(Outgoing Interface): 패킷이 라우터를 떠나기 위해 사용할 네트워크 인터페이스.

2.1. 라우팅 테이블 조회 과정
- 라우터는 패킷의 목적지 IP 주소를 확인한 후, 라우팅 테이블을 탐색한다. Longest Prefix Match라는 알고리즘을 사용하여 가장 일치하는 네트워크 주소 항목을 찾아내고, 그에 따른 경로를 선택한다. 이는 서브넷 마스크가 가장 긴, 즉 더 구체적인 경로를 선택하는 방식이다.

- 예를 들어, 패킷의 목적지 주소가 192.168.1.55이고 라우팅 테이블에 다음 두 항목이 있다면:

    192.168.1.0/24 (더 긴 서브넷 마스크: /24)
    192.168.0.0/16
    라우터는 192.168.1.0/24 항목을 선택한다.

3. 라우팅 프로토콜

라우터는 패킷을 전달할 경로를 선택하기 위해 라우팅 프로토콜을 사용한다. 라우팅 프로토콜은 라우터들 간의 경로 정보를 교환하여 네트워크 전체의 경로를 동적으로 관리하고, 변화하는 네트워크 환경에서 최적의 경로를 찾는 역할을 한다.

3.1. 라우팅 프로토콜의 종류

라우팅 프로토콜은 크게 두 가지로 나눌 수 있다:

1. 정적 라우팅 (Static Routing)

정의

정적 라우팅은 관리자가 수동으로 라우팅 경로를 설정하는 방식이다. 네트워크의 토폴로지가 변하지 않는 한, 이러한 경로는 변경되지 않는다.

특징

  • 관리 용이성: 간단한 네트워크에서는 쉽게 설정할 수 있다.
  • 저렴한 자원 사용: 라우터가 경로를 계산할 필요가 없기 때문에 CPU와 메모리를 절약할 수 있다.
  • 고정성: 네트워크 변화에 민감하지 않아서 안정적이다. 그러나, 만약 네트워크의 구조가 변경되면 수동으로 다시 설정해야 한다.

사용 예

소규모 네트워크나 특정 경로를 고정해야 하는 환경에서 사용된다.

2. 동적 라우팅 (Dynamic Routing)

정의

동적 라우팅은 라우터가 자동으로 경로를 계산하고 업데이트하는 방식이다. 라우터는 네트워크의 상태를 지속적으로 모니터링하여 최적의 경로를 찾는다.

특징

  • 자동 경로 업데이트: 네트워크의 상태가 변경될 때 라우터가 자동으로 경로를 업데이트한다.
  • 효율성: 복잡한 네트워크에서 최적의 경로를 자동으로 찾기 때문에 효율적이다.
  • 자원 소모: 경로 계산 및 업데이트를 위해 더 많은 CPU와 메모리를 소모한다.

사용 예

대규모 네트워크에서 사용되며, 자주 변화하는 환경에 적합합니다.

1. RIP (Routing Information Protocol)

개요

RIP는 거리 벡터(Distance Vector) 라우팅 프로토콜로, 가장 오래된 라우팅 프로토콜 중 하나이다. 홉 수를 기준으로 최적 경로를 계산하며, 네트워크의 상태를 정기적으로 업데이트한다.

특징

  • 홉 수 기준: 패킷이 목적지에 도달하기 위해 거쳐야 하는 라우터의 수를 기준으로 경로를 결정한다. 최대 15홉까지 지원하며, 16홉 이상은 도달 불가능으로 간주합니다.
  • 주기적인 업데이트: 네트워크의 변경 사항을 반영하기 위해 정기적으로 (보통 30초 간격) 업데이트 정보를 전송한다.
  • 클래스풀 및 클래스리스: RIP v1은 클래스풀 라우팅 프로토콜이며, RIP v2는 클래스리스 라우팅을 지원한다. RIP v2는 서브넷 마스크와 같은 추가 정보를 제공한다.

장점

  • 설정이 간단하고 사용이 용이하다.
  • 소규모 네트워크에서 효율적으로 동작한다.

단점

  • 홉 수에 기반하여 경로를 선택하기 때문에 큰 네트워크에서는 최적의 경로를 찾기 어려울 수 있다.
  • 네트워크 변경 시 수렴 속도가 느리다.

2. BGP (Border Gateway Protocol)

개요

BGP는 외부 게이트웨이 프로토콜로, 자율 시스템 간의 라우팅 정보를 교환하는 데 사용된다. 인터넷의 주요 라우팅 프로토콜로 널리 사용된다.

특징

  • 경로 벡터 프로토콜: 각 라우터는 목적지까지의 경로를 벡터 형태로 표현하고, 이를 기반으로 경로 선택을 수행한다.
  • 정책 기반 라우팅: BGP는 다양한 정책을 통해 경로를 선택할 수 있어, 특정 경로를 선호하거나 피할 수 있는 유연성을 제공한다.
  • 상태 유지: BGP는 피어 간의 연결 상태를 지속적으로 유지하며, 이를 통해 신뢰성 있는 라우팅 정보를 제공한다.

장점

  • 대규모 인터넷 환경에서 안정적이고 확장성이 뛰어나다.
  • 자율 시스템 간의 복잡한 경로 선택이 가능하다.

단점

  • 설정과 운영이 복잡하여 높은 수준의 전문 지식이 필요하다.
  • 경로 수렴 속도가 느려서 변경 사항이 즉시 반영되지 않을 수 있다.

3. OSPF (Open Shortest Path First)

개요

OSPF는 링크 상태(Link State) 라우팅 프로토콜로, Dijkstra 알고리즘을 사용하여 최적 경로를 계산한다. 주로 내부 네트워크에서 사용됩니다.

특징

  • 링크 상태 기반: 각 라우터는 네트워크의 모든 링크 상태 정보를 수집하고 이를 사용해 최적의 경로를 계산합니다.
  • 계층 구조: OSPF는 네트워크를 여러 영역(Area)으로 나누어 관리할 수 있어, 큰 네트워크에서도 효율적으로 동작합니다.
  • 빠른 수렴: 링크 상태 정보를 즉시 업데이트하여 네트워크 변경 시 빠르게 경로를 수렴합니다.

장점

  • 큰 네트워크에서 효율적으로 운영할 수 있습니다.
  • 다양한 메트릭을 지원하여 최적 경로를 결정할 수 있습니다.

단점

  • 설정이 복잡하고 초기 설정에 시간이 걸릴 수 있습니다.
  • 메모리와 CPU 자원을 더 많이 소모합니다.

MTU(Maximum Transmission Unit)

  • 네트워크를 통해 한 번에 전송할 수 있는 최대 패킷 크기를 의미한다. 이 크기는 바이트 단위로 측정되며, 네트워크 인터페이스마다 설정할 수 있다.
  • MTU가 크면 큰 데이터 덩어리를 한 번에 보낼 수 있어 전송 속도가 향상될 수 있지만, 너무 크면 패킷 손실이 발생할 경우 재전송 부담이 커질 수 있다.
  • 반대로 MTU가 작으면 작은 패킷으로 데이터를 나누어 보내기 때문에 전송이 더 안정적일 수 있지만 오버헤드가 증가한다.

각 라우터에서는 네트워크에서 전송 가능한 최대 데이터 크기(MTU, Maximum Transmission Unit)에 맞춰 데이터가 더 클 경우 데이터를 작은 패킷으로 분할하고, 목적지에 도착하면 이를 재조립하는 과정이 일어난다. MTU가 모든 장치에서 동일하지 않을 수 있는데, 대부분 장치에서 1500 바이트이지만 하나의 라우터에서 1400 인 경우 패킷 분할이 필요해진다. 이는 조각 손실과 성능 저하로 이어질 수 있기 때문에 패킷 분할이 일어나지 않는 것이 좋다.
VPN 이나 노후화 된 라우터로 인해 이런 일이 발생할 수 있다.

'CS > 네트워크' 카테고리의 다른 글

HTTP & HTTPS  (2) 2024.10.31
UDP  (2) 2024.10.17
TCP  (0) 2024.10.17
Comments