요약

  • Alternate Checksum Request, Kind 14 옵션은 매 SYN마다 알고리즘 번호를 전달했다. 두 번호가 동일할 때만 대체 체크섬이 허용되었고, 결여·불일치 또는 구형 엔드포인트의 무시는 연결 전체에서 표준 TCP 체크섬을 유지했다.
  • SYN과 RST는 항상 표준이었다. 32비트 Fletcher는 해당 세그먼트에 Kind 15 옵션을 추가로 요구했다. 이후 RFC 4614는 관심 부족을 기록했고, RFC 6247은 이 메커니즘을 Historic으로, 두 Kind를 obsolete로 지정했다.

첫 번째 신호는 상대에 대한 표가 아니었다

개시자는 자신의 SYN에 Kind 14를 기록했다. 옵션은 세 옥텟, 즉 유형·길이·알고리즘 식별자로 구성되었다. 값 0은 표준 TCP 체크섬을, 1은 16비트 결과를 내는 8비트 Fletcher를, 2는 32비트 결과를 내는 16비트 Fletcher를 가리켰다.

이 필드는 공유된 결론이 아니라 로컬 선택을 선언했다. 수신자는 번호를 이해하면서도 다른 것을 선호할 수 있었다. RFC를 구현하지 않았을 수도 있고, 경로상의 어떤 동작 때문에 옵션을 아예 받지 못했을 수도 있었다. 어느 경우도 개시자가 체크섬 필드의 의미를 혼자 바꿀 권한을 주지 않았다.

RFC 1146은 반대 방향의 SYN도 같은 정확한 번호로 Kind 14를 실을 것을 요구했다. 두 번째 신호는 응답자 고유의 행동이었다. 이 쌍만이 선호를 연결 상태로 만들었다.

한쪽이 1, 다른 쪽이 2를 선택하면 평균도 없고 작은 결과의 자동 선택도 없었다. 세션은 표준을 사용했다. 한 SYN이 옵션을 생략하면 결과는 같았다. 동일성은 진입 조건이었지 최적화가 아니었다.

불일치에는 단 하나의 공통 출구가 있었다

표준 체크섬으로의 복귀는 연결 전체를 아울렀다. 엔드포인트들이 불일치를 발견하는 동안 실험적인 일부 세그먼트가 존재하지도 않았고, 이후 설정 선호에 따라 변경되지도 않았다.

이 규칙은 최악의 실패, 즉 각 측이 협상에서 이겼다고 믿고 같은 비트를 서로 다른 함수로 검증하는 상황을 막는다. 불일치는 하이브리드 형식을 만들지 않는다. 그것은 SYN 이전부터 존재하던 문법을 선택한다.

RFC 1122는 길이를 따라 훑을 수 있는 미지 TCP 옵션을 오류 없이 무시하도록 지시함으로써 이 경로를 구형 호스트에 유용하게 만들었다. 오래된 스택은 Kind 14를 몰라도 연결을 계속할 수 있었다. 일치하는 번호 없이 정상적으로 응답했다.

새 스택은 결여를 양측 조건이 충족되지 않은 상태로 읽었다. 침묵은 동의가 아니었다. 새로운 의무를 지지 않는 피어의 기본 동작이 만들어내는 안전한 거부권이었다.

변경 메시지 자체는 옛 규칙 아래에 있었다

RFC 793은 TCP 체크섬을 헤더·데이터·의사 헤더 위의 16비트 워드 합에 대한 1의 보수로 정의했다.RFC 9293은 현재의 의무를 유지한다. 송신자는 생성하고 수신자는 검증해야 한다.

두 SYN 이전에는 이것이 유일하게 공유된 오류 검출 규칙이었다. 그래서 Kind 14 요청 자체가 표준 체크섬으로 보호되는 SYN 안에서 전송되었다. 제안된 알고리즘으로 제안을 오류로부터 보호하면 순환이 생긴다. 수신자는 그 규칙을 수립하는 메시지를 읽기 전에 규칙을 받아들여야 하기 때문이다.

