본문 바로가기

네트워크/네트워크 기초

MTU와 MSS, 더 이상 헷갈리지 말자.

네트워크를 공부하다 보면 MTU와 MSS라는 용어를 자주 접하게 됩니다. 이 둘은 데이터 전송 크기와 관련된 중요한 개념이지만, 역할과 동작 계층이 달라 혼동하기 쉽습니다. 특히 TCP 통신과 IP 프래그먼테이션(조각화)의 관계를 이해하는 데 있어 이 둘을 명확히 구분하는 것이 매우 중요합니다.

 

이번 글에서는 MTU와 MSS의 개념을 명확히 정의하고, 둘 사이의 관계와 흔한 오해들을 바로잡아 네트워크 동작 원리에 대한 이해를 한 단계 높여보겠습니다.


1. MTU (Maximum Transmission Unit): 이 길로는 이 크기까지만! (L2/L3 경계)

  • 정의: 네트워크 인터페이스(예: 이더넷 카드)에서 한 번에 전송할 수 있는 IP 패킷의 최대 크기 (바이트 단위)입니다. 여기서 IP 패킷은 IP 헤더와 그 안의 데이터(페이로드)를 모두 포함한 크기를 의미합니다.
  • 동작 계층: MTU 자체는 데이터 링크 계층(L2)의 속성이지만, 네트워크 계층(L3, IP)에서 이 제약을 고려하여 패킷을 전송합니다. 즉, L2 링크의 제약 사항을 L3에서 인지하는 개념입니다.
  • 일반적인 값: 가장 흔한 이더넷 환경에서는 보통 1500 바이트입니다. (PPPoE 환경 등에서는 더 작을 수 있습니다.)
  • 목적: 네트워크 링크(도로)마다 한 번에 처리할 수 있는 데이터의 크기(차량 높이 제한)가 다를 수 있습니다. MTU는 이 '차량 높이 제한'처럼, 해당 링크가 감당할 수 있는 최대 패킷 크기를 정의하여 과부하를 막습니다.
  • 초과 시 문제: 만약 보내려는 IP 패킷의 크기가 경로상의 어떤 네트워크 링크의 MTU보다 크다면? 이때 IP 프래그먼테이션(조각화)이 발생합니다. IP 계층에서 패킷을 MTU 크기에 맞게 여러 개의 작은 조각으로 나누어 보내고, 최종 목적지에서 재조립합니다.
    • IP 프래그먼테이션의 문제점:
      • 성능 저하: 패킷을 나누고 재조립하는 과정에서 라우터와 최종 호스트에 부하가 발생합니다.
      • 패킷 유실 위험 증가: 조각 중 하나라도 유실되면 전체 원본 패킷을 복구하기 어려울 수 있습니다(특히 TCP).
      • 방화벽 통과 문제: 보안상의 이유로 조각화된 패킷을 차단하는 경우가 많습니다.
    • 결론: IP 프래그먼테이션은 가급적 피해야 하는 현상입니다.

2. MSS (Maximum Segment Size): TCP 데이터, 이만큼만 담자! (L4)

  • 정의: TCP 연결에서 하나의 세그먼트(Segment)에 담을 수 있는 최대 TCP 데이터(페이로드)의 크기 (바이트 단위)입니다. 중요한 것은 TCP 헤더 자체의 크기는 제외하고, 순수하게 애플리케이션 데이터만 계산한 크기라는 점입니다.
  • 동작 계층: 전송 계층 (L4, TCP).
  • 목적: TCP 세그먼트가 IP 패킷으로 캡슐화될 때, 그 결과 IP 패킷의 전체 크기가 경로상의 MTU를 초과하여 IP 프래그먼테이션이 발생하는 것을 사전에 방지하기 위함입니다. TCP가 스스로 데이터 크기를 조절하여 IP 계층의 부담을 덜어주는 것이죠.
  • 계산 방식 (일반적): TCP는 IP 프래그먼테이션을 피하기 위해, 자신이 속한 시스템의 네트워크 인터페이스 MTU 값을 기준으로 MSS를 계산합니다.
    • MSS = MTU - (IP 헤더 기본 크기) - (TCP 헤더 기본 크기)
    • 예시: MTU가 1500 바이트인 이더넷 환경이라면,
      MSS = 1500 - 20 (IP 헤더) - 20 (TCP 헤더) = 1460 바이트
      (IP나 TCP 헤더에 옵션이 포함되면 헤더 크기가 늘어나므로 MSS는 더 작아질 수 있습니다.)
  • MSS 값 교환: TCP 연결 설정 과정인 3-Way Handshake 시, 양쪽 호스트는 SYN 패킷의 TCP 옵션 필드에 자신의 MSS 값을 담아 서로에게 알립니다. 이를 통해 상대방이 보낼 수 있는 최대 데이터 크기를 인지하고 통신합니다.

