요약

  • RFC 868은 TCP 또는 UDP의 37번 포트를 통해 1900년 1월 1일부터의 초를 32비트 이진수로 반환했다.
  • 그 표현의 만료 시점은 표준에 처음부터 등장했다: 2036년. 문서는 오버플로가 일어나는 정확한 순간을 명시하지 않았다.
  • NTP는 그 에포크를 물려받았지만, 더 큰 과제를 맡았다: 시계를 동기화하고 그 숫자가 어느 에라에 속하는지 판별하는 일이었다.

조회는 동기화가 아니다

1983년에는 일부 컴퓨터에 달력 시계가 없었고, 모든 컴퓨터가 인간적 또는 기계적 오류를 안고 있을 수 있었다. RFC 868은 여러 독립 사이트에 빠르게 조회해 로컬 시간을 확인하거나 바로잡는 방식을 제안했다. 이는 기계 간에 비교 가능한 숫자를 건넸지만, 완전한 동기화 시스템을 설명한 것은 아니었다.

값은 1900년 1월 1일 00:00 GMT부터의 초를 세었다. 서버는 37번 포트에서 수신 대기했다. TCP에서는 클라이언트가 연결해 종료 전에 32비트 이진수를 받았다. UDP에서는 빈 데이터그램을 보내고 값을 담은 데이터그램을 받았다. 서버가 자신의 시간을 알 수 없으면 응답을 삼가야 했다. TCP 연결을 거부하거나 숫자 없이 닫을 수 있었고, UDP 데이터그램에는 답하지 않을 수 있었다.

RFC는 전송 시간을 어떻게 빼야 하는지, 신뢰할 수 있는 출처를 어떻게 고를지, 데이터를 어떻게 인증할지, 클라이언트 시계를 어떻게 조정할지 말하지 않는다. 읽은 값을 비교하는 것은 도움이 될 수 있지만, 숫자 자체가 정확성을 보증하지는 않는다.

ASCII로 말하던 대안

같은 달에 발표된RFC 867 Daytime은 13번 포트를 통해 날짜와 시간을 ASCII 텍스트로 보냈다. 디버깅과 측정에 쓰였고, 인쇄 가능한 문자를 권장했으며 구체적 형식은 열어 두었다. 그 문서의 노트는 기계의 요구를 RFC 868로 넘겼다. 이는 서로 다른 표현이었지, 두 시계의 품질에 대한 근거는 아니었다.

1900년 기준은 1970년 유닉스 원점보다 앞선다. RFC 868은 둘 사이의 다리를 포함한다: 1970년 1월 1일 GMT 자정의 값은 2,208,988,800이다. 합의된 원점은 단위도 공유된다면 숫자를 비교할 수 있게 한다.

한계는 기록되어 있었다. 그 기준은 “2036년까지 유효할 것”이었다. 부호 없는 32비트 카운터는 2036년 2월 7일 06:28:16 GMT에 2³²초에 도달한다. 이 시각은 에포크와 필드 폭에서 계산되며, RFC는 연도만 언급한다. 다음 시간 단위는 들어가지 않으므로 카운터는 다시 시작한다. 외부 참조가 없으면 이후의 숫자는 첫 번째 순환의 다른 숫자와 혼동될 수 있다.

NTP가 더한 조정과 맥락

1985년의RFC 958은 NTP가 RFC 868과 ICMP Timestamp 메시지에서 발전했으며 이들을 대체할 수 있다고 설명했다. NTP의 작업은 이미 분산된 클라이언트와 서버를 통해 여러 시계를 동기화하는 일이었다.

NTP는 1900년 에포크를 유지했지만, 값은 서로 다른 에라에 놓여야 했다.RFC 5905는 32비트 초 필드와 2036년의 에라 0에서 에라 1로의 전환을 설명한다. 전송되는 타임스탬프에는 소수 부분도 포함되며, 에라를 인식하려면 맥락이 필요하다. 날짜를 대략적으로 알고 있으면 오버플로 근처의 값을 해석할 수 있다.

그 변화가 카운터를 무한한 측정값으로 바꾼 것은 아니다. RFC 868은 조회를 가볍게 만들고 그 표현의 지평을 미리 알렸다. NTP는 조정과 에라 해석을 추가적인 문제로 다뤘다. 1983년부터 분명했던 것은 그 숫자에 공통의 시작과 경계가 있다는 점이었다. 고립된 판독값만으로는 그것이 영원히 어느 기간에 속하는지 알 수 없었다.

출처와 범위

핵심 출처는 1983년 5월의RFC 868, Time Protocol이다. RFC 867, 958, 5905는 ASCII 대안, NTP가 밝힌 진화, 이후의 에라 해석을 보탠다. 이들은 얼마나 많은 서버가 배치되었는지, 그 정밀도, 완전한 마이그레이션, 2036년의 붕괴를 입증하지 않는다.

RFC 2626도 2036년 오버플로를 경고한다. RFC 2626이 출력하는 정확한 시각은 앞선 계산과 다르므로, 여기서는 연도에 관한 경고만 사용한다(RFC 2626). Lu Heng의 노트 65는 구현체들이 서면 규칙을 어떻게 유지하는지에 대한 편집상의 질문을 이끌었다. 이는 읽기 접근법이지 역사적 근거는 아니다(노트 65).