요약

  • IPv6 이웃 도달 불가 감지(NUD)는 좁고 시간으로 한정된 주장을 기록합니다. 즉, 최근의 근거가 이웃의 IP 계층으로 단방향 경로가 패킷을 전달했음을 보여준다는 것입니다. 그 근거가 노후화되면REACHABLE은STALE이 되고, 새로운 확인이 도착하지 않는 한 사용이 시작되면 항목은DELAY와PROBE를 거칩니다.
  • RFC 7048은 대안 이웃이 존재하지 않을 때 캐시된 링크 계층 주소를 유지하고 더 인내심 있게 프로브할 수 있게 합니다. 그러나 그 연속성 선택이 이웃을 인증하거나, 주소 소유를 증명하거나, 어떤 행위를 승인하거나, 애플리케이션 결과를 보증하지는 않습니다.

인시던트 콘솔에 링크 계층 주소 캐시 항목이STALE로 표시된 호스트가 나타납니다. 누군가는 “14:07에 이웃이 stale이 되었다”고 적습니다. 이 표현은 조용히 지식의 상태를 세계의 상태로 바꿔 버립니다. 마치 라우터나 서버, 어플라이언스가 특정 시점에 열화된 것처럼 들립니다.

그 레이블은 그런 이야기를 뒷받침하는 어떤 것도 담고 있지 않습니다.

stale이 된 것은 긍정적 근거였습니다. IPv6 이웃 도달 불가 감지, 즉 NUD는 단방향 전방 경로가 최근에 동작함이 입증되었는지에 대한 한정된 기록을 유지합니다. 타이머가 만료되는 일은 패킷의 실패 없이 일어날 수 있습니다. 캐시된 링크 계층 주소는 새로 확인되지 않더라도 계속 유용할 수 있습니다. 이후의 패킷이 잠깐의 유예와 프로브를 유발할 수 있습니다. 이 프로토콜은 결단력이 부족한 것이 아니라, 기억된 위치와 현재의 도달 가능성 사이의 구분에 대해 이례적으로 신중합니다.

Erik Nordmark는 바로 그 신중함 뒤에 있는 문서화된 표준 역사의 일부입니다. 그는 IPv6 이웃 발견(Neighbor Discovery)에 관한 Standards Track 사양인 RFC 4861의 네 명 저자 중 한 명입니다. 또한 원래의 실패 시계가 너무 조급할 때 NUD를 갱신하는 RFC 7048의 두 저자 가운데 첫 번째로 이름 올라 있습니다. 그리고 이웃 발견의 신뢰 모델과 위협을 다룬 Informational 분석 문서인 RFC 3756의 공동 저자이기도 합니다. 이들은 모두 IETF의 집합적 산출물입니다. 이 문서들은 설계와 그 보안 분석에 대한 참여를 입증할 뿐, 단독 발명이나 특정 배포에 대한 권한을 입증하지는 않습니다.

이 문서들을 함께 읽으면 유용한 운영 문법이 나옵니다. 캐시 항목은 출처와 범위와 만료를 갖는 하나의 주장이며, 사람도 자격 증명도 결과도 아닙니다.

도달 가능성은 단방향 주장이다

RFC 4861은 이웃이 도달 가능하다고 정의할 때, 단방향 전방 경로가 동작한다는 긍정적 근거가 있음을 전제로 합니다. 즉, 이웃에게 보낸 패킷이 그 이웃의 IP 계층에 도달하고 그곳에서 올바르게 처리되는 경우입니다. 인접 라우터에 대해서는 그 주장에 라우터로서 패킷을 전달하고 있다는 근거도 포함됩니다.

이 정의는 “서비스가 건강하다”는 것보다 좁습니다. 반환 경로가 대칭인지, 모든 경유 요소가 정상인지, 애플리케이션이 트랜잭션을 수락했는지, 물리적 작업이 완료되었는지는 말하지 않습니다. 이웃에 대한 보편적 주장조차 아닙니다. 이것은 관찰 노드에서 특정 넥스트홉 관계에 대해, 설정된 도달 가능성 구간에 충분히 최신인 근거를 근거로 무언가를 말하는 것입니다.

