IT/System

PING 사용 최적 MTU 값 찾기

AMG. Labs
반응형

 

Ping과 DF 플래그를 이용한 최적 MTU 값 찾기

안녕하세요! 네트워크 성능에 관심 있는 여러분, 오늘은 네트워크 통신 효율성을 높이는 중요한 요소 중 하나인 MTU(Maximum Transmission Unit) 와 이를 확인하는 간단하면서도 효과적인 방법**(ping 명령어와 DF 플래그 활용)**에 대해 알아보겠습니다.

 

 

MTU란 무엇이고 왜 중요할까요?

MTU(Maximum Transmission Unit) 는 네트워크 연결을 통해 한 번에 전송될 수 있는 최대 데이터 패킷 크기를 의미합니다. 이더넷 환경에서는 보통 1500바이트가 기본값입니다.

MTU 설정이 중요한 이유는 다음과 같습니다.

  1. 효율성: MTU가 너무 작으면 데이터를 여러 번 나눠 보내야 하므로 전송 효율이 떨어집니다.
  2. 단편화(Fragmentation) 방지: 보내려는 데이터 패킷이 경로상의 어떤 장비(라우터 등)의 MTU보다 크면, 해당 장비는 패킷을 더 작은 조각으로 나눠야 합니다(단편화). 이 과정은 다음과 같은 문제를 일으킬 수 있습니다.
    • 성능 저하: 패킷을 나누고 재조립하는 데 CPU 자원이 소모됩니다.
    • 패킷 유실 가능성 증가: 조각난 패킷 중 하나라도 유실되면 전체 패킷을 재전송해야 할 수 있습니다.
    • 방화벽 문제: 일부 방화벽은 단편화된 패킷을 보안상의 이유로 차단하기도 합니다.

따라서 내 PC부터 목적지 서버까지의 경로 중 가장 작은 MTU(Path MTU) 를 파악하고, 내 PC의 MTU를 이에 맞게 설정하는 것이 네트워크 성능 최적화에 도움이 됩니다.

 

반응형

 

 

