요약

  • IPv4의 식별(Identification) 필드는 수신자가 조각들을 원래 데이터그램과 연결할 수 있도록 만들어졌지만, 초기 요구사항은 고유성을 모든 데이터그램으로 확장했다.
  • 16비트 네임스페이스는 현대의 전송 속도에서 가정된 수명 동안 고유성을 유지할 수 없었고, 예측 가능한 값은 재조립을 넘어 진단, 핑거프린팅, 공격 용도로 쓰이게 되었다.
  • RFC 6864는 원자적 데이터그램에 대해 ID를 무의미하게 만들고 모든 장치가 그곳에서 이를 무시하도록 명령하는 동시에, 조각화될 수 있거나 이미 조각화된 트래픽에 대해서는 엄격한 고유성을 유지했다.

전체를 잃은 조각들을 위한 번호

원래의RFC 791은 인터넷 프로토콜에 주소 지정과 조각화라는 두 가지 중심 역할을 부여했다. 게이트웨이는 더 작은 최대 패킷 크기를 가진 네트워크를 통과하기 위해 데이터그램을 분할할 수 있었다. 그러면 수신 측은 도착한 조각들 중 어느 것이 함께 속하는지 결정해야 했다.

네 개의 헤더 필드가 이 답을 제공했다.Identification은 원래 데이터그램을 명명했고,Fragment Offset은 조각이 그 안에서 차지하는 위치를 나타냈으며,MF는 더 많은 조각이 뒤따른다고 알렸고,DF는 조각화를 금지했다. 재조립은 송신 주소, 수신 주소, 상위 계층 프로토콜, 식별 값을 하나의 버퍼 키로 결합했다.

따라서 이 16비트 숫자는 엔드투엔드 트랜잭션 ID가 아니었다. 웹 요청, TCP 세그먼트 또는 애플리케이션 이벤트를 식별하지 않았다. 그것의 필요한 역할은 더 좁았다. 동일한 재조립 맥락에서 동시에 존재하는 데이터그램들의 조각들이 서로 혼동되지 않도록 하는 것이었다.

그런데 이 필드는 전체적으로 도착하는 패킷을 포함해 모든 IPv4 헤더에 나타났다. 존재 자체가 일반적인 의미를 부여하는 유혹이 되었다.

고유성은 필요 이상으로 확장되었다

초기 계약은 최대 데이터그램 수명 동안 송신 주소, 수신 주소, 프로토콜 튜플 내에서 모든 데이터그램에 서로 다른 ID를 요구했다.RFC 1122는 또한 제안된 부차적 용도들을 기록했다. 반복된 숫자는 혼잡한 게이트웨이가 중복을 폐기하는 데 도움을 주거나, 재전송이 이전 사본의 조각을 재사용하도록 할 수 있었다.

이러한 아이디어는 재조립 레이블을 일반 식별 서비스로 바꾸었다. 송신자는DF가 조각화를 불가능하게 만드는 경우에도 작은 네임스페이스를 조율해야 했다. 라우터, 가속기, 진단 도구들은 이 필드를 동일성, 순서 또는 호스트 행동에 대한 증거로 다루기 시작할 수 있었다.

패킷 전송률이 낮을 때 이 계약은 저렴해 보였다. 인터넷이 가속하면서 산술적으로 불가능해졌다.

65,000개의 이름은 시간을 감당할 수 없었다

16비트 필드는 65,536개의 값을 담는다. 이것은 이전 값을 가진 조각이 더 이상 도착해 같은 재조립 버퍼에 들어갈 수 없게 된 후에만 안전하게 순환할 수 있다. 더 빠른 링크는 네임스페이스를 더 빨리 소모한다. 오래된 조각을 더 빨리 만료시키지는 않는다.