NUD는 두 가지 넓은 형태의 긍정적 확인을 인정합니다. 하나는 이웃 요청(Neighbor Solicitation)에 대한 응답으로 수신되는 요청형 이웃 광고(Neighbor Advertisement)입니다. 다른 하나는 상위 계층 프로토콜이 전방 진행 중임을 알리는 적합한 표시입니다.

상위 계층 추론은 정밀합니다. 최신 TCP 응답(acknowledgement)은 최근에 보낸 데이터가 원격 피어에 도달했음을 보여줄 수 있습니다. 그 피어로 가는 경로가 캐시된 이웃을 첫 홉으로 사용한다면, 그 응답은 그 이웃을 통한 전방 경로가 동작했다는 추론을 뒷받침합니다. 새로운, 중복되지 않은 데이터를 수신하는 것 역시 앞선 응답들이 전방으로 이동했음을 암시할 수 있습니다. 구현은 그 신호로 이웃 도달 가능성을 갱신할 수 있습니다.

그러나 같은 근거를 두 번 써서는 안 됩니다. TCP 응답은 링크 계층 이웃을 인증하지 않습니다. 현재의 반환 경로가 전방 경로와 일치함을 증명하지도 않습니다. 애플리케이션 페이로드, 승인 결정, 비즈니스 결과를 보증하지도 않습니다. 그것은 하위 계층의 한 가지 추론, 즉 최근의 첫 홉 전방 진행을 위해 빌려 온 상위 계층 관찰입니다.

상태 기계는 질문의 나열이다

RFC 4861의 익숙한 상태들은 판정이 아니라 질문으로 이해하는 것이 가장 쉽습니다.

INCOMPLETE는 주소 해석이 아직 진행 중임을 의미합니다. 즉, 노드가 아직 필요한 링크 계층 주소를 갖지 못했다는 뜻입니다.REACHABLE은 최근의 긍정적 확인이 존재함을 의미합니다. 도달 가능성 타이머가 만료되면 항목은STALE이 됩니다. 링크 계층 주소는 버려지지 않습니다. 이 레이블은 오래된 확인이 더 강한 상태를 뒷받침할 만큼 최신이 아니라는 것만 말합니다.

STALE은 시간이 흘렀다는 이유만으로 프로브 트래픽을 만들지 않습니다. 사용되지 않는 캐시 항목은 조용히 남아 있을 수 있습니다. 그것이 필요해진 첫 패킷이 상태를DELAY로 바꾸고, 캐시된 링크 계층 주소로 전송됩니다. 이 유예 기간은 상위 계층에 새로운 확인을 제공할 잠깐의 기회를 줍니다. 그렇게 되면 항목은 이웃 요청을 하나도 추가하지 않고REACHABLE로 돌아갑니다.

그런 근거가 도착하지 않으면 상태는PROBE가 됩니다. 노드는 캐시된 경로를 직접 시험하기 위해 유니캐스트 이웃 요청을 보냅니다. 유효한 요청형 이웃 광고는REACHABLE을 복원할 수 있습니다. 기본 알고리즘에서는 프로브 횟수가 소진되면 항목이 삭제되며, 넥스트홉 결정이나 주소 해석을 다시 시작할 수 있습니다.

이 나열은 대시보드가 흔히 하나로 뭉개는 네 가지를 분리합니다.

  • 저장된 링크 계층 주소;
  • 긍정적 도달 가능성 근거의 최신성;
  • 이웃을 사용하려는 현재의 수요;
  • 새 확인을 얻으려는 활성 시도.

녹색이나 빨간 점은 이 구분을 지킬 수 없습니다.last_seen이라는 이름의 단일 타임스탬프도 그렇습니다. 운영자는 무엇이, 어떤 메커니즘으로, 어느 관찰 지점에서 보였는지, 그리고 그 추론이 언제 만료되는지를 알아야 합니다.

요청되지 않은 소식은 긍정적 확인이 아니다

이웃 발견은 전방 경로를 증명하지 않으면서도 가치 있을 수 있는 정보를 운반합니다. 요청되지 않은 이웃 광고는 변경된 링크 계층 주소를 알릴 수 있습니다. 라우터 광고(Router Advertisement)는 이웃에서 수신자 쪽으로 어떤 메시지가 이동했음을 보여줄 수 있습니다. 그러나 어느 것도 반대 방향으로 보낸 패킷이 그 이웃에 도달하고 처리되고 있음을 입증하지 않습니다.

