인터넷 및 데이터에 대해서 공부를 하기 시작하면서 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 세그먼트에 담을 수 있는 실제 데이터의 최대 크기입니다.

구분MTUMSS
의미최대 패킷 크기최대 TCP 데이터 크기
기준IP 패킷TCP 데이터
헤더 포함IP 패킷 전체데이터 영역 기준
일반적인 IPv4 Ethernet1500B1460B

쉽게 기억하면:

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와 함께 이해하면 네트워크 패킷이 실제로 어떻게 전송되는지 이해하는 데 큰 도움이 됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

글쓴이

rjsan46@koreabites.com

관련 게시물

웹 브라우저에 주소를 입력하면 일어나는 일

웹 브라우저 주소창에 웹사이트 주소를 입력하고 엔터를 누르면 바로 화면이 나타나는 것처럼 보인다. 하지만 실제로는 그 짧은 순간에 꽤 많은 일이 일어난다....

모두 읽어보기

소켓이란 무엇일까? 프로그램과 네트워크를 연결하는 통로

네트워크를 공부하다 보면 IP 주소와 포트 번호라는 말을 계속 만나게 된다. IP 주소는 어떤 컴퓨터와 통신할 것인지 구분하고, 포트 번호는 그 컴퓨터에서...

모두 읽어보기

쿠키와 세션은 어떻게 다를까?

웹사이트를 이용하다 보면 한 번 로그인한 뒤 다른 페이지로 이동해도 로그인 상태가 계속 유지되는 것을 볼 수 있다. 예를 들어 쇼핑몰에 로그인한...

모두 읽어보기

SSL과 TLS는 어떤 역할을 할까?

앞에서 HTTPS가 HTTP보다 안전한 이유를 살펴봤다. HTTPS는 단순히 HTTP 자체가 더 안전하게 만들어진 프로토콜이 아니라, HTTP 통신에 TLS라는 보안 계층을 적용한 것이라고...

모두 읽어보기

포트 번호로 네트워크 서비스를 구분하는 방법

컴퓨터가 네트워크를 통해 다른 컴퓨터와 통신할 때 가장 먼저 떠오르는 것이 IP 주소다. 예를 들어 어떤 서버의 IP 주소가 192.168.0.10이라고 해보자. 그런데...

모두 읽어보기

HTTPS는 HTTP보다 무엇이 안전할까?

인터넷에서 웹사이트에 접속하다 보면 주소창에 http://가 붙어 있는 경우도 있고 https://가 붙어 있는 경우도 있다. 요즘은 대부분의 웹사이트가 HTTPS를 사용하기 때문에 사실상...

모두 읽어보기