Osprey가 추측하기를 거부하는 것
제가 만든 것 중 가장 중요한 것은 일련의 거부입니다
Michel Wijnberg
추측하는 네트워크 도구는 모른다고 인정하는 도구보다 못합니다. 그 이유는 철학적인 것이 아니라 운영적인 것입니다.
도구가 “모르겠습니다”라고 하면 당신은 직접 알아보러 갑니다. 그럴듯한 답을 내놓으면 당신은 그 답대로 움직입니다. 그리고 화면에는 맞는 답과 자신 있는 답을 구분해 주는 것이 아무것도 없습니다. 그러므로 실패 양상은 “도구가 틀렸다”가 아니라 “도구가 틀렸는데 내가 확인해 볼 이유가 없었다”입니다.
그래서 Osprey에는 제 모든 제품 본능을 눌러 이기는 규칙이 하나 있습니다. 근거를 말하든지, 근거가 없다고 말하든지. 절대 보간하지 않습니다. 데이터처럼 보이는 자리표시자를 절대 그리지 않습니다.
실제로 팔리는 제품에서 그것이 어떤 모습인지 보여 드리겠습니다.
1. “이 경로는 제대로 된 방식으로는 계산할 수 없습니다”
이전 글은 홉 바이 홉 포워딩 체인에 관한 것이었습니다. 출발지를 뿌리로 하는 통로 하나를 그리는 대신 각 라우터 자신의 라우팅 테이블을 따라가며, AS 200의 라우터 쌍 4,032개 전부에 대해 정확히 검증했습니다.
그 엔진은 OSPFv2에서 동작합니다. IS-IS에서는 동작하지 않고, Osprey는 조용히 물러서는 대신 그렇다고 말합니다.
4. Hop-by-hop forwarding chain unavailable Showing the source’s own shortest-path view, which every intermediate router may legitimately disagree with. Osprey does not model this protocol’s inter-area reachability hop-by-hop (IS-IS carries inter-level reachability differently from OSPF and has no Type-3 equivalent to persist, so Osprey stores nothing from which L1↔L2 route leaking could be reconstructed. An L1-only source in particular forwards on the attached-bit default toward its nearest L1/L2 router, not by end-to-end cost; EIGRP has its own observed chain).
이 메시지에 대해 세 가지.
이 메시지는 답을 낸 모델을 이름으로 밝힙니다. 출발지 자신의 최단 경로 뷰이므로, 두 엔진 중 어느 쪽을 보고 있는지 알 수 있습니다. 이유를 이름으로 밝힙니다. Osprey는 L1↔L2 경로 누출을 재구성할 만한 것을 아무것도 저장하지 않습니다. 이는 프로토콜의 한계가 아니라 Osprey 모델의 한계입니다. IS-IS에 Type-3 summary LSA가 없는 것은 애초에 필요가 없었기 때문이며, 레벨 간 도달성은 L2 LSP와 attached 비트로 나릅니다. 그리고 구체적인 결과를 이름으로 밝힙니다. 실제로 당신을 물게 될 부분이 바로 이것입니다. L1 전용 출발지는 애초에 엔드투엔드 코스트로 포워딩하지 않습니다. ISO 10589에 따라 attached 비트를 좇아 가장 가까운 L1/L2 라우터로 갑니다. 그 실제 첫 홉은 그려진 경로와 아무 상관이 없을 수도 있습니다.
경로는 여전히 표시됩니다. 최단 경로 뷰는 진짜로 쓸모가 있기 때문입니다. 다만 더 강한 답인 척할 권리는 없습니다.
같은 규율이 OSPFv3에도, 프로토콜 인스턴스의 영역 중 일부만 담은 스코프에도, 가상 링크를 가진 영역에도, 해당 주소 패밀리를 나를 수 있는 프로토콜 인스턴스 두 곳에 걸쳐 사는 라우터에도 적용됩니다. 각 경우마다 이름 붙은 고유한 이유가 있습니다. 어느 것도 예전 그림을 슬그머니 되살리지 않습니다.
2. “이 숫자는 아무 의미도 없을 것입니다”
EIGRP는 링크 상태 프로토콜이 아닙니다. 합류할 데이터베이스도 없고, 돌릴 SPF도 없으며, 중요하게는 홉별 코스트를 더할 의미 있는 방법이 없습니다. EIGRP의 복합 메트릭은 링크 하나가 아니라 경로 전체를 기술하기 때문입니다.
그래서 Osprey는 합계를 찍지 않습니다.
Observed EIGRP forwarding chain EIGRP has no link-state database; this path follows the routers’ own DUAL result (per-hop topology tables), so there is no summed cost to show: 3 RIB-installed variant(s) shown alongside (the RIB holds equal next-hops).
대신 얻는 것은 각 라우터가 목적지까지 스스로 계산한 거리가 체인을 따라 줄어드는 모습입니다. 712704 → 710144 → 658944 → 556544 → 505344 → 428544 → 223744 → 133120 → 128256.
이 숫자들은 하나하나 라우터에서 나온 것입니다. 유도한 것은 하나도 없습니다. 비어 있는 “총 코스트” 칸은 구현의 구멍이 아닙니다. 존재하지 않는 양을 올바르게 표현한 것입니다.
같은 규칙이 AS 경계를 넘을 때도 발동합니다. 그곳에서는 OSPF 코스트와 IS-IS 코스트가 서로 무관한 메트릭 공간의 숫자이기 때문입니다.
Per-segment costs (never summed) | 15 hops
3. “세그먼트별로 제가 얼마나 확신하는지 정확히 알려 드립니다”
도메인을 가로지르는 경로는 계산할 수 없습니다. 근거로부터 이어 붙일 수 있을 뿐이고, 근거의 품질은 고르지 않습니다. 그래서 Osprey는 경로 전체에 하나의 뭉뚱그린 확신도를 매기는 대신 세그먼트마다 등급을 매깁니다.
AS 200 ospfv2/1 cost 20051은 resolved입니다. AS 300 isis/LAB cost 1320은
inferred입니다. 같은 경로, 같은 화면, 다른 인식론적 지위, 둘 다 라벨이 붙어 있습니다.
그 배지들 뒤에는 순서대로 시도되는 엄격한 사다리가 있습니다.
| 단 | 근거 | 확신도 |
|---|---|---|
| a | 그 도메인의 경계에서 목적지를 포함하는 RIB 행 | resolved |
| a2 | 자신의 BMP RIB가 다음 AS를 거쳐 목적지를 포함하는 라우트 서버 | inferred(bmp-rib-rs) |
| b | 체인상 다음 AS를 향해 확립된 eBGP 세션 | inferred |
| c | 아무것도 없음 | opaque: 주석이 달린 세그먼트로 그리고 홉은 하나도 그리지 않음 |
중요한 것은 (c) 단입니다. 트래픽이 어떻게 그 도메인으로 들어가는지 Osprey가 확정할 수 없을 때, 그럴듯해 보이는 홉 묶음을 보간하지 않습니다. 명시적으로 불투명한 세그먼트를 그리고 스스로를 설명하며, 원인에 손을 쓸 수 있는 경우에는 일반적인 사과 대신 손쓸 수 있는 말을 합니다. 메시지는 이런 모양입니다.
AS 65000 has no areas in the selected scope. Include its areas to trace through this domain
이것은 무언가 해 볼 수 있는 메시지입니다. “진입점 불명”은 그렇지 않습니다. (이 글들에 나오는 랩 경로는 모두 해결되므로 그 특정 주석은 여기 스크린샷에 없습니다. 스코프가 실제로 트랜짓 AS를 빠뜨렸을 때 발동합니다.)
(a2) 단이 존재하는 데에는 짚어 둘 만한 구체적인 이유가 있습니다. 투명 라우트 서버는 AS_PATH에 결코 나타나지 않습니다. 라우트 서버 자신의 RIB를 읽지 않으면 IX를 거치는 우회를 아예 볼 수 없습니다. 직결이 아닌데도 경로가 직결처럼 보이게 됩니다.
4. “이 포트들은 사실이거나 / 추측이거나 / 진짜로 모호합니다”
Osprey가 eBGP 전환에 물리 포트를 주석으로 달 때는, 네 가지 상황을 하나의 자신만만한 답으로 뭉개지 않고 구분합니다.
- 링크 쌍이 정확히 하나이고 패브릭 대안이 없음 → 포트를 사실로 진술:
jfk1-gw1 Et1/1 → i-jfk1-gw1 Et1/2 - 병렬 링크 → 집계로 제시하고 불확실성을 이름으로 밝힘: “3 parallel L2 links: Gi2↔Et1/0, … (session link undetermined)”
- 양쪽 경계가 공유 브리지에 있고 직결 링크는 없음 → 접속 포트를 곁들인 패브릭의 존재, 즉 둘 사이에 브리지가 있다는 진술일 뿐, 세션이 그곳을 지난다는 주장은 결코 하지 않음
- 직결 링크와 공유 패브릭이 둘 다 있음 → 둘 다 이름으로 밝히되 어느 쪽도 고르지 않는 명시적 모호성
여기에 보조 규칙이 붙습니다. 행은 13시간보다 새로워야 하고, 6시간을 넘으면 경과 시간을 공개하며, sysname만으로 매칭된 브리지는 포트 주장에 거부권을 행사하되 자신이 사실로 표시되는 일은 결코 없습니다.
가장 강한 단은 추측을 사실로 승격시킵니다. BGP 세션의 두 주소가 장비의 IP-MIB 바인딩을 통해 특정
포트로 해석되면 주석은 ip-bound가 되고 모호성 게이트를 덮어씁니다. 그 시점에서는 더 이상 추론이
아니기 때문입니다.
5. “이 필드들은 제공되지 않습니다”
가장 미묘하고, 제가 제일 좋아하는 것입니다.
13382 LSAs reconstructed (LSAge, SeqNo, Checksum not available)
이 LSA들은 프로토콜 인접으로 수신한 것이 아니라 SNMP 워크에서 재구성한 것이고, OSPF MIB를 SNMP로 워크하면 LSA의 내용은 얻지만 실시간 헤더 필드는 얻지 못합니다.
솔깃한 구현은 0으로 채운 열 세 개입니다. 보기에도 예쁘고 정렬도 잘되고, 거짓말입니다. 게다가 탐지할 수 없는 거짓말입니다. 에이지가 0인 LSA는 빠진 측정값이 아니라 방금 플러딩된 LSA처럼 보이기 때문입니다.
그래서 그 열들은 아예 없고, 이유는 패널 맨 위에 찍힙니다.
6. 내 가장 좋은 엔진을 쓰기를 거부하기
가장 뿌듯한 항목입니다. 기능 하나를 잃는 값을 치렀기 때문입니다.
Osprey의 시뮬레이션 모드에서는 링크를 끊고, 노드를 빼고, 메트릭을 바꾸고, 트래픽이 어떻게 옮겨 가는지 볼 수 있습니다. 뻔한 수는 그 반짝이는 새 홉 바이 홉 체인 엔진을 변형된 토폴로지에 돌리는 것입니다.
Osprey는 의도적으로 그러지 않습니다.
변형 이후의 포워딩 체인은 계산 불가능합니다. 각 라우터 자신의 테이블을 따라가려면 변경 이후 각 라우터의 테이블이 어떻게 될지를 알아야 하고, 그것은 살아남은 ABR들이 다시 생성할 Type-3 summary LSA에 달려 있습니다. 그 LSA들은 아직 존재하지 않습니다. 추측 없이는 합성할 수 없고, 추측해서 만들면 검증된 엔진의 권위는 전부 두른 채 검증은 하나도 없는 홉 바이 홉 경로가 나옵니다.
그래서 시뮬레이션의 양쪽 모두 분명히 라벨이 붙은 SPF 투영에 머무르고, 고지문에 그렇다고 밝힙니다. 더 그럴싸한 답은 손에 있었습니다. 다만 그것이 참이 아니었을 뿐입니다.
이것이 왜 사과가 아니라 기능인가
저는 네트워크 토폴로지 제품을 팝니다. 위의 모든 동작은 스크린샷을 경쟁사 것보다 조금 덜 인상적으로 만듭니다. 자신 있는 답이 데모에서 더 잘 먹힌다는 지적을 받는 대화도 이미 겪어 봤습니다.
맞는 말입니다. 그리고 그것은 이 도구를 가질 가치가 있게 만드는 유일한 것을 파괴합니다.
새벽 3시에 영역이 갈라진 상황을 마주한 엔지니어에게 필요한 것은 아름다운 그림이 아닙니다. 그림의 어느 부분에 걸어도 되는지를 아는 것입니다. 자기 근거에 등급을 매기는 제품(resolved, inferred, opaque, unavailable, not computable)은 화면 위 모든 것에 의심을 고르게 흩뿌리는 대신, 의심을 써야 할 곳에 쓰게 해 줍니다.
그 신뢰를 벌어 주는 것이 이전 글의 측정입니다. 라우터에서 읽어 낸 기준 진실에 대해 라우터 쌍 4,032개 중 4,032개를 정확히 재현했습니다. 그리고 그 신뢰를 지켜 주는 것이 이 글의 거부들입니다. 4,032번 맞히고 나서 4,033번째에 슬그머니 허세를 부리는 도구는, 지금 당신이 어느 쪽 경우에 있는지에 대해 아무것도 알려 준 것이 없습니다.
아는 것을 말하십시오. 어떻게 아는지 말하십시오. 모를 때는 모른다고 말하십시오.
이것으로 첫 번째 시리즈가 끝납니다. 랩 투어는 여기, 수동 디스커버리 아키텍처는 여기, 홉 바이 홉 경로 엔진은 여기에 있습니다. 여러 진실을 동시에 쥐는 것, 서로 충돌하는 근거의 순위를 매기는 것, 그리고 자기 제품이 틀렸음을 증명하는 것에 관한 두 번째 시리즈는 같은 라우터, 세 가지 다른 진실에서 시작합니다.