요약
- TCP MSS는 송신 측이 한 세그먼트에서 수신할 수 있는 가장 큰 TCP 데이터 페이로드를 선언하는, SYN에서만 등장하는 항목이며, 각 방향마다 서로 다른 값을 가질 수 있다.
- RFC 6691은 수신자가 옵션 공간을 빼지 않고 재조립 용량을 광고하고, 송신자는 각 패킷을 만들 때 실제 헤더를 반영해야 한다고 명확히 했다.
두 개의 SYN, 두 개의 수신 경계
최대 세그먼트 크기(Maximum Segment Size) 옵션은 작은 협상처럼 보인다. 연결이 수립되는 동안 나타나고, 숫자를 실어 나르며, 상대편이 이를 따르기를 기대한다. 그러나 "협상"이라는 단어는 실제로는 존재하지 않는 권위를 이 교환에 부여했다. 호스트 A가 MSS 옵션을 보낼 때 A는 A의 수신 측을 서술한다. 호스트 B가 자신의 옵션으로 응답할 때 B는 B의 수신 측을 서술한다. 두 값은 서로 대립하지 않아도 달라질 수 있는데, 각각 반대 방향의 흐름을 규율하기 때문이다.
와이어 형식에는 모호함이 들어갈 여지가 거의 없다: Kind 2, Length 4, 그 뒤 16비트 값. RFC 9293은 이 값을 옵션을 보내는 끝점에서의 최대 수신 세그먼트 크기로 정의한다. 이 옵션은 SYN이 설정된 초기 연결 요청에 나타날 수 있으며, 이후의 일반 세그먼트에는 나타나서는 안 된다. 따라서 이 옵션은 양 끝점이 연결 상태를 만드는 순간에 제약을 설치하는 것이지, 갱신된 용량 보고의 흐름이 아니다.
그 숫자가 무엇을 측정하는지가 중요하다. MSS는 TCP 헤더와 IP 헤더를 제외한 TCP 데이터 옥텟을 센다. IP 데이터그램 크기도, 인터페이스 MTU도, 애플리케이션 쓰기 크기도 아니고, 경로가 어떤 총 길이의 패킷을 운반할 수 있다는 약속도 아니다. 송신자는 상대의 선언을 페이로드에 대한 하나의 제한으로 사용한다. 그러나 실제 페이로드에 감싸 넣는 경로와 헤더를 여전히 스스로 계산해야 한다.
이 역할 분담은 이미 1983년 RFC 879의 핵심이었다. 이 문서는 MSS 선언을 "종종 잘못하여 협상이라 불리는" 것으로 지칭하며, 데이터 수신자에서 데이터 송신자로 향하는 성명, 즉 '나는 이만큼까지의 데이터를 실은 TCP 세그먼트를 받아들일 수 있다'는 진술로 묘사했다. 호스트, 게이트웨이, 재조립 한계, 가변 헤더 길이 때문에 단일하고 보편적인 패킷 수치가 특히 매력적이면서도 특히 오해를 부르던 시기에, 이 문장은 방향성을 지켜냈다.
536이 왜 기본값이지 경로의 법칙이 아니었나
RFC 879는 기본 IPv4 산술을 통해 작동했다. 모든 호스트는 576옥텟 IPv4 데이터그램을 재조립할 수 있어야 했다. 최소 20옥텟 IPv4 헤더와 최소 20옥텟 TCP 헤더를 빼면 TCP 데이터로 536옥텟이 남았다. 이 관계가 옵션이 보내지지 않는 경우의 익숙한 기본 MSS를 만들었다.
이 산술은 명시된 최소치로부터 만들어진 호환성 하한선이었다. 모든 실제 경로가 576옥텟 MTU를 쓴다는 것, 이더넷이 보편적 답을 고정한다는 것, 536을 광고한 수신자가 자신과 상대 사이의 무엇인가를 측정했다는 것을 확립하지 않았다. 수신자는 프로토콜의 기본 가정 아래에서 자신이 받아들일 수 있는 것을 서술했다. 송신자는 여전히 첫 홉에 관한 로컬 지식을 가지고 있었고, MSS 옵션 밖의 메커니즘을 통해 다른 경로 정보를 얻을 수도 있었다.
이 역사적 논의는 계층화 문제를 드러냈다. IP는 데이터그램 크기와 단편화를 다루고, TCP는 세그먼트 페이로드를 다루며, 두 프로토콜 모두 헤더 길이를 바꿀 수 있는 옵션을 가질 수 있었다. TCP가 MSS를 완전한 패킷 예산처럼 다루면, 수신 용량과 타 계층에 속한 헤더·경로 가정을 뒤섞게 된다. 반대로 IP와 TCP가 아무 정보도 공유하지 않으면, 송신자는 이미 알려진 한계를 초과하는 패킷을 만들 수 있다. 해법은 어느 한 계층에 전지성을 부여하는 것이 아니라, 각 숫자가 무엇을 뜻하는지 정의하고 송신자가 전송 시점에 제약들을 결합하도록 요구하는 것이었다.
이 구분은 MSS를 경로 MTU 탐색과 분리해 준다. PMTUD는 경로의 속성을 알아내려 하며 경로가 바뀌면 결과도 바뀔 수 있다. MSS는 연결 개설 시 끝점과 교환되며 그 끝점의 수신 한계를 서술한다. 송신자는 경로 정보 때문에 더 작은 페이로드를 선택할 수 있지만, 그 작은 선택이 수신자의 광고된 용량이 바뀌었다는 증거가 되지는 않는다.
옵션에 관한 정정
가변 헤더는 끈질긴 구현 오류를 낳았다. 어떤 수신자가 최소 헤더를 쓸 때 일정량의 TCP 데이터를 담은 IP 데이터그램을 재조립할 수 있다고 하자. MSS를 광고하기 전에 예상되는 TCP 타임스탬프, IP 옵션, 기타 헤더 공간을 빼고 싶은 유혹이 있을 수 있다. 겉보기엔 보수적이지만, 이는 패킷 구성 계산을 교환의 잘못된 쪽에 두는 일이다.
RFC 6691은 규칙을 명확히 했다. 수신자는 MSS의 정의에 따라 자신이 재조립할 수 있는 가장 큰 TCP 페이로드를 광고해야 한다. 패킷이 나중에 IP나 TCP 옵션을 담을지 모른다는 이유만으로 이 광고를 줄여서는 안 된다. 송신자가 실제 패킷을 만들 때는, 적용되는 IP 최대치 내에서 실제로 존재하는 헤더를 수용하도록 그 패킷의 데이터를 필요한 만큼 줄인다.
두 결정의 시점은 다르다. 수신자는 SYN 교환 중 자신의 페이로드 용량에 대한 지속적인 진술을 한다. 송신자는 상대의 진술, 현재 헤더 길이, 자신의 크기 제약을 사용해 패킷 수준의 결정을 반복한다. 광고된 MSS에 가상의 옵션 공간을 미리 빼두면, 하나의 예상 패킷 형태가 연결 전체의 수신 한계에 구워지고, 그런 옵션이 실제로 없을 때조차 페이로드를 불필요하게 줄일 수 있다.
큰 제안이 그 자체로 자원을 배분하지도 않는다. 끝점의 구현과 버퍼가 안전하게 광고할 수 있는 것을 결정한다. 상대는 여전히 혼잡 제어, 경로 한계, 자신의 송신 정책에 구속된다. 8,000의 MSS는 더 작은 패킷만 지원하는 경로에 8,000옥텟의 데이터를 보낼 허가를 주지 않으며, 1,460의 MSS가 모든 홉이 1,500옥텟 IPv4 패킷을 받아들인다는 보증도 아니다.
중간 장치가 다시 쓸 수는 있지만 발견할 수 없는 경계
운용 네트워크는 때때로 SYN 패킷의 MSS 값을 바꾼다. 예컨대 터널을 수용하거나, 탐색이 신뢰할 수 없는 경로에서 과대 패킷을 피하기 위해서다. 이 메커니즘은 특정 배치에서 유용할 수 있지만, 그 의미론은 정확하다. 옵션을 다시 쓰면 상대에게 제시되는 수신 제약이 바뀐다. 그렇다고 MSS가 경로에 대한 인증된 측정으로 변하지는 않는다.
이것은 진단에 중요하다. 트레이스에서 MSS 값을 보는 것은 관측 지점에서 어떤 값이 실렸다는 것만 증명한다. 그 값은 끝점의 원래 선언일 수도 있고 중간 장치의 재작성일 수도 있다. 모든 하류 MTU를 드러내지 않고, 이후 패킷이 허용치를 다 썼는지 보여주지 않으며, 더 작은 세그먼트가 선택된 이유를 증명하지도 않는다. 이 증거는 패킷, 방향, 연결 개설, 관측 지점에 국지적이다.
현재의 TCP 명세는 MSS를 필수 옵션 집합에 포함한다. 이 연속성이 인터넷이 하나의 세그먼트 크기로 수렴했다는 증거는 아니다. 세 RFC를 함께 읽으면, 그것은 비대칭적 한계와 계층화된 지식에 대한 안정된 어휘가 있었음을 보여준다.
따라서 역사적 교훈은 유명한 하나의 숫자보다 규율된 권위에 관한 것이다. 수신자는 자신이 받아들일 수 있는 것을 진술할 수 있다. 송신자는 그 진술을 자신의 경로·헤더 지식과 결합한 뒤 안전하게 내보낼 수 있는 것을 결정할 수 있다. 어느 쪽도, 그리고 그들 사이의 4바이트 옵션도, 경로가 자신이 아는 것 이상을 약속하게 만들 수 없다.
출처
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





