- 0
- 305 words
인터넷 및 데이터에 대해서 공부를 하기 시작하면서 MSS 및 데이터에 대해서 들어보면 많이 생소한 단어들을 들었을때 당황하는 경우가 있을 것이다. 그래서 초보자들도 이해하기 쉽게 기본적인 단어들의 개념에 대해서 정리를 해볼까 한다.
MSS란 어떤 것인가?
인터넷에서 데이터를 전송할 때 데이터는 한 번에 전부 전송되는 것이 아니라 작은 단위로 나누어 전달됩니다.
TCP를 사용하는 통신에서는 데이터를 TCP 세그먼트(Segment)라는 단위로 나누어 전송합니다.
이때 TCP 세그먼트에 담을 수 있는 데이터 영역의 최대 크기를 MSS(Maximum Segment Size)라고 합니다.
쉽게 말하면 MSS는 다음과 같습니다.
MSS↓TCP가 한 번에 전송할 수 있는데이터의 최대 크기
여기서 중요한 점은 MSS가 TCP 헤더와 IP 헤더를 제외한 실제 데이터의 최대 크기라는 것입니다.
MSS는 왜 필요한가?
네트워크에서 데이터를 전송할 때 패킷의 크기에는 제한이 있습니다.
앞서 살펴본 MTU(Maximum Transmission Unit)가 대표적인 기준입니다.
예를 들어 일반적인 Ethernet 환경에서 MTU가 1500바이트라고 가정해 보겠습니다.
MTU = 1500 Bytes
여기에 IP 헤더와 TCP 헤더가 들어가야 하기 때문에 실제 TCP 데이터가 사용할 수 있는 공간은 1500바이트보다 작습니다.
일반적인 IPv4 환경에서는 다음과 같이 계산할 수 있습니다.
MTU1500 Bytes- IP Header20 Bytes- TCP Header20 Bytes= MSS1460 Bytes
따라서 일반적인 IPv4 Ethernet 환경에서는 MSS가 1460바이트인 경우가 많습니다.
MTU와 MSS의 관계
MSS를 이해하려면 MTU와 함께 생각하는 것이 가장 쉽습니다.
┌───────────────────────────────┐│ IP Packet ││ 1500 Bytes ││ ││ ┌────────┬────────┬─────────┐ ││ │IP Header│TCP Header│ Data │ ││ │20 Bytes │20 Bytes │1460 B │ ││ └────────┴────────┴─────────┘ │└───────────────────────────────┘
따라서 일반적인 IPv4 환경에서는:
MSS = MTU - IP Header - TCP Header
가 됩니다.
MSS = 1500 - 20 - 20MSS = 1460 Bytes
다만 IP 헤더나 TCP 헤더에 옵션이 포함되면 실제 크기는 달라질 수 있습니다.
MSS와 MTU의 차이
MTU와 MSS는 비슷하게 들리지만 기준이 다릅니다.
MTU는 네트워크에서 전송할 수 있는 IP 패킷 전체의 최대 크기입니다.
MSS는 TCP 세그먼트에 담을 수 있는 실제 데이터의 최대 크기입니다.
| 구분 | MTU | MSS |
|---|---|---|
| 의미 | 최대 패킷 크기 | 최대 TCP 데이터 크기 |
| 기준 | IP 패킷 | TCP 데이터 |
| 헤더 포함 | IP 패킷 전체 | 데이터 영역 기준 |
| 일반적인 IPv4 Ethernet | 1500B | 1460B |
쉽게 기억하면:
MTU는 전체 크기, MSS는 그 안에 들어가는 TCP 데이터 크기입니다.
TCP 세그먼트란?
MSS를 이해하기 위해서는 TCP 세그먼트도 알아야 합니다.
TCP는 애플리케이션에서 전달받은 데이터를 적절한 크기로 나누어 전송합니다.
애플리케이션 데이터 ↓TCP ↓TCP 세그먼트 ↓IP 패킷 ↓네트워크
예를 들어 5000바이트의 데이터를 전송한다고 가정해 보겠습니다.
MSS가 1460바이트라면 데이터를 여러 개의 TCP 세그먼트로 나눌 수 있습니다.
5000 Bytes↓ 분할1460 Bytes1460 Bytes1460 Bytes620 Bytes
이렇게 나누어진 데이터가 TCP 세그먼트에 담겨 전송됩니다.
MSS는 어떻게 결정될까?
TCP 연결을 시작할 때 양쪽 장치는 서로 사용할 수 있는 MSS 정보를 전달합니다.
TCP 연결을 시작하는 과정인 3-Way Handshake에서 MSS 옵션을 전달할 수 있습니다.
클라이언트 서버 SYN ───────────────────────→ MSS = 1460 ←─────────────────────── SYN + ACK MSS = 1460
이렇게 서로 자신의 MSS 값을 알려주고 TCP 통신을 진행합니다.
TCP 3-Way Handshake와 MSS
TCP 연결은 일반적으로 다음과 같은 3단계 과정을 통해 만들어집니다.
① SYN② SYN + ACK③ ACK
이 과정에서 TCP 옵션을 전달할 수 있으며 MSS도 그중 하나입니다.
예를 들어:
클라이언트MSS = 1460 ↓서버MSS = 1460
각 장치가 자신이 수신할 수 있는 TCP 데이터 크기를 상대방에게 알려주는 방식입니다.
MSS는 양쪽이 반드시 같은 값일까?
반드시 같은 값일 필요는 없습니다.
예를 들어:
클라이언트MSS = 1460서버MSS = 1380
처럼 서로 다른 MSS를 사용할 수도 있습니다.
TCP에서는 상대방이 제시한 MSS를 고려하여 자신이 보내는 데이터 세그먼트의 크기를 결정합니다.
쉽게 말하면 내가 보내는 데이터의 크기는 상대방이 받아들일 수 있는 크기를 기준으로 결정될 수 있습니다.
MSS와 TCP 데이터 전송
예를 들어 서버가 클라이언트에게 5000바이트 데이터를 전송한다고 가정해 보겠습니다.
클라이언트가 제시한 MSS가 1460바이트라면 서버는 데이터를 다음과 같이 나누어 보낼 수 있습니다.
5000 Bytes ↓┌────────────┐│ 1460 Bytes │├────────────┤│ 1460 Bytes │├────────────┤│ 1460 Bytes │├────────────┤│ 620 Bytes │└────────────┘
각각의 데이터가 TCP 세그먼트에 담겨 전송됩니다.
MSS가 너무 크면 어떻게 될까?
MSS가 네트워크 경로의 MTU보다 지나치게 크면 문제가 발생할 수 있습니다.
예를 들어:
MSS = 1460MTU = 1400
라면 TCP 데이터 1460바이트에 IP 및 TCP 헤더가 추가되면서 패킷 크기가 MTU를 초과할 수 있습니다.
1460+ 20 IP Header+ 20 TCP Header= 1500 Bytes
하지만 네트워크에서 허용되는 MTU가 1400바이트라면 이 패킷을 그대로 전달할 수 없습니다.
이런 상황에서는 패킷 분할이나 전송 실패 등의 문제가 발생할 가능성이 있습니다.
MSS가 너무 작으면 어떻게 될까?
반대로 MSS가 너무 작게 설정되면 하나의 데이터를 전송하기 위해 더 많은 TCP 세그먼트가 필요합니다.
예를 들어 6000바이트 데이터를 전송한다고 가정해 보겠습니다.
MSS가 1500바이트라면:
1500150015001500
4개의 세그먼트가 필요합니다.
하지만 MSS가 500바이트라면:
500500500500...
더 많은 세그먼트가 필요합니다.
각 세그먼트에는 TCP/IP 헤더가 붙기 때문에 세그먼트가 지나치게 많아지면 헤더 오버헤드가 증가할 수 있습니다.
따라서 네트워크 환경에 맞는 적절한 MSS를 사용하는 것이 중요합니다.
MSS와 패킷 분할
MSS는 TCP 데이터가 네트워크의 MTU를 초과하지 않도록 하는 데 중요한 역할을 합니다.
TCP는 데이터를 적절한 크기로 나누어 전송하기 때문에 IP 계층에서 불필요한 Fragmentation(패킷 분할)이 발생하는 것을 줄이는 데 도움이 됩니다.
적절한 MSSTCP 데이터 ↓MSS 크기에 맞춰 분할 ↓IP 패킷 ↓MTU 범위 내 전송
따라서 TCP에서는 MSS를 적절하게 설정하는 것이 중요합니다.
MSS와 Path MTU
앞서 MTU에서 살펴본 것처럼 실제 통신에서는 출발지와 목적지 사이의 모든 네트워크 구간을 고려해야 합니다.
예를 들어:
PCMTU 1500 ↓라우터MTU 1500 ↓VPNMTU 1400 ↓서버MTU 1500
이 경우 전체 경로에서 가장 작은 MTU는 1400바이트입니다.
따라서 TCP에서는 이 경로를 고려하여 MSS를 적절하게 조정해야 합니다.
일반적인 IPv4 기준으로 단순 계산하면:
1400 - 20 - 20= 1360 Bytes
따라서 MSS를 1360바이트 정도로 설정하는 방식이 가능합니다.
MSS Clamping이란?
VPN이나 터널링 환경에서 MTU 문제가 발생할 때 MSS Clamping이라는 기술을 사용할 수 있습니다.
MSS Clamping은 TCP 연결에서 MSS 값을 적절한 크기로 조정하여 패킷이 네트워크 경로의 MTU를 초과하지 않도록 하는 방식입니다.
예를 들어:
기존 MSS1460 Bytes↓ 조정MSS1360 Bytes
이렇게 하면 VPN이나 터널링으로 인해 실제 전송 가능한 패킷 크기가 줄어든 환경에서 MTU 초과 문제를 줄이는 데 도움이 될 수 있습니다.
MSS와 VPN
VPN을 사용하는 환경에서는 MSS가 특히 중요할 수 있습니다.
VPN에서는 기존 패킷에 추가적인 터널링 헤더가 붙을 수 있습니다.
일반적인 패킷[IP][TCP][DATA]VPN 환경[VPN][IP][TCP][DATA]
추가 헤더가 들어가면서 실제 데이터를 담을 수 있는 공간이 줄어들 수 있습니다.
따라서 일반적인 Ethernet 환경에서 사용하는 MSS 1460을 그대로 사용하면 VPN 환경의 MTU를 초과할 가능성이 있습니다.
이때 MSS를 낮춰 패킷 크기를 조정할 수 있습니다.
MSS와 네트워크 성능
MSS는 네트워크 성능에도 영향을 줄 수 있습니다.
적절한 MSS를 사용하면 한 번에 비교적 많은 데이터를 전송하면서 불필요한 패킷 분할을 줄일 수 있습니다.
반대로 MSS가 지나치게 작으면 동일한 데이터를 전송하기 위해 더 많은 세그먼트가 필요할 수 있습니다.
적절한 MSS↓적절한 패킷 크기↓효율적인 데이터 전송
하지만 MSS 하나만으로 네트워크 성능이 결정되는 것은 아닙니다.
TCP 윈도우 크기, RTT, 패킷 손실률, 네트워크 대역폭 등 다양한 요소가 함께 영향을 줍니다.
MSS를 쉽게 이해하는 방법
MSS는 택배 상자에 실제 물건을 담을 수 있는 최대 크기라고 생각하면 이해하기 쉽습니다.
택배 차량에 실을 수 있는 전체 상자 크기가 MTU라면, 상자 안에서 실제 물건이 차지할 수 있는 공간이 MSS라고 볼 수 있습니다.
┌────────────────────────────┐│ MTU ││ ││ ┌────────────────────────┐ ││ │ TCP Data │ ││ │ MSS │ ││ └────────────────────────┘ ││ IP/TCP Header 공간 │└────────────────────────────┘
즉,
MTU = 전체 패킷 크기의 제한
MSS = 그 패킷 안에서 TCP 데이터가 사용할 수 있는 최대 크기
라고 생각하면 됩니다.
MTU와 MSS를 함께 기억하기
두 개념을 한 번에 정리하면 다음과 같습니다.
MTU↓IP 패킷 전체의 최대 크기MSS↓TCP 데이터의 최대 크기
일반적인 IPv4 Ethernet 환경에서는:
MTU = 1500IP Header = 20TCP Header = 20MSS = 1460
즉:
1500 = 20 + 20 + 1460
이 관계를 기억하면 MTU와 MSS의 차이를 이해하기 쉽습니다.
결론
MSS(Maximum Segment Size)는 TCP가 하나의 세그먼트에 담아 전송할 수 있는 실제 데이터의 최대 크기를 의미합니다.
MTU가 IP 패킷 전체의 최대 크기를 나타낸다면 MSS는 그 안에서 TCP 데이터가 사용할 수 있는 최대 크기를 의미합니다.
일반적인 IPv4 Ethernet 환경에서는 MTU가 1500바이트이고 IP 헤더와 TCP 헤더가 각각 20바이트라고 가정하면 MSS는 1460바이트가 됩니다.
1500 - 20 - 20 = 1460
MSS는 TCP 연결 과정에서 상대방에게 전달되며, TCP는 상대방이 제시한 MSS를 고려하여 데이터를 적절한 크기의 세그먼트로 나누어 전송합니다.
특히 VPN이나 터널링 환경에서는 MTU가 작아질 수 있기 때문에 MSS Clamping 등을 이용해 MSS를 조정하는 경우도 있습니다.
결국 MSS는 TCP 데이터를 어떤 크기로 나누어 전송할 것인지 결정하는 중요한 기준이며, MTU와 함께 이해하면 네트워크 패킷이 실제로 어떻게 전송되는지 이해하는 데 큰 도움이 됩니다.