TCP MSS(Maximum Segment Size)는 어떻게 결정될까? 전송 효율의 핵심 지표 분석
인터넷을 통해 데이터를 주고받을 때, 우리는 흔히 ‘속도’에만 집중하지만 실제 네트워크의 성능을 결정짓는 숨은 공신은 ‘데이터 조각의 크기’입니다. TCP 통신에서 한 번에 보낼 수 있는 최대 데이터 크기를 의미하는 MSS(Maximum Segment Size)는 네트워크 부하를 줄이고 전송 효율을 높이는 데 결정적인 역할을 합니다. 본 포스팅에서는 MSS가 결정되는 복잡한 내부 메커니즘과 MTU와의 상관관계, 그리고 네트워크 환경에 따른 최적화 과정을 심도 있게 살펴보겠습니다.
1. MSS(Maximum Segment Size)의 정의와 중요성
MSS는 TCP 세그먼트에서 ‘헤더를 제외한 순수 데이터(Payload)’가 가질 수 있는 최대 크기를 의미합니다. 이는 전송 계층(Transport Layer)에서 정의되며, 네트워크 계층의 최대 전송 단위인 MTU와 밀접하게 연동됩니다.
MSS가 중요한 이유는 ‘오버헤드(Overhead)’와 ‘단편화(Fragmentation)’ 때문입니다. MSS가 너무 작으면 전체 전송량 대비 헤더 비중이 커져 효율이 떨어지고, 반대로 너무 크면 경로상의 장비들이 처리하지 못해 패킷이 쪼개지는 단편화 현상이 발생하여 지연 속도가 증가합니다. 따라서 적절한 MSS를 결정하는 것은 고성능 네트워크 설계의 기초입니다.
2. MSS는 어떻게 계산되는가? (MTU와의 공식)
MSS는 독립적으로 존재하는 수치가 아니라, 하위 계층인 데이터 링크 계층의 MTU(Maximum Transmission Unit) 값에 의존하여 결정됩니다. 일반적인 이더넷(Ethernet) 환경을 기준으로 계산 방식은 다음과 같습니다.
- 기본 공식: MSS = MTU – (IP Header + TCP Header)
- 이더넷 표준: 일반적인 이더넷 MTU는 1,500바이트입니다.
- 헤더 크기: 고정된 IPv4 헤더는 20바이트, TCP 헤더는 20바이트입니다.
- 최종 계산: 1,500 – 20 – 20 = 1,460바이트
만약 IPv6를 사용하거나 TCP 옵션 필드가 추가된다면 헤더 크기가 커지므로 실제 MSS 값은 1,460바이트보다 작아질 수 있습니다. 특히 가상 사설망(VPN)이나 PPPoE 환경에서는 추가적인 캡슐화 헤더가 붙기 때문에 MTU를 1,492나 1,400 등으로 낮추고, 그에 따라 MSS도 함께 조정되는 과정을 거칩니다.
3. MSS 결정의 결정적 순간: TCP 3-Way Handshake
MSS는 데이터 전송이 시작되기 전, 송신 측과 수신 측이 연결을 맺는 3-Way Handshake 과정에서 상호 합의 하에 결정됩니다.
- SYN 단계: 클라이언트가 서버에 접속 요청을 보낼 때, 자신의 로컬 환경에서 처리 가능한 최대 MSS 값을 TCP 헤더의 옵션 필드에 담아 보냅니다.
- SYN+ACK 단계: 서버 역시 클라이언트의 요청에 응답하며 자신이 처리할 수 있는 최대 MSS 값을 옵션 필드에 담아 보냅니다.
- 최종 결정: 두 호스트는 서로 제시한 MSS 값 중 ‘작은 값(Smallest)’을 선택하여 해당 세션의 최종 MSS로 확정합니다.
이러한 합의 과정은 양방향 통신에서 어느 한쪽의 버퍼가 넘치거나 네트워크 장비에서 처리가 불가능한 상황을 미연에 방지하는 안전장치 역할을 합니다.
4. 네트워크 환경에 따른 MSS 변화 비교
다양한 네트워크 환경에서 MSS가 어떻게 변하는지 표를 통해 비교해 보았습니다.
| 네트워크 환경 | 표준 MTU | 헤더 합계(IPv4) | 최종 MSS | 특징 |
|---|---|---|---|---|
| Standard Ethernet | 1,500 Byte | 40 Byte | 1,460 Byte | 가장 일반적인 유선 LAN 환경 |
| PPPoE (DSL) | 1,492 Byte | 40 Byte | 1,452 Byte | 초기 광랜 및 ADSL 환경 |
| Google Cloud (GCP) | 1,460 Byte | 40 Byte | 1,420 Byte | 내부 캡슐화 오버헤드 고려 |
| Jumbo Frame | 9,000 Byte | 40 Byte | 8,960 Byte | 데이터 센터 및 고속 백본용 |
5. MSS 최적화의 핵심 기술: Path MTU Discovery (PMTUD)
단순히 양 끝단 호스트의 MSS만 맞춘다고 문제가 해결되지는 않습니다. 데이터가 통과하는 중간 경로상의 라우터 중 하나라도 더 작은 MTU를 가지고 있다면 패킷은 유실되거나 분할됩니다. 이를 해결하기 위한 기술이 PMTUD(Path MTU Discovery)입니다.
PMTUD는 패킷의 IP 헤더에 ‘분할 금지(Don’t Fragment, DF)’ 비트를 설정하여 보냅니다. 만약 중간 경로에서 처리가 불가능한 장비를 만나면, 해당 장비는 “패킷이 너무 큽니다”라는 ICMP 메시지를 송신자에게 돌려보냅니다. 송신자는 이 피드백을 바탕으로 MSS를 점진적으로 줄여가며, 해당 경로에서 분할 없이 통과 가능한 최적의 MSS를 찾아냅니다.
결론: 효율적 통신을 위한 지능적인 선택
MSS는 단순히 고정된 수치가 아니라, 네트워크의 물리적 한계와 프로토콜의 논리적 약속이 만나는 지점에서 결정되는 동적인 값입니다. 올바른 MSS 결정은 불필요한 패킷 분할을 막아 CPU 자원을 절약하고, 네트워크 대역폭 활용도를 극대화합니다. 서버 엔지니어나 네트워크 관리자라면 서비스의 인프라 환경(VPN, 클라우드, 내부망 등)에 맞춰 MSS 클램핑(Clamping) 등의 기법을 적절히 활용하여 최상의 전송 성능을 확보해야 할 것입니다.
과거 AWS 환경에서 VPN 터널을 구축했을 때 특정 웹페이지가 열리지 않는 고질적인 문제가 있었습니다. 분석 결과, VPN 캡슐화 헤더로 인해 MTU가 줄어들었음에도 MSS가 조정되지 않아 패킷이 드랍되는 현상이었고, MSS 클램핑 설정을 통해 해결했던 기억이 납니다.