1️⃣ IP Classes (IP 주소 클래스)

IP 주소는 크게 IPv4IPv6로 나뉘는데, 우리는 먼저 IPv4 주소 체계를 다룰 거야. IPv4 주소는 32비트(4바이트) 크기로, 보통 192.168.0.1 같은 형식으로 표현돼.

이 IPv4 주소들은 특정한 클래스(Class) 로 구분되는데, 이는 주소의 구조와 네트워크 크기에 따라 나뉘는 거야.

🔹 IP 클래스 종류 (IPv4 기준)

클래스 범위 네트워크 수 호스트 수 사용처

A 클래스 1.0.0.0 ~ 126.255.255.255 128개 16,777,214개 대형 네트워크 (예: 대기업, ISP)
B 클래스 128.0.0.0 ~ 191.255.255.255 16,384개 65,534개 중간 규모 네트워크 (예: 대학교, 기업)
C 클래스 192.0.0.0 ~ 223.255.255.255 2,097,152개 254개 소규모 네트워크 (예: 일반 회사, 가정용 네트워크)
D 클래스 224.0.0.0 ~ 239.255.255.255 멀티캐스트용 - 멀티캐스트 (특정 그룹에게만 데이터 전송)
E 클래스 240.0.0.0 ~ 255.255.255.255 실험용 - 연구 및 실험용

🌟 네트워크와 호스트 수:

  • A 클래스는 네트워크가 적지만, 하나의 네트워크에서 많은 호스트(기기)를 가질 수 있어.
  • C 클래스는 네트워크가 많지만, 하나의 네트워크에 적은 호스트만 가능해.

🛑 주의할 점:

  • 127.0.0.0 ~ 127.255.255.255 범위는 Loopback(자기 자신 테스트용) 으로 예약됨.

2️⃣ MTU (Maximum Transmission Unit)

📌 MTU란?

MTU는 네트워크에서 한 번에 전송할 수 있는 최대 패킷 크기를 의미해.
즉, 데이터를 전송할 때 한 번에 보낼 수 있는 최대 크기를 정하는 거야.

🔹 기본 MTU 값

  • 이더넷(Ethernet): 1500바이트
  • PPPoE (ADSL 등): 1492바이트
  • IPv6 기본값: 1280바이트

🔹 왜 MTU가 중요한가?

  • 만약 데이터가 MTU보다 크다면 데이터를 여러 개로 나눠서 보내야 해. (이걸 프래그멘테이션(Fragmentation) 이라고 해)
  • 프래그멘테이션이 많아지면 속도가 느려지고, 네트워크 성능이 저하될 수 있어.

🔹 MTU 문제 해결 방법

  1. Ping으로 테스트하기
    • ping -f -l 1472 8.8.8.8
    • -f: 프래그멘테이션 금지 옵션
    • -l: 전송할 데이터 크기
    • 1472는 IP 헤더(20바이트) + ICMP 헤더(8바이트) = 1500바이트를 고려한 값
    • 이 값이 전송 가능하면 적절한 MTU 값임!
  2. Path MTU Discovery (PMTUD)
    • 네트워크 경로에서 가장 작은 MTU 값을 찾아서, 패킷 크기를 자동으로 조정하는 방식.
    • IPv6에서는 필수적으로 사용됨.

🛑 주의할 점
MTU가 너무 크거나 작으면 네트워크 지연이 발생할 수 있어. 적절한 MTU 설정이 필요해!


3️⃣ Private IP & Public IP (사설 IP & 공인 IP)

📌 Private IP (사설 IP)

사설 IP는 내부 네트워크(집, 회사, 학교)에서만 사용되는 IP 주소야. 인터넷에서는 직접 사용되지 않고, NAT(Network Address Translation) 를 통해 공인 IP로 변환돼.

🔹 사설 IP 범위 (IPv4)

클래스 범위

A 클래스 10.0.0.0 ~ 10.255.255.255
B 클래스 172.16.0.0 ~ 172.31.255.255
C 클래스 192.168.0.0 ~ 192.168.255.255

📌 특징:

  • 인터넷에서는 직접 사용 불가 (NAT 필수)
  • 가정용 공유기나 사무실에서 많이 사용됨
  • 같은 사설 IP 주소가 여러 개 존재할 수 있음 (서로 다른 네트워크에서는 가능)

📌 Public IP (공인 IP)

공인 IP는 인터넷에서 직접 사용 가능한 고유한 IP 주소야. 인터넷 서비스 제공업체(ISP)에서 제공하며, 전 세계에서 유일한 주소를 가짐.

📌 특징:

  • 전 세계에서 고유한 IP 주소
  • 인터넷에서 직접 접속 가능
  • 보안 문제로 방화벽 설정이 중요

🛑 공인 IP는 제한적이므로, IPv4 주소 고갈 문제 해결을 위해 NAT(사설 → 공인 IP 변환) 이 필수적으로 사용됨.


✅ 정리

  1. IP 클래스: A, B, C 클래스가 일반적으로 사용되며, A는 대기업용, B는 중형 기업용, C는 소규모 네트워크용.
  2. MTU: 한 번에 보낼 수 있는 최대 패킷 크기. 기본 이더넷 MTU는 1500바이트.
  3. 사설 IP vs 공인 IP:
    • 사설 IP: 내부 네트워크에서만 사용, 인터넷에 직접 연결 불가.
    • 공인 IP: 인터넷에서 직접 사용 가능, 유일한 주소.

MTU 실험 : 

 

구글의 IP주소인 8.8.8.8로 패킷을 전송해보기로 했다. 우선, 구글의 최대 패킷 수를 확인 해보자.

       MTU  MediaSenseState      바이트 인     바이트 아웃  인터페이스
