요약

  • RFC 3758은 범용 FORWARD TSN 메커니즘을 정의했고, 상위 계층 서비스가 송신자가 메시지를 포기해야 하는 시점을 정했습니다.
  • 시한 신뢰성은 만료 시점에 즉시 콜백을 요구하지 않았습니다. 구현은 메시지 처리 과정에서 편리한 지점에서 수명을 평가할 수 있었습니다.

시계가 0에 도달했습니다. 그러나 SCTP 스택은 나중에 확인해도 여전히 허용되었습니다.

이는 RFC 3758의 모순이 아닙니다. 이는 애플리케이션에 대한 서비스 약속과, 송신자가 포기하기로 선택한 메시지로부터 두 단말이 복구할 수 있게 하는 전송 메커니즘 사이에서 문서가 그린 경계선입니다.

2004년 표준 트랙 확장은 SCTP의 모든 데이터를 비신뢰성으로 만들지 않았습니다. 송신 애플리케이션이 메시지별로 데이터를 전송하거나 재전송하려는 노력을 얼마나 지속할지 지정할 수 있게 했습니다. 양 단말이 지원을 협상하면, 송신자는 메시지 추구를 중단하고 그 결정을 FORWARD TSN 청크로 신호할 수 있었습니다. 수신자는 누적 Transmission Sequence Number(TSN) 지점을 전진시키고, 순차 데이터의 경우 스트림 시퀀스 정보를 사용해 간격 너머의 전달로 이동할 수 있었습니다.

메커니즘과 결정은 의도적으로 분리되어 있었습니다. FORWARD TSN은 새로운 누적 TSN과, 해당되는 경우 각 스트림에서 건너뛴 가장 높은 순차 시퀀스 번호를 담았습니다. 수신자에게 어떤 서비스 규칙이 포기를 일으켰는지는 알려주지 않았습니다. 마감 시한, 재전송 상한 또는 미래의 다른 정책이 동일한 와이어 수준 복구 신호를 공유할 수 있었습니다. RFC 3758은 시한 신뢰성이라는 한 가지 예를 명시하고, 다른 서비스 정의가 자신의 매개변수와 포기 규칙을 정하도록 초대했습니다. 이후 RFC 7496은 제한 재전송과 우선순위 정책을 추가하여, 전진 메커니즘은 유지된 채 기준은 바뀔 수 있음을 보여주었습니다.

왜 중단하는 이유마다 특별한 패킷을 정의하지 않았을까요? 수신자의 역할이 더 좁기 때문입니다. 협상된 확장을 처리하고, 표시된 TSN 공간을 더 이상 누락되지 않은 것으로 표시하며, 간격 뒤에 갇힌 순차 데이터를 전달 가능하게 만들면 됩니다. 송신자의 애플리케이션이 신선도를 중시하는지, 재시도를 제한하는지, 송신 버퍼 공간을 확보하는지 알 필요가 없습니다. 애플리케이션 대면 정책은 서비스 경계에 속하고, 수신자 대면 결과는 와이어에 속합니다.

이 분리에는 대가가 있습니다. “만료됨”은 “그 순간에 포기됨”과 동일하지 않습니다. 시한 신뢰성 규칙은 송신자가 TSN을 할당하기 전에, 그리고 TSN이 할당된 메시지를 전송하거나 재전송하기 전에 수명을 확인하도록 요구합니다. 그러나 RFC 3758은 구현이 다른 편리한 기회에 수명을 평가할 수 있음을 명시적으로 허용합니다. 메시지마다 별도 타이머가 필요 없다고 말하며, 만료 시점의 즉시 확인을 요구하지 않습니다. 스택은 이후 처리 이벤트에서 만료를 발견할 수 있습니다. 따라서 RFC의 서비스 정의는 평가가 이루어진 시점부터 메시지가 더 이상 전송 자격이 없음을 기술하는 것이지, 평가 자체에 대한 엄격한 실시간 스케줄링 보장이 아닙니다.

위상 경계도 있습니다. 메시지가 TSN을 받기 전에 만료되면, 송신자는 보고할 시퀀스 간격을 만들지 않고 포기할 수 있습니다. TSN이 이미 할당되었다면, 송신자는 데이터를 포기 표시하고 지정된 혼잡 회계 규칙을 적용하며, 피어가 기다리기를 멈추도록 FORWARD TSN이 필요할 수 있습니다. 분할된 메시지의 한 조각이 포기되면, RFC 3758은 해당 메시지의 나머지 조각들도 포기하도록 요구합니다. 시퀀스 공간은 연결 전체에 걸쳐 있지만 순차 전달은 스트림별입니다. 청크는 누락된 페이로드가 도착한 것처럼 꾸지 않으면서 두 장부가 모두 전진할 만큼 충분한 정보를 담습니다.

이것은 전달 영수증이 아닙니다. FORWARD TSN은 송신자가 특정 시퀀스 번호를 더 이상 추구하지 않을 것이며 피어에게 전진을 요청한다는 뜻입니다. 폐기된 메시지가 수신자에게 도달했다는 것, 다음 메시지가 애플리케이션에 수용되었다는 것, 마감이 종단 간에 지켜졌다는 것을 증명하지 않습니다. 부분 신뢰성이 혼잡 제어를 폐지하는 것도 아닙니다. 포기된 데이터는 혼잡 창 크레딧을 받지 못하고, 원래 발생했을 재전송 이벤트는 여전히 혼잡 결과를 갖습니다. 신선도 정책은 오래된 콘텐츠에 낭비되는 노력을 줄일 수 있지만, 전송 진행을 애플리케이션 성공으로 바꿀 수는 없습니다.

이 확장은 또한 협상되어야 했습니다. 지원은 INIT과 INIT-ACK에서 신호됩니다. 피어가 FORWARD TSN을 지원하지 않으면 연결은 이를 사용할 수 없습니다. 부분 신뢰성을 요구하는 상위 계층은 그 사실을 알아내거나 다른 방법을 선택해야 합니다. “내 스택에 그 기능이 있다”로는 충분하지 않습니다. 연결 수준 능력은 메시지별 정책 및 이후의 수신자나 애플리케이션 결과와 별개의 전제 조건입니다.

결국 RFC 3758은 신뢰성에 대해 하나의 보편적 의미를 표준화한 것이 아니라 유용한 역할 분담을 표준화했습니다. 와이어는 시퀀스 공간을 건너뛰는 한정된 지시를 전달하고, 애플리케이션 대면 서비스는 특정 메시지가 더 이상 재시도할 가치가 없다고 판단되는 시점을 결정합니다. 이는 서로 연관된 결정이지만, 동일한 시계, 동일한 인터페이스, 동일한 증명은 아닙니다.

출처