3. MTU와 MSS: 흔한 오해 바로잡기

MTU와 MSS는 밀접하게 연관되어 있지만, 명확히 다른 개념입니다. 자주 발생하는 오해들을 짚어보겠습니다.

  • 오해 1: MTU와 MSS는 같은 것이다? (❌)
    • 진실: 다릅니다! MTU는 IP 패킷(헤더 포함)의 최대 크기(L3 관점)이고, MSS는 TCP 세그먼트 내 데이터(페이로드)의 최대 크기(L4 관점)입니다. 동작하는 계층과 측정 대상이 다릅니다.
  • 오해 2: TCP는 3-Way Handshake 때 경로상의 실제 MTU를 파악해서 MSS를 정한다? (❌)
    • 진실: TCP는 3-Way Handshake 시 자신의 로컬 인터페이스 MTU를 기반으로 계산한 MSS 값을 상대방에게 알려줄 뿐입니다. 통신 경로 중간에 있는 라우터들의 MTU 값을 직접 알아내지는 못합니다. 경로상의 실제 최소 MTU를 파악하는 것은 PMTUD(Path MTU Discovery)라는 별도의 IP 계층 메커니즘이지만, 항상 성공하는 것은 아닙니다.
  • 오해 3: MSS 때문에 IP 프래그먼테이션이 발생한다? (❌)
    • 진실: 오히려 반대입니다! MSS는 IP 프래그먼테이션을 방지하기 위한 TCP의 노력입니다. TCP가 MSS를 고려하지 않고 너무 큰 세그먼트를 만들면, 그 결과 IP 패킷이 MTU를 초과하여 프래그먼테이션이 발생할 가능성이 커집니다. TCP는 적절한 MSS 값을 설정하여 세그먼트 크기를 조절함으로써 이 문제를 예방합니다.
  • 오해 4: 데이터는 TCP 세그먼트 또는 IP 프래그먼트로만 나뉜다? (△)
    • 진실: 데이터 분할은 여러 계층에서 일어날 수 있습니다. 애플리케이션 레벨에서 데이터를 나눌 수도 있고, TCP가 세그먼트로 나누고(일반적), IP가 프래그먼트로 나눌 수도 있습니다(비효율적). 우리가 주로 이야기하는 웹 데이터 분할은 TCP 세그먼테이션입니다.

4. 그래서 이게 왜 중요할까?

MTU와 MSS를 정확히 이해하는 것은 네트워크 성능 문제 해결 및 최적화에 중요합니다.

  • 성능 문제 진단: 특정 사이트 접속이 느리거나 실패할 때, 경로상의 MTU 문제나 잘못된 MSS 설정이 원인일 수 있습니다. (ping 명령어에 DF 옵션을 사용하거나 패킷 캡처 도구를 활용하여 진단 가능)
  • VPN 환경: VPN 터널링은 추가적인 헤더를 붙이기 때문에 실질적인 MTU가 줄어듭니다. 이로 인해 MSS 값이 적절히 조절되지 않으면 프래그먼테이션이 발생하여 성능이 크게 저하될 수 있습니다. (MSS Clamping 같은 기법 필요)
  • 네트워크 설계: 네트워크 장비나 방화벽 설정 시 MTU 값을 고려해야 하며, 이는 TCP 통신의 MSS 값 설정에도 영향을 미칩니다.

💡 핵심 요약

  • MTU: L3 관점에서 링크가 전송할 수 있는 최대 "IP 패킷" 크기 (헤더 포함). 초과 시 IP 프래그먼테이션 유발.
  • MSS: L4 (TCP) 관점에서 세그먼트에 담을 수 있는 최대 "TCP 데이터" 크기 (헤더 제외).
  • 관계: TCP는 IP 프래그먼테이션을 피하기 위해 MTU를 고려하여 MSS를 계산하고, 3-Way Handshake 시 교환함.
  • 혼동 주의: MTU와 MSS는 다르고, TCP는 Handshake 시 경로 MTU를 직접 알지 못하며, MSS는 프래그먼테이션을 방지하기 위한 메커니즘임.

[마무리하며]

MTU와 MSS는 네트워크 통신의 효율성과 안정성에 직접적인 영향을 미치는 중요한 개념입니다. 두 용어의 정의와 역할을 명확히 구분하고, TCP가 어떻게 MSS를 활용하여 IP 프래그먼테이션이라는 잠재적 문제를 회피하는지 이해한다면, 네트워크 동작 원리를 더욱 깊이 있게 파악할 수 있을 것입니다. 이제 MTU와 MSS, 헷갈리지 않고 자신 있게 설명하실 수 있겠죠?