그래서 RFC 4861은 Solicited 플래그가 꺼진 라우터 광고와 이웃 광고는 도달 가능성 확인으로 취급해서는 안 된다고 말합니다. 이 비대칭은 중요합니다. 누군가 말하는 것을 들었다고 해서 그 사람이 당신을 들을 수 있다는 증거는 되지 않습니다. 위치를 알게 되었다고 해서 그곳으로 가는 경로가 지금 동작한다는 증거도 되지 않습니다.

여기서 얼핏 무해해 보이는 관측성 지름길이 위험해집니다. 모든 이웃 광고가 범용last_reachable_at을 갱신한다면, 요청되지 않은 메시지가 전방 경로 질문에 답하지 않고도 화면을 녹색으로 유지할 수 있습니다. 그러면 로그는 확인이 요청된 것이었는지, 활성 프로브와 대응했는지, 어느 캐시 항목을 갱신할 자격이 있었는지를 잃습니다.

더 안전한 수신은 메시지 방향, Solicited 플래그, 대상 주소, 송수신 맥락, 링크 계층 옵션 변경, 그리고 정확한 상태 전이를 함께 기록합니다. “이웃 정보를 수신했다”와 “전방 도달 가능성이 확인되었다”는 가까이 일어나더라도 별개의 사건입니다.

세 번의 프로브는 합리적이면서도 상황에는 맞지 않을 수 있다

NUD의 기본 상수는 빠른 실패 경로를 만듭니다. RFC 7048은 기본값을 약 1초 간격의 세 차례 전송으로 기술합니다. 호스트에게 대안 기본 라우터나 넥스트홉이 있을 때는 유용합니다. 현재 이웃을 사용 불가로 선언하면 트래픽을 성공 가능성이 실제로 있는 경로로 옮길 수 있습니다.

그러나 대안이 존재하지 않으면 같은 시계가 다르게 작동합니다. 짧은 무선 페이드, 잠자는 링크, 일시적 혼잡, 느린 복구는 프로브 예산보다 오래 지속될 수 있습니다. 그때 캐시 항목을 삭제하면 주소 해석이, 흔히 멀티캐스트와 함께, 다시 시작됩니다. 원래 캐시된 링크 계층 주소가 여전히 유일하게 그럴듯한 경로일 수 있는데도 말입니다. 빠른 실패는 대체물을 찾아내지 못했습니다. 유용한 상태를 버리고 부하를 더했을 뿐입니다.

RFC 7048은 이 경우를 위해 조건부이고 개념적인UNREACHABLE상태를 도입합니다. 대안 이웃이 없을 때 구현은 캐시 항목과 그 링크 계층 주소를 유지할 수 있습니다. 패킷은 계속 그곳으로 보내질 수 있습니다. 프로브는 계속되며, 결국 지수적 백오프를 동반한 멀티캐스트 이웃 요청에 이릅니다. 유니캐스트에서 멀티캐스트로의 전환은 중요합니다. 이웃의 링크 계층 주소가 바뀌었을 수 있으므로, 오래된 주소만 계속 프로브하면 그것을 다시 발견할 방법이 없습니다.

UNREACHABLE이라는 이름은 의도적으로 불편합니다. 그것은 노드가 활성 프로빙 과정에서 확인을 얻는 데 실패했다는 뜻입니다. 구현이 전송을 멈추어야 한다는 뜻이 아닙니다. 모든 패킷이 실패하고 있거나, 서비스가 영구적으로 내려간다는 뜻도 아닙니다. 그리고 진짜 대안 넥스트홉이 나타났을 때 그 선택을 막아서도 안 됩니다.

인내심 있는 프로빙은 보편적 개선이 아닙니다. 대안 라우터가 존재하면, 확인되지 않은 이웃에 트래픽을 계속 먹이는 일은 유용한 페일오버를 지연시킬 수 있습니다. 대안이 없으면, 유일한 매핑을 삭제하는 일은 일시적 실패를 악화시킬 수 있습니다. 결정적 사실은 상태 레이블이 아니라 현재의 대안 집합과 운영자의 연속성 정책입니다.

캐시 상태는 그 대상을 인증할 수 없다