오래된 알고리즘은 새것의 등기소 역할을 했다. 각 선택 행위가 이해 가능한 세그먼트로 도착했음을 확인했다. 두 서명 이후에만 공통 세그먼트를 다른 방식으로 계산할 수 있었다.

이 순서는 운영적 증명도 정리한다. 고립된 Kind 14는 제안을 보여준다. 일치하는 두 SYN은 RFC에 따른 합의를 보여준다. 이후 검증 가능한 세그먼트는 사용을 보여준다. 옵션의 단순 존재만으로 이 세 단계를 건너뛸 수는 없다.

두 종류의 세그먼트는 변경 대상에서 제외되었다

합의가 있더라도 SYN과 RST는 항상 표준 체크섬을 사용했다. SYN의 이유는 시간적이다. 공통 상태가 생기기 전에 선택을 실어 나르는 것이 SYN이다.

RST는 다른 경계를 보존한다. 리셋은 그 연결의 상태가 없는 호스트가 발신할 수 있다. 대체 알고리즘을 요구하는 것은 미지의 흐름을 거부하는 쪽에 어쩌면 한 번도 본 적 없는 협상을 재구성하라고 요구하는 일이다.

따라서 연결은 공통 세그먼트에 대한 사적 규칙을 가질 수 있었지만, 상태 없는 입구와 출구는 보편적 언어를 유지했다. 대체 체크섬은 TCP 형식의 전면 개혁이 되지 않았다.

분석 도구는 이 예외를 알아야 한다. RST에서 표준 체크섬을 발견하는 것은 합의를 반박하지 않는다. SYN에서 발견하는 것은 예상된 일이다. 세그먼트 유형, 방향, 단계가 필드의 숫자만큼 중요하다.

긴 결과는 두 번째 옵션을 점유했다

알고리즘 1은 16비트를 내어 기존 필드에 들어갔다. 알고리즘 2는 32비트를 냈다. RFC 1146은 A 부분을 일반 필드에, B 부분을 Alternate Checksum Data, Kind 15에 넣었다.

Kind 15는 두 번째 표가 아니었다. 이미 내려진 결정의 반복 비용이었다. 해당하는 공통 세그먼트는 추가 옵션 바이트를 실어야 했고, 경로상의 모든 독자는 핸드셰이크 상태에 따라 이 형식을 보존하고 해석해야 했다.

오류 처리는 의도적으로 엄격했다. 잘못된 길이의 Kind 15나 부적절한 상황의 Kind 15는 세그먼트 폐기, RST 발송, 연결 중단으로 이어졌다. 합의 이전에는 미지 제안의 무시가 호환성을 보호했다. 합의 이후에는 잘못된 형식의 무결성 데이터를 무시하는 것이 공통 해석 자체를 파괴했다.

따라서 32비트 알고리즘의 비용은 단순히 계산량이 아니었다. 헤더 공간, 상태, 테스트, 캡처 도구, 새로운 종료 경로가 포함되었다.

폴백의 승리는 기능의 승리처럼 보일 수 있었다

일방적 배포는 서비스를 무너뜨리지 않았다. 갱신된 엔드포인트가 제안하고, 구형은 무시하며, 양쪽 모두 표준 TCP를 완성했다. 네트워크를 분할하지 않고 실험하려는 입장에서 이는 중요한 품질이었다.

그러나 사용자에게 보이는 것은 연결이 열렸다는 사실뿐이었다. 협상에 대한 텔레메트리가 없으면, 아무 피어도 대체를 받아들이지 않았을 때조차 배포를 성공으로 장부에 올리기 쉬웠다. 호환성은 상대 측 갱신을 압박했을 증상을 제거했다.

혜택에는 양측의 일치, 옵션의 통과, 올바른 구현이 필요했다. 코드와 테스트를 유지하는 비용은 전선상의 효과가 0일 때조차 갱신된 스택마다 나타났다.