Ping과 DF(Don't Fragment) 플래그를 이용한 MTU 탐색 원리

ping 명령어는 네트워크 연결 상태를 확인하는 데 주로 사용되지만, 특정 옵션을 사용하면 Path MTU를 찾는 데 유용하게 활용될 수 있습니다. 핵심은 DF (Don't Fragment) 플래그입니다.

  • DF 플래그: IP 헤더에 포함되는 플래그 중 하나로, "이 패킷은 단편화하지 말라"는 의미를 전달합니다.
  • 탐색 원리:
    1. DF 플래그가 설정된 ping 패킷을 특정 크기로 보냅니다.
    2. 만약 이 패킷이 경로상의 어떤 라우터의 MTU보다 크면, 해당 라우터는 DF 플래그 때문에 패킷을 단편화할 수 없습니다.
    3. 대신, 라우터는 패킷을 폐기하고 "Packet needs to be fragmented but DF set" (패킷을 단편화해야 하지만 DF 플래그가 설정됨)이라는 ICMP 오류 메시지를 송신 측으로 보냅니다.
    4. 이 오류 메시지를 받으면, 현재 ping으로 보낸 패킷 크기가 해당 경로의 MTU보다 크다는 것을 알 수 있습니다.
    5. 오류 메시지 없이 ping 응답이 정상적으로 오면, 해당 크기의 패킷은 경로를 통과할 수 있다는 의미입니다.

이 원리를 이용해 ping 패킷 크기를 조절하며 테스트하면, 단편화 없이 전송 가능한 최대 패킷 크기, 즉 Path MTU를 알아낼 수 있습니다.

 

 

단계별 MTU 찾기 방법

주의: ping 명령어로 지정하는 크기는 ICMP 데이터 페이로드(payload) 크기입니다. 실제 IP 패킷 크기는 여기에 IP 헤더(20바이트) + ICMP 헤더(8바이트) = 28바이트를 더해야 합니다. 따라서, 찾고자 하는 MTU 값에서 28을 뺀 값을 ping 명령어의 크기 옵션으로 사용해야 합니다.

 

 

1단계: 운영체제 확인 및 명령어 준비

  • Windows: ping [목표 IP 주소 또는 도메인] -f -l [페이로드 크기]
    • -f: DF 플래그 설정
    • -l: 전송할 데이터(페이로드)의 크기 지정 (바이트 단위)
  • Linux / macOS: ping [목표 IP 주소 또는 도메인] -D -s [페이로드 크기] 또는 ping [목표 IP 주소 또는 도메인] -M do -s [페이로드 크기]
    • -D 또는 -M do: DF 플래그 설정
    • -s: 전송할 데이터(페이로드)의 크기 지정 (바이트 단위)

 

 

2단계: 테스트 시작 (큰 값에서 줄여나가기)

일반적인 이더넷 MTU는 1500이므로, 페이로드 크기는 1500 - 28 = 1472부터 시작하는 것이 좋습니다.

  • Windows 예시:
    ping google.com -f -l 1472
    
  • Linux/macOS 예시:
    ping google.com -D -s 1472
    

 

 

3단계: 결과 확인 및 크기 조절

  • "Packet needs to be fragmented but DF set" 또는 유사한 오류 메시지가 표시되면, 해당 페이로드 크기가 너무 크다는 의미입니다. 페이로드 크기를 줄여 다시 시도합니다. (예: 1472 -> 1462 -> 1452 ...)
  • 정상적인 응답(Reply from...) 이 오면, 해당 페이로드 크기는 경로를 통과할 수 있다는 의미입니다. 이제, 실패했던 크기와 성공한 크기 사이에서 값을 조금씩 늘리거나 줄여가며 경계 값을 찾습니다.

4단계: 최대 성공 페이로드 크기 확인

오류 없이 ping 응답이 오는 가장 큰 페이로드 크기를 찾습니다.

5단계: 실제 MTU 계산

찾아낸 최대 성공 페이로드 크기 + 28바이트(IP 헤더 + ICMP 헤더) 가 바로 해당 경로의 최적 MTU 값입니다.

예시:

  1. ping google.com -f -l 1472 -> "Packet needs to be fragmented..." (실패)
  2. ping google.com -f -l 1462 -> "Packet needs to be fragmented..." (실패)
  3. ping google.com -f -l 1452 -> "Reply from..." (성공)
  4. ping google.com -f -l 1458 -> "Reply from..." (성공)
  5. ping google.com -f -l 1460 -> "Packet needs to be fragmented..." (실패)
  6. ping google.com -f -l 1459 -> "Reply from..." (성공!)

이 경우, 단편화 없이 보낼 수 있는 최대 페이로드 크기는 1459바이트입니다. 따라서, 최적 MTU는 1459 + 28 = 1487 바이트입니다.

 

 

 

728x90

 

 

고려 사항

  • Path MTU: 이 방법으로 찾은 MTU는 내 PC에서 목적지까지의 경로상 MTU 중 가장 작은 값입니다. 다른 목적지로 ping을 보내면 다른 결과가 나올 수 있습니다.
  • 방화벽: 중간 경로의 방화벽이나 목적지 서버의 방화벽이 ICMP 메시지(특히 오류 메시지)를 차단하면 이 방법이 제대로 동작하지 않을 수 있습니다.
  • PPPoE: ADSL이나 일부 광랜 환경에서 사용하는 PPPoE 연결은 자체 오버헤드 때문에 기본 MTU가 1492 이하인 경우가 많습니다.
  • VPN: VPN을 사용하면 터널링 오버헤드가 추가되어 실제 데이터가 지나갈 수 있는 MTU 크기가 줄어듭니다. VPN 환경에서는 더 작은 값부터 테스트해 보는 것이 좋습니다.

 

결론

ping 명령어와 DF 플래그를 이용하는 방법은 Path MTU를 확인하는 간단하고 실용적인 방법입니다. 네트워크 환경에 맞는 최적의 MTU 값을 찾아 설정함으로써 불필요한 단편화를 줄이고, 보다 안정적이고 효율적인 네트워크 통신을 경험해 보시기 바랍니다!

 

반응형