요약

  • RFC 1868은 다이얼인 호스트가 피어의 오래된 캐시 항목이 만료되기 전에 두 번째 통신 서버를 통해 다시 접속하는 상황에서 발생하는 Proxy ARP 실패를 다루었다.
  • UNARP는 하드웨어 주소 길이가 0인 미요청(unsolicited) ARP Reply를 재사용하여 지원하는 피어들에게 오래된 IP 매핑을 삭제하도록 요청했다. 인지하지 못하는 피어는 축약된 패킷을 거부하는 것이 기대되었으며, 구현은 이 확장을 비활성화할 수 있었다.
  • 전송, 피어 수신, 파서 수용, 캐시 삭제, 새로운 ARP 해석, 성공적인 포워딩은 서로 다른 사건이었다. 브로드캐스트는 그중 어느 것도 확인해 주지 않았다.

호출자는 다른 문을 통해 돌아왔다

원격 컴퓨터가 공용 모뎀 풀에 다이얼업으로 접속하는 상황을 상상해 보라. 그 컴퓨터는 물리적으로 통신 서버 뒤에 있지만, 인터넷 주소는 사무실 LAN의 장비들에게 로컬처럼 보인다. 호스트 A가 원격 컴퓨터의 하드웨어 주소를 요청하면 첫 번째 서버가 그를 대신해 응답한다. 호스트 A는 서버의 하드웨어 주소를 저장하고 이후 트래픽을 그 서버를 통해 보낸다.

이것이RFC 1027이 문서화한 호환성 타협이었다. Proxy ARP는 게이트웨이가 로컬 와이어 너머의 호스트를 대신해 응답할 수 있게 했다. 기존 호스트들은 숨겨진 서브넷을 이해하거나 새 경로를 설치할 필요가 없었다. 그들의 무지는 유용했지만, 진실을 작은 캐시 항목 하나에 집중시켰다. 즉, 이 IP 주소에 대해서는 이 로컬 하드웨어 목적지를 사용하라는 항목 하나에.

이제 호출자가 첫 번째 서버에서 연결을 끊고 즉시 두 번째 서버를 통해 다시 다이얼한다. 원격 IP 주소는 그대로다. 호스트 A의 캐시된 하드웨어 주소는 그렇지 않다. 항목이 만료될 때까지 호스트 A는 더 이상 경로를 소유하지 않은 첫 번째 서버로 프레임을 계속 전달한다.

RFC 1868은 정확히 이 간격을 다루었다. 1995년 11월에 Experimental로 발표된 이 문서는 라우팅이나 ARP 패킷을 재설계하지 않았다. 대신 부정적 메시지를 제안했다. 서버가 원격 호스트와의 연결을 잃으면, LAN에 오래된 매핑이 존재하지 않아야 한다고 알리라는 것이었다.

ARP는 로컬 믿음을 만들었다

원본RFC 826은 노드가 프로토콜 주소와 하드웨어 주소 사이의 대응 관계를 학습하는 방식을 기술했다. 요청은 대상 프로토콜 주소의 소유자가 누구인지 묻는다. 응답은 수신자가 자신의 테이블에 병합하여 이후 전송에 사용할 수 있는 송신자 매핑을 제공한다.

테이블은 로컬이다. 중앙 ARP 레지스터도, 모든 스테이션이 동일한 버전을 확정하는 트랜잭션도 없다. 이 설계는 주소 해석을 필요로 하는 장비 근처에 두었다. 동시에 이동이 서로 다른 피어들에게 서로 다른 시점의 진실을 남길 수 있음을 의미했다.

1989년까지RFC 1122는 호스트가 낡은 ARP 항목을 무효화할 수단을 가져야 한다고 요구했다. 결합 가능한 네 가지 메커니즘을 나열했다. 타임아웃, 유니캐스트 폴링, 링크 계층의 조언, 전달 문제 이후 상위 계층의 조언. Proxy ARP는 숨겨진 경로가 바뀐 후에도 호스트가 게이트웨이의 응답을 계속 사용할 수 있게 하여 무효화를 더 시급하게 만들었다.

이 메커니즘들은 서로 다른 근거를 만들어냈다. 타임아웃은 로컬 정책이 오래된 항목에 대한 신뢰를 중단했다는 것만 말한다. 실패한 폴링은 응답 없는 프로브를 보고한다. 링크 조언은 로컬 전송 문제를 보고한다. 상위 계층 조언은 링크 위에서 목격된 실패를 전달한다. 어느 것도 원격 컴퓨터가 다른 곳에 접속했다고 말하지 않는다.

하드웨어 답변 없는 Reply

UNARP는 평범한 ARP Reply 값인 opcode 2를 사용했지만 하드웨어 주소 길이를 0으로 설정했다. 송신 프로토콜 주소는 떠나는 호스트의 IP 주소였다. 대상 프로토콜 주소는 모든 비트가 1인 IPv4 브로드캐스트 주소였다. 송수신 하드웨어 주소 필드가 없어 패킷은 링크 계층 헤더 앞에 16바이트를 차지했다.

RFC 1868을 구현한 수신자는 송신 IP 주소에 연결된 ARP 캐시 항목을 삭제하도록 지시받았다. 송신 서버는 이전에 Proxy ARP Reply를 보낸 적이 있는지조차 기억할 필요가 없었다. 원격 호스트의 연결이 끊길 때마다 UNARP를 보낼 수 있었다. LAN을 정상적으로 떠나는 호스트도 자신을 위해 하나를 보낼 수 있었다.

