요약
- TCP 정적 시간(quiet time)은 재시작 중인 호스트가 활성 연결에서 사용하던 시퀀스 번호에 대한 지식을 잃었을 때 적용되며, 모든 재부팅 후에 요구되는 대기가 아닙니다.
- RFC 793은 새 세그먼트가 이전 시퀀스 공간과 겹칠 수 있기 전에 이전 흔적이 사라지도록, 최대 세그먼트 수명(MSL) 하나 만큼의 침묵을 사용했습니다.
- RFC 9293은 이 안전 규칙을 유지하면서도, 오류가 발생하기 쉬운 조건은 현재 대부분의 구현에서 무시해도 될 만큼 드물다고 말합니다.
- 시퀀스 기억을 유지하면 대기가 필요 없어지며, 타임스탬프와 PAWS는 높은 속도에서 오래된 중복 패킷에 대해 수신자가 볼 수 있는 다른 방식의 증거를 제공합니다.
불완전한 네트워크 속의 깨끗한 재시작
호스트가 크래시하면 메모리와 네트워크가 함께 고장 나지는 않습니다. 휘발성 연결 상태는 즉시 사라질 수 있지만, 크래시 이전에 송출된 세그먼트는 큐, 경로 또는 수신자 안에 남아 있을 수 있습니다. 따라서 재시작된 TCP는 로컬 테이블이 비어 있는 상태로, 네트워크가 아직 자신의 과거 이력 조각들을 나르고 있음을 마주할 수 있습니다.
TCP 연결은 종단 주소와 포트로 식별됩니다. 이 값들은 반복될 수 있으며, 시퀀스 번호는 서로 다른 연결 인스턴스 사이에서 데이터를 구분하는 데 쓰이는 증거입니다. 32비트 시퀀스 공간은 또한 순환합니다. 안전은 오래된 데이터가 네트워크를 떠난 뒤에야, 같은 식별 튜플을 사용하는 이후 연결이 겹치는 시퀀스 번호를 새 데이터에 부여할 수 있다는 데 달려 있습니다.
RFC 793은 이 문제를 사라진 증거를 중심으로 서술했습니다. 정상 동작 중에는 송신자가 각 연결의 다음 시퀀스 번호를 알고 있습니다. 그 지식을 지우는 크래시 이후에는 이전 연결을 다시 만들고, 장애 이전에 사용된 것과 같거나 가까운 초기 시퀀스 번호를 선택할 수 있습니다. 이때 새 수신자에 도착하는 오래된 중복 패킷은 그럴듯한 시퀀스 공간을 차지할 수 있습니다. 수신자는 오래된 바이트를 새 데이터로 받아들일 수도 있고, 과거와 겹친다는 이유로 새 바이트를 거부할 수도 있습니다.
이 메커니즘은 공격자, 손상된 저장장치, 깨진 체크섬을 요구하지 않습니다. 요구되는 것은 특정한 조건의 결합입니다. 연결 식별자가 재사용되고, 송신자가 최근 시퀀스 이력을 잊었으며, 복구가 빠르고, 오래된 중복 패킷이 아직 배수되지 않았다는 것입니다.
치환 증거로서의 침묵
RFC 793의 해답은 정적 시간 규칙이었습니다. 사용 중이던 시퀀스 번호에 대한 기억을 잃고 시작하거나 복구하는 TCP는, 시퀀스 번호를 부여하고 세그먼트를 송출하기 전에 최대 세그먼트 수명 하나 만큼 기다려야 했습니다. 명세는 MSL을 2분으로 정했지만, 그 값을 모든 네트워크의 측정된 상수가 아니라 공학적 선택으로 기술했습니다.
이 대기는 알 수 없는 상태를 경과 시간의 주장으로 바꿉니다. 재시작된 호스트는 어떤 오래된 세그먼트가 남아 있고 어떤 시퀀스 번호를 차지하는지 열거할 수 없습니다. MSL 이후에는 그 세그먼트들이 네트워크에서 더 이상 살아남을 수 없다고 프로토콜이 가정합니다. 그때에야 호스트는 없어진 연결별 기록 없이 다시 말할 수 있습니다.
RFC 793은 송출되는 각 세그먼트가 시퀀스 번호 공간과 시간 속에서 하나의 블록을 차지한다고 기술했습니다. 데이터 옥텟은 연속된 시퀀스 번호를 소비하며, SYN과 FIN도 시퀀스 공간을 소비합니다. 크래시는 호스트가 자신이 만든 흔적의 위치를 알 수 없게 남깁니다. 새 연결을 너무 일찍 시작하면 새 흔적이 이전 흔적과 겹칠 수 있습니다.
따라서 정적 시간은 혼잡 백오프, 재전송 간격 또는 응용 타임아웃이 아닙니다. 왕복 시간을 추정하지도 않고 승인을 기다리지도 않습니다. 송신자가 두 연결 이력을 구분할 상태를 더 이상 가지고 있지 않을 때, 그 경계를 보호하는 것입니다.
규칙 안에 숨어 있던 조건
원래 명세는 모든 재시작이 반드시 2분의 침묵으로 이어져야 한다고 말하지 않았습니다. 그 조건은 시퀀스 번호 지식의 상실이었습니다. 재초기화된 종단이 최근에 사용된 번호에 대한 기억을 유지하고 있다면 기다릴 필요가 없었습니다. 새로 선택하는 번호가 최근에 소비된 번호보다 앞서 있는지 확인하면 되었습니다.
경과된 가동 시간이 또 하나의 경계를 제공합니다. 호스트가 정적 시간을 지키기로 했더라도, 이미 적어도 MSL 이상 가동 중이었다면 대기는 불필요합니다. 그 무렵에는 복구 이전의 잠재적으로 오래된 세그먼트들이 배수될 가정된 수명을 이미 다 보냈기 때문입니다.
RFC 793은 또한 명시적인 위험 선택을 인정했습니다. 구현자나 사용자는 대기를 피할 수 있었지만, 수신자가 오래된 패킷과 새 패킷을 혼동할 가능성을 받아들이는 조건에서만 가능했습니다. 따라서 이 규칙은 안전 논거이면서 동시에 운영상의 절충이었습니다. 즉시 재시작 가용성과, 오래된 시퀀스 공간이 더 이상 살아 있지 않다는 증거 사이의 절충이었습니다.
현재 명세가 유지한 것 — 그리고 단서를 단 것
RFC 9293은 통합된 TCP 기본 명세 안에 정적 시간 절들을 유지합니다. 시퀀스 번호 기억을 잃고 복구하는 종단은 MSL 동안 조용해야 하며, 활성 연결에서 마지막으로 보낸 시퀀스 번호에 대한 지식을 잃은 호스트는 합의된 MSL 이상 TCP 전송을 지연해야 한다고 다시 말합니다.
같은 문서는 역사적 판단도 내립니다. 이 문서는 이러한 오염 시나리오를 이론적인 것으로 규정하고, 문제가 될 수 있는 상황을 위해 논의를 남겨 두며, 위험한 조건들은 오늘날 실질적인 인터넷 사용에서 무시해도 될 만큼 드물다고 말합니다. 세 가지 이유를 듭니다. 초기 시퀀스 번호와 임시 포트가 무작위화되었다는 것, 링크가 빨라지면서 인터넷의 실질 MSL이 줄었다는 것, 그리고 재부팅 자체가 종종 MSL보다 오래 걸린다는 것입니다.
이 서술들은 배치 관련성을 좁히면서 메커니즘 자체를 지우지는 않습니다. 안전 주장은 시퀀스 이력이 실제로 상실되고 중복 패킷이 만료되기 전에 식별자가 재사용될 수 있을 때 무엇이 참이어야 하는지를 묻습니다. 운영 주장은 그 조건의 결합 전체가 현재 대부분의 구현에서 흔하지 않다고 말합니다. 둘째를 형식상의 폐지로 다루면, 문서가 여전히 설명하고 있는 바로 그 경계를 버리게 됩니다.
무작위화, 기억, 타임스탬프는 서로 다른 제어
무작위화된 초기 시퀀스 번호는 재시작된 연결이 오래된 점유 시퀀스 공간 위에 떨어질 확률을 낮춥니다. 무작위화된 임시 포트는 같은 종단 튜플을 다시 만들 확률을 낮춥니다. 둘 다 충돌 시나리오의 가능성을 줄이지만, 실제로 어떤 시퀀스 번호가 사용되었는지 기억하는 것과 동일하지는 않습니다.
이것이 정적 시간과 ISN 무작위화를 구분하는 선입니다. 무작위화는 오래된 점유 공간 위에 착지할 확률을 낮추지만 송신자의 실제 시퀀스 이력을 보존하지 않습니다. 정적 시간은 대신, 점유되었을 가능성이 있는 흔적이 죽은 것으로 간주될 때까지 기다립니다.
RFC 9293은 높은 데이터 속도에서 또 하나의 경계를 지목합니다. 32비트 시퀀스 공간은 빠르게 순환할 수 있으므로, TCP 타임스탬프와 PAWS(Protection Against Wrapped Sequences, 순환 시퀀스 방지)는 오래된 중복 패킷을 탐지하고 폐기하기 위한 수신자가 볼 수 있는 증거를 제공합니다. PAWS는 시작 시의 침묵이 아닙니다. 시간과 처리량이 시퀀스 번호 순환을 현실적 문제로 만들 때 구별 능력을 유지하는 다른 방식입니다.
출처
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