RFC 3756은 이 경계가 동시에 보안 경계이기도 한 이유를 설명합니다. 이웃 발견은 흔히, 링크 상의 노드들이 캐시에 영향을 미치는 메시지를 보낼 수 있는 신뢰 모델 안에서 동작합니다. 위조된 요청형 이웃 광고는 거짓 도달 가능성 확인을 만들 수 있습니다. 공격자는 패킷을 악성이거나 존재하지 않는 링크 계층 주소로 유도하거나, 피해자가 신뢰하는 상태를 조작해 서비스 거부를 지속시킬 수 있습니다.

이 가능성이 NUD를 무용지물로 만들지는 않습니다. 대신 운영자에게 그것이 어떤 종류의 근거인지 알려줍니다. 상태 전이는 프로토콜의 입력 규칙에 따라 올바르면서, 그 입력 자체는 공격자가 만든 것일 수 있습니다.REACHABLE은 인증됨, 승인됨, 소유됨의 축약어가 아닙니다. 존재하는 암호학적 또는 링크 접근 통제는 별개의 근거이며 별개의 실패 양상을 갖습니다.

마찬가지로 주소는 기관이 아닙니다. 이웃 캐시 항목은 전달을 위해 IPv6 넥스트홉 주소를 링크 계층 정보에 묶을 뿐입니다. 장치를 책임지는 사람, 그 주소를 사용할 권리를 가진 조직, 제어 중인 소프트웨어 개정판, 패킷이 수용된 정책을 확립하지 않습니다. 그런 사실들은 각자의 기록과 보관 책임자를 필요로 합니다.

따라서 최소한의 인시던트 대장은 캐시 상태를, 그것을 만들어 낸 근거를 대신하는 것이 아니라 곁에 두어야 합니다. 요청형 응답이었는지 상위 계층 힌트였는지, 타임스탬프, 인터페이스, 넥스트홉, 저장된 링크 계층 주소, 프로브 순서, 대안 라우터 집합, 보안 맥락, 관련 소프트웨어/구성 버전을 함께 기록합니다. 애플리케이션 승인과 결과 영수증은 별도로 유지합니다.

Erik Nordmark의 역할은 좁게 서술할 때 가장 강하다

이 글을 위해 검토한 현재 IETF 프로필은 25개의 RFC와 사물인터넷(Internet of Things) 이사회에서의 활동적 검토자 역할을 나열합니다. 이것은 시간에 민감한 프로필 메타데이터이지 영구적 직함이 아닙니다. 더 오래 지속되는 귀속은 문서들 자체에서 나옵니다.

RFC 4861은 Nordmark를 Thomas Narten, William Simpson, Hesham Soliman와 함께 이름 올립니다. RFC 7048은 Nordmark를 Igor Gashinsky와 함께 이름 올립니다. RFC 3756은 편집자 Pekka Nikander를 James Kempf, Nordmark와 함께 이름 올립니다. 앞의 두 문서는 Standards Track이며, RFC 3756은 Informational입니다. 저작, 문서 상태, IETF 합의, 배포된 동작은 서로 바꿔 쓸 수 없는 주장이기 때문에 이 구분은 중요합니다.

실행 중인 코드는 여전히 그 구현이 어떤 전이를 수행하는지, 어떤 상위 계층 힌트를 받아들이는지, 대안을 어떻게 발견하는지, 어떻게 백오프하는지, 무엇을 기록하는지 보여 주어야 합니다. RFC는 공개 조정 지점이며, 그런 관찰을 비교할 수 있는 사양을 제공합니다. 그러나 그 저자들을 독자의 네트워크 운영자로 만들지는 않습니다.

이 절제는 더 깊은 설계 미덕을 반영합니다. 이 상태 기계는 관찰할 수 있는 것보다 더 많은 것을 확정하려 하지 않습니다. 신뢰도를 낮추면서도 사용 가능한 매핑을 보존합니다. 트래픽이 그 질문을 실제로 만들 때 새 근거를 요구합니다. 대안이 바뀌면 실패 정책을 바꿉니다. 그리고 전방 전달 힌트가 신원이나 권한으로 오인되기 전에 멈춥니다.

이웃이 stale이 된 것이 아닙니다. 근거가 stale이 되었습니다. 그 차이가 책임 가능한 네트워크 기록의 시작입니다.

출처