RFC 4963은 그 결과로 발생하는 고전송률 재조립 실패를 기술했다. 첫 번째 데이터그램의 조각이 여전히 유효한 동안 두 조각화된 데이터그램이 동일한 ID를 재사용하면, 수신자는 서로 다른 원본의 조각들을 연결할 수 있다. 체크섬, 타이밍, 손실에 따라 그 결과는 폐기, 손상 또는 성능 붕괴일 수 있다.

이 문서는 모든 빠른 비조각화 흐름이 데이터를 손상시킨다고 경고한 것이 아니었다. 위험에는 조각화와 겹치는 재조립 수명이 필요하다. 바로 그 조건 때문에 모든 비조각화 패킷이 전역적으로 의미 있는 식별을 소모하도록 하는 것은 낭비였다.

RFC 6864는 이후 1,500바이트 MTU와 2분의 가정 수명 하에서 이전의 모든 데이터그램 고유성 규칙이 두 엔드포인트 간 하나의 프로토콜을 약 6.4Mbps로 제한할 것이라고 계산했다. 이 수치는 명시된 가정에 귀속된다. 그 역사적 의미는 일반적인 연결이 이미 이 필드가 감당할 수 없는 요구사항을 넘어섰다는 것이다.

카운터는 프로토콜이 약속하지 않은 증거가 되었다

한 가지 쉬운 구현은 카운터를 증가시키는 것이었다. 그러면 관찰자들은 값을 비교하여 프로브 사이의 활동을 추론하고, 시스템을 구분하거나 트래픽을 추정할 수 있었다. 예측 가능성은 또한 특정 도달 가능성과 트리거 조건 하에서 오프패스 공격자가 조각 식별자를 추측하는 데 도움이 되었다.

RFC 7739는 예측 가능한 조각 식별자의 보안 함의와 가능한 생성 전략을 정리했다. 교훈은 하나의 난수 함수가 모든 경우를 해결한다는 것이 아니다. 제한된 공간에서의 무작위 선택도 충돌할 수 있으며, 알고리즘 선택은 여전히 조각에 대한 고유성을 보존해야 한다.

모든 구현이 똑같이 동작하지도 않았다. 일부 송신원은 조각화가 필요 없는 트래픽에 대해 오랫동안 상수 ID를 내보냈다. 이 다양성 자체가, 재조립이 아닌 소비자들은 보편적인 시퀀스에 상호운용 가능하게 의존할 수 없음을 증명했다.

값은 권위 없이도 관찰 가능할 수 있다. 표준의 수리는 결국 이를 명시적으로 말하게 된다.

결정적 구분은 원자성이었다

RFC 6864는 세 가지 사실을 통해 원자적 IPv4 데이터그램을 정의했다:DF=1,MF=0, 조각 오프셋 0. 이것은 조각이 아니며, 준수하는 전송 장치는 이를 조각화할 수 없다.

그 패킷에 대해 ID는 수행할 재조립 작업이 없다. 원래의 송신원은 임의의 값으로 설정할 수 있다. 0이 허용되지만 특권을 지지지는 않는다. 상수, 변화하는 값 또는 그 외 임의의 값은 모두 똑같이 프로토콜의 의미 바깥이다.

더 강한 규칙은 소비자에게 적용된다: 원자적 데이터그램을 검사하는 모든 라우터, 수신지, 방화벽, NAT, 주소 공유 장치 및 터널 엔드포인트는 그 식별 필드를 무시해야 한다. 이는 단지 송신자에게 자유를 준 것이 아니었다. 다운스트림 시스템이 그 값 위에 판단을 세우는 권위를 박탈한 것이다.

반대 범주는 비원자적이다. 조각화가 허용되었거나 이미 발생한 경우 패킷은 비원자적이다.DF=0인 전체 데이터그램은 아직 어떤 라우터도 분할하지 않았더라도 여기에 속한다. 이후 홉이 여전히 분할할 수 있기 때문이다.MF=1또는 0이 아닌 오프셋을 가진 조각도 명백히 여기에 속한다.