안전한 폴백과 채택 마찰은 같은 규칙에서 나왔다. 그 규칙은 파국적 실패를 막았지만, 채택되지 않은 확장이 건강한 연결 안에서 사라지게도 만들었다.

실험적 지위는 예정된 마이그레이션이 아니었다

RFC 1146은 1990년 3월에 Experimental로 공개되었고, 이 메커니즘은 운영 시스템에 권장되지 않는다고 명시했다. 그것은 TCP의 의무적 대체가 아니라 상호운용 가능한 실험을 규정한 것이었다.

RFC 1071은 인터넷 체크섬의 성질과 구현 기법을 정리해 놓았다. 이는 기준선에 대한 맥락을 제공하지만, 일부 errata가 달린 계산 예시들은 대체 협상의 채택을 입증하지 않는다.

2006년,RFC 4614는 Alternate Checksum이 관심을 끌지 못했다고 기록했다. 이 문장은 프로토타입이 한 번도 없었다는 증거도, Fletcher 수학의 문제라는 비판도 아니다. 그것은 작업의 궤적에 관한 더 좁은 주장을 지탱한다.

2011년,RFC 6247은 RFC 1146을 Historic으로 이동시키면서 이 메커니즘에 광범위한 배포가 없었다고 밝히고, IANA에 Kind 14와 15를 obsolete로 표시하도록 정했다. 같은 RFC의 스푸핑에 관한 보안 논의는 T/TCP에 속하며, Alternate Checksum에 전이 가능한 설명이 아니다.

이 정식 마무리는 광범위한 채택이 없었던 실험적 옵션을 읽을 수 있는 역사적 자료로 바꾸었다. 번호를 지우거나, 문서들이 지탱하지 않는 인과 서사를 허가하지는 않았다.

레지스트리는 두 선택과 그 종말을 함께 보존했다

IANA TCP Parameters 레지스트리는 옵션 14와 15를 obsolete 표시와 함께 유지한다. 알고리즘 0, 1, 2, 3의 표도 유지하며, 마지막은 Redundant Checksum Avoidance이다.

이 행들은 할당, 의미, 현재 상태를 증명한다. 오래된 캡처를 디코딩하는 데 필수적이며 충돌하는 재사용을 막는다. 활성 호스트의 계수기도, 구현 권고도 아니다.

IANA 근거는 "이름이 무엇이고 어떤 규범적 상태인가"에 답한다. 트래픽 근거는 "누가 제안했고 누가 일치했으며 그 후 어떤 계산이 나타났는가"에 답해야 한다. 질문을 섞으면 역사적 등록이 현재의 활동처럼 보인다.

또한 obsolete를 존재하지 않음의 동의어로 써서는 안 된다. 레거시 장비는 여전히 그 비트를 발신할 수 있다. 레지스트리가 그들을 식별하게 해주는 것은 바로 역사가 지워지지 않았기 때문이다.

두 개의 동일한 선택은 아니라고 말할 자유를 지켰다

이 설계는 첫 SYN에 피어를 위해 입법할 권한을 주지 않았다. 피어가 이미 검증할 수 있는 형태로 묻는 권한을 주었다. 두 번째 SYN은 같게, 다르게, 또는 옵션 없이 응답할 수 있었고, 모든 가능성은 결정론적 결과를 가졌다.

결과가 다르거나 없을 때, 세션은 의도를 추측하려 하지 않았다. 기본으로 돌아갔다. 합의를 발명하지 않는 이 거부가 배포 안전성의 중심 메커니즘이었다.

새 체크섬에 두 개의 동일한 신호가 필요했던 이유는, 두 엔드포인트가 같은 필드를 다른 방식으로 해석할 때의 결과를 모두 떠안기 때문이다. 그리고 두 신호 모두 옛 규칙 아래에서 만들어져야 했다. 그 이전에는 공유된 권위를 가진 다른 규칙이 없었기 때문이다.

출처