----------  ---------------  ------------  ------------  -------------
4294967295                1             0        305435  Loopback Pseudo-Interface 1
      1500                1    3244983783     848222732  Wi-Fi
      1500                5             0             0  로컬 영역 연결* 1
      1500                5             0             0  Bluetooth 네트워크 연결
      1500                5             0             0  로컬 영역 연결* 2

 

이렇게 기본 1500개로 제한되어 있다.

 

이제, 8.8.8.8로 패킷을 날려보자!

 

명령어는 ping -f -l (패킷 수) 8.8.8.8을 해주면 된다.

 

ping -f -l 1300 8.8.8.8

Ping 8.8.8.8 1300바이트 데이터 사용:
8.8.8.8의 응답: 바이트=1300 시간=31ms TTL=111
8.8.8.8의 응답: 바이트=1300 시간=28ms TTL=111
8.8.8.8의 응답: 바이트=1300 시간=27ms TTL=111
8.8.8.8의 응답: 바이트=1300 시간=27ms TTL=111

8.8.8.8에 대한 Ping 통계:
    패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
    최소 = 27ms, 최대 = 31ms, 평균 = 28ms

이와 같이 제한(1500)을 넘지 않았기 때문에 0%손실과 함께 모든 패킷이 전달된다.

 

또한, 로컬 호스트로 2000 패킷을 보냈지만 드랍되지 않았다. 이 이유는 패킷은 여러 경로를 타고 이동한다. 이동하는 도중 제한에 걸리면 패킷이 드랍되지만, 로컬호스트로는 네트워크 상호작용이 일어나지 않으므로 모든 연산은 내부적으로 CPU에서 처리된다.

 

다음으로는 제한된 패킷 이상을 보내보자.

ping -f -l 2000 8.8.8.8

Ping 8.8.8.8 2000바이트 데이터 사용:
패킷 조각화가 필요하지만 DF가 설정되어 있습니다.
패킷 조각화가 필요하지만 DF가 설정되어 있습니다.
패킷 조각화가 필요하지만 DF가 설정되어 있습니다.
패킷 조각화가 필요하지만 DF가 설정되어 있습니다.

8.8.8.8에 대한 Ping 통계:
    패킷: 보냄 = 4, 받음 = 0, 손실 = 4 (100% 손실),

1500(제한)보다 많은 2000패킷을 보내보았다. 보다시피 모든 패킷은 드롭되었다.

 

여기서 한가지 알고 가야할 명령어가 있는데, -f는 패킷 조각화를 하지 않는다는것이다. 

 

패킷 조각화(Fragmentation)란, 크기가 큰 패킷을 여러 개의 작은 조각으로 나누어 전송한 후, 도착지에서 다시 원래 순서대로 재조립하는 과정을 의미해. 겉보기에는 "조각화를 하면 어떤 크기의 패킷이든 전송이 가능하겠네?" 라고 생각할 수 있지만, 실제로는 CPU의 연산 부담이 증가하고, 네트워크 성능 저하 및 서버 부하가 커지는 문제가 발생해. 따라서 ping 테스트를 수행할 때는 조각화를 방지하고 최적의 패킷 크기(MTU)를 찾는 것이 중요하다.

 

8.8.8.8로 1490바이트의 패킷을 보냈을 때 모두 드롭되는 이유를 생각해보면, MTU 값(1500바이트)보다 작은데도 패킷이 전송되지 않는 이유를 찾을 수 있어.

🔹 MTU 제한을 다시 확인해보자

MTU는 이더넷 프레임에서 한 번에 전송할 수 있는 최대 크기인데, 보통 기본 MTU 값은 1500바이트로 설정되어 있어. 그런데 여기서 중요한 점이 있어:

  1. IP 패킷의 전체 크기에는 "헤더(Header)"가 포함된다.
    • IP 헤더(20바이트) + ICMP 헤더(8바이트) = 총 28바이트 추가됨.
    • 즉, 실제 데이터(payload) 크기는 MTU에서 헤더 크기를 뺀 값이어야 한다.
    • MTU 1500 - (IP 20 + ICMP 8) = 1472바이트 → 이게 최대 ICMP 데이터 크기.
  2. 1490바이트의 데이터를 보내면 실제 패킷 크기는?
    • 1490 + 20(IP 헤더) + 8(ICMP 헤더) = 1518바이트
    • 그런데 기본 이더넷 프레임에서는 1500바이트까지만 전송 가능하므로, 1518바이트는 MTU를 초과해서 전송되지 않음.

🔹 그래서 8.8.8.8로 보내면 드롭되는 이유

  1. 8.8.8.8(구글 DNS)은 ICMP 패킷 조각화(Fragmentation)를 허용하지 않음.
  2. ping -f -l 1490 8.8.8.8 로 보낼 경우 MTU 초과로 인해 패킷이 분할(프래그멘테이션)되어야 하는데, -f 옵션(프래그멘테이션 방지)이 있으면 패킷이 전송되지 않고 바로 드롭됨.
  3. 구글 DNS는 과도한 ICMP 트래픽을 방지하기 위해 일정 크기 이상의 패킷을 차단할 수도 있음.

결론

1490바이트의 데이터를 전송하면, IP 헤더 + ICMP 헤더 포함 시 1518바이트가 되어 기본 MTU(1500바이트)를 초과하므로, 패킷이 전송되지 않고 드롭된다.
따라서 ping 테스트 시 최대 크기는 1472바이트로 설정해야 한다.

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

VLAN  (0) 2025.02.24
서브넷, 서브넷 마스크  (0) 2025.02.24
IP주소/서브넷팅  (0) 2025.02.21
방화벽의 작동 방식, ISP의 역할, 이더넷, 라우터, 스위치  (0) 2025.02.21
Nginx란 무엇인가?  (0) 2024.06.14

+ Recent posts