조각들이 만날 수 있는 곳에서는 오래된 의무가 살아남았다

RFC 6864는 16비트 한계를 무해하다고 선언하지 않았다. 비원자적 데이터그램의 송신원은 여전히 동일한 송신, 수신, 프로토콜 튜플에 대해 최대 데이터그램 수명 내에 ID를 반복하지 않아야 한다. 재전송된 비원자적 사본은 조각을 첫 시도와 섞지 않도록 서로 다른 ID를 받아야 한다.

이 의무는 엔드 호스트를 넘어선다. 캡슐화하거나 필드를 다시 쓸 때 터널 진입점과 NAT는 데이터그램 송신원이 될 수 있으므로 고유성 의무를 물려받는다.

네트워크도 그 전제를 존중해야 한다.DF=1패킷은 조각화되지 않아야 하며, 전송 장치는DF를 지우지 않아야 한다. 그렇지 않으면 중간 상자가 임의 ID가 안전한 패킷을, 그 조각들이 갑자기 신뢰할 수 있는 레이블을 요구하는 패킷으로 변형하게 된다.

따라서 이 경계는 두 면을 가진다: 송신자는 조각화를 금지함으로써만 의미를 철회할 수 있고, 경로는 그 결정을 존중해야 한다.

사라진 것은 우연히 생긴 권위였다

이 업데이트는 IPv4 ID를 중복 탐지에 사용하는 것을 금지했다. 진단적 상관 관계는 다른 증거를 찾아야 했다. 카운터 패턴으로 주소 공유 뒤의 호스트 수를 세는 것도 덜 신뢰할 수 있게 되었다. 원자적 ID는 또한 약속된 엔트로피에 기여하지 않았으며, 그 제약 없는 비트 자체가 은밀한 정보를 담을 수 있었다.

이것들은 우연한 호환성 손실이 아니었다. 소유권을 명확히 한 결과였다. 재조립이 식별자를 소유하는데, 그것이 살아있는 조각 집합들을 구분하지 않으면 동작할 수 없기 때문이다. 다른 메커니즘은 비트가 존재하고 편리하다는 이유만으로 권리를 취득할 수 없다.

필드는 고정 IPv4 헤더에 그대로 남았다. 하위 호환성은 패킷 배치가 아니라 기존 플래그에 따라 의미를 바꾸는 데서 나왔다. 오래된 와이어 포맷이 더 작은 계약을 얻은 것이다.

명세는 의미를 줄임으로써 개선될 수 있다

프로토콜 진화는 종종 용량 추가로 설명된다: 더 넓은 필드, 새로운 옵션, 더 강한 알고리즘. RFC 6864는 더 이상 지킬 수 없는 약속을 빼는 방식으로 IPv4를 개선했다.

이 수리는 패킷 번호의 할당을 중앙화하거나 네트워크에 더 큰 장부를 추적하도록 요구하지 않았다. 공유 의존성을 만들어낸 조건을 검토했다. 조각이 공존할 수 있는 곳에서는 고유성이 의무로 남았다. 조각화가 불가능한 곳에서는 지역적 선택이 돌아오고 원격 해석이 끝났다.

그것이 최소 명세의 내구적인 형태다. 공통 필드는 상호운용성에 필요한 의미만을 실어야 한다. 그렇지 않으면 우연한 관찰자들이 가용성을 권위로 바꾸고, 규모는 결국 그 허구를 드러낸다.

출처와 근거의 한계

닫힌 근거 집합은RFC 791,RFC 1122,RFC 4963,RFC 6864및RFC 7739이다. 이들은 원래의 재조립 역할, 이전의 호스트 요구사항, 고전송률 순환 위험, 원자/비원자 업데이트, 예측 가능한 ID 보안 분석을 확립한다. 이들은 현재의 벤더 행동, 현재의 조각화 비율, 보편적인 카운터 알고리즘 또는 모든 경로에 대한 단일 손상 임계값을 확립하지 않는다.