이 느슨함은 의도적이었다. 불필요한 삭제의 비용은 이후의 재해석이었다. 오래된 답변을 유지하는 비용은 잘못된 중계자로의 지속적 전송이었다. UNARP는 거짓 연속성보다 망각을 선호했다.

그러나 삭제는 위치에 대한 새 사실이 아니었다. UNARP를 수용한 뒤 호스트 A가 알게 된 것은 캐시된 답변 하나를 더 이상 사용하지 말아야 한다는 것뿐이었다. 다시 물어보고, 새 매핑을 받고, 그 경로로 데이터를 보내야 했다. 오래된 믿음의 부재는 새 경로의 존재가 아니었다.

호환성이란 침묵이 여러 의미를 가진다는 뜻이었다

RFC 1868은 지원 노드와 미지원 노드가 공존할 것으로 기대했다. 하드웨어 주소 길이 0이 판별 기준이었다. UNARP를 모르는 기존 구현은 잘못된 형태처럼 보이는 Reply를 거부해야 했고, 모두 0인 하드웨어 주소로 매핑을 만들지 말아야 했다.

이는 신중한 실패 모드였지만, 브로드캐스트의 한계를 드러냈다. 패킷 이후 호스트 A가 침묵하면 서버는 호스트 A가 수신하고 행동했는지, 수신하고 거부했는지, 전혀 수신하지 못했는지, 삭제할 항목이 없었는지 알 수 없었다. 확인 응답 목록은 존재하지 않았다.

이 문서는 또한 기존 벤더 구현이 축약된 형식에 나쁘게 반응할 경우 운영자가 UNARP를 비활성화할 수 있도록 구성 스위치를 권고했다. 표준은 따라서 로컬 거부권을 보존했다. 발표는 가능한 메시지를 정의했을 뿐, 모든 스테이션이 동일한 해석을 실행하게 만들지는 않았다.

이 변경이 널리 지원될 것이라는 문서의 기대는 기대일 뿐 측정이 아니었다. Experimental 지위와 이후 표준 목록에의 등장은 문서상의 역사를 보여줄 뿐, 구현 현황 조사를 제공하지는 않는다.

이후 링크는 요청을 반복하고 삭제를 좁혔다

RFC 2176은 1997년 관련 메커니즘을 IPv4 over MAPOS로 가져왔다. 그 UNARP는 전용 동작 코드를 사용하고 하드웨어 주소를 포함했다. 올라오는 노드는 30초 간격으로 세 번 전송했다. 수신자는 패킷의 하드웨어 주소가 이미 캐시된 것과 다를 때만 캐시된 IP 매핑을 삭제했다.

이 선택들은 의미를 정교하게 했다. 반복은 한 프레임의 손실이 낡은 상태를 보존할 가능성을 줄였다. 하드웨어 비교는 이미 발표 노드와 일치하는 매핑을 보호했다. 그러나 세 번의 전송이 세 번의 확인 응답은 아니었다. 해당 RFC는 별도로 캐시 노화와 링크 단절 시 즉시 삭제를 요구했는데, 이는 UNARP가 여러 무효화 신호 중 하나였음을 보여준다.

RFC 3790은 이후 RFC 1868을 ARP 캐시 항목 삭제를 위한 IPv4 의존 확장으로 분류했다. 이 설명은 기록에서 이 설계의 위치를 확립할 뿐, 배포나 성공을 확립하지 않는다.

긍정적 선언도 체인을 닫지 못했다

RFC 5227은 이후 ARP Request 안에 이미 존재하던 두 목소리를 설명했다. 송신자 필드는 매핑을 선언하고, 대상 필드는 매핑을 묻는다. ARP Probe는 주소가 사용 중인지 묻는 동시에 그 주소를 차지하려는 의도를 암시한다. ARP Announcement는 송신자가 이제 그 주소를 사용하고 있다고 말한다.

UNARP는 반대 방향으로 말했다. 오래된 매핑을 믿지 말라. 두 종류의 진술 모두 수신자에게 링크 로컬 입력이다. 피어는 문법을 검증하고 자신의 상태와 비교하며 행동을 결정할 수 있다. 어느 진술 하나만으로 모든 피어가 동의했는지, 충돌이 없는지, 이후 프레임이 목적지에 도달하는지, 애플리케이션이 유용한 작업을 완료했는지 증명되지 않는다.

역사적 교훈은 ARP가 중앙 재판관을 필요로 했다는 것이 아니다. 분산된 캐시는 자신의 전환에 대한 정직한 이름을 필요로 한다는 것이다. "이탈 브로드캐스트가 전송됨", "프레임 관찰됨", "항목 삭제됨", "새 매핑 학습됨", "패킷 전달됨"은 모두 방어 가능한 기록이다. "네트워크가 잊었다"는 네트워크가 중요한 지점들에서 관찰되지 않는 한 그렇지 않다.

출처와 한계

패킷과 캐시의 기초는 RFC 826, 1027, 1122에 있다. RFC 1868은 실험적 이탈 메시지를 정의하고, RFC 2176은 이후 링크별 변형을 제공하며, RFC 3790은 IPv4 의존성을 분류하고, RFC 5227은 이후의 ARP 프로브와 공지 의미론을 설명한다. 이 출처들은 동작과 명시된 기대를 정의한다. 그러나 현재의 사용, 보편적 지원, 특정 사건, 제품 적합성, 악의적 악용, 실제 네트워크에서의 성공적인 전달을 증명하지는 않는다.