Repo Command

repo 의 insert, delete 및 기타 작업의 Command 는 Signed Interests 형식으로 인코딩됩니다.

/<repo-prefix>/<command-verb>/................./.........................................
                              \______  _______/ \__________________  ___________________/
                                     \/                            \/
                             RepoCommandParameter   Signed Interest additional components

repo command interest 의 의미는 다음과 같습니다:

name 의미 (semantics) 는 다음과 같은 컴포넌트로 정의됩니다:

  • <repo prefix>: 특정 prefix 인 repo 가 수신대기 (listening) 를 나타냅니다.
  • <command verb>: command name 을 나타냅니다.
  • <RepoCommandParameter>: repo command 의 parameters 를 나타냅니다.

다음 컴포넌트는 액세스 제어를 위한 singed interest 컴포넌트 입니다.

  • <timestamp>
  • <random-value>
  • <SignatureInfo>
  • <SignatureValue>

repo 의 prefix 인 /ucla/cs/repo/ 는 다음과 같이 정의됩니다:

/ucla/cs/repo/<command verb>/<RepoCommandParameter>/<timestamp>/<random-value>/<SignatureInfo>/<SignatureValue>

1. RepoCommandParameter

RepoCommandParameter ::= REPOCOMMANDPARAMETER-TYPE TLV-LENGTH
                           Name?
                           StartBlockId?
                           EndBlockId?
                           ProcessId?
                           InterestLifetime?
                           ForwardingHint?


Name                  ::= NAME-TYPE TLV-LENGTH NameComponent*
NameComponent         ::= NAME-COMPONENT-TYPE TLV-LENGTH BYTE+

StartBlockId          ::= STARTBLOCKID-TYPE TLV-LENGTH
                           nonNegativeInteger

EndBlockId            ::= ENDBLOCKID-TYPE TLV-LENGTH
                           nonNegativeInteger

ProcessId             ::= PROCESSID-TYPE TLV-LENGTH
                           nonNegativeInteger

InterestLifetime      ::= INTEREST-LIFETIME-TYPE TLV-LENGTH
                           nonNegativeInteger

ForwardingHint       ::= FORWARDING-HINT-TYPE TLV-LENGTH
                           Delegation+

1.1 StartBlockId, EndBlockId

StartBlockId 및 EndBlockId 는 세그먼트 데이터를 처리하는 데 사용됩니다. StartBlockId 는 첫 번째 세그먼트 번호를 나타내고 EndBlockId 는 마지막 세그먼트 번호를 나타냅니다. Repo 는 StartBlockId 와 EndBlockId 사이의 세그먼트 ID를 가진 세그먼트 데이터를 처리합니다. StartBlockId 가 없으면 repo 프로세스의 첫 번째 세그먼트 ID 는 0 입니다. EndBlockId 가 없는 시나리오는 Repo Insertion Command 섹션과 Repo Deletion Command 섹션의 특정 프로세스에 설명되어 있습니다.

1.2 Conflict of Selectors and StartBlockId, EndBlockId

Repo 는 RepoCommandParameter 에서 Selector 및 StartBlockId, EndBlockId 와 함께 명령을 처리 할 수 없습니다. RepoCommandParameter 가 둘 다 전달되면 Repo 는 이 명령을 무시하고 오류 코드 405를 반환합니다.

1.3 ProcessId

ProcessId 는 insert 및 delect 확인 명령에 사용되어 특정 insert 및 delete 프로세스를 나타냅니다. ProcessId 는 insert 및 delete 명령의 repo 명령 응답에 의해 가져오기 (fetch) 됩니다.

1.4 InterestLifetime

InterestLifetime 은 전송 된 interest 와 수신 된 데이터 간의 최대 대기 시간입니다. InterestLifetime 후에 수신 된 데이터가 없으면 interest 시간이 초과됩니다. InterestLifetime 은 선택 사항이며 지정되지 않으면 기본값이 설정됩니다.

1.5 ForwardingHint

ForwardingHint 요소는 Link Object 섹션에 정의된 name 위임 (delegation) 목록을 포함합니다. 각 위임은 요청 된 데이터 패킷이 위임 경로를 따라 interest 를 전달함으로써 검색 될 수 있음을 의미합니다. ForwardingHint 의 interest 에 대한 forwarding logic 의 특성은 별도의 문서로 정의됩니다.

2. Repo Command Response

Repo command 의 응답 (response) 은 Repo command interest 에 대한 응답 데이터 패킷입니다. 응답에는 명령 프로세스 및 기타 정보의 상태를 나타내는 상태 코드가 포함됩니다. RepoCommandResponse 라는 TLV 인코딩 블록은 데이터 패킷의 내용으로 인코딩됩니다.

RepoCommandResponse   ::= INSERTSTATUS-TYPE TLV-LENGTH
                           ProcessId?
                           StatusCode
                           StartBlockId?
                           EndBlockId?
                           InsertNum?
                           DeleteNum?

ProcessId            ::= PROCESSID-TYPE TLV-LENGTH
                            nonNegativeInteger 

StatusCode            ::= STATUSCODE-TYPE TLV-LENGTH
                            nonNegativeInteger    

StartBlockId          ::= STARTBLOCKID-TYPE TLV-LENGTH
                            nonNegativeInteger

EndBlockId            ::= ENDBLOCKID-TYPE TLV-LENGTH
                            nonNegativeInteger

InsertNum             ::= INSERTNUM-TYPE TLV-LENGTH
                            nonNegativeInteger

DeleteNum             ::= DELETENUM-TYPE TLV-LENGTH
                            nonNegativeInteger

2.1 Name

name 은 repo command 의 RepoCommandResponse 에 있는 name 을 나타냅니다.

2.2 ProcessId

ProcessId 는 command 프로세스 번호를 나타내기 위해 repo 가 생성하는 난수입니다. 클라이언트는 이 ProcessId 를 사용하여 특정 command 의 상태를 확인할 수 있습니다.

2.3 StatusCode

StatusCode 는 repo command 프로세스의 상태를 나타냅니다.

2.4 StartBlockId, EndBlockId

StartBlockId 및 EndBlockId 는 RepoCommandParameter 와 동일합니다. RepoCommandParameter 중 하나가 누락 된 경우 repo 는 현재 알려진 Id 로 설정합니다. 예를 들어 RepoCommandParameter 에 StartBlockId 가 없으면 응답의 StartBlockId 가 0 으로 설정됩니다. RepoCommandParameter에 EndBlockId 가 없으면 Repo 가 데이터 패킷에 FinalBlockId 를 가져올 때까지 EndBlockId 가 null 로 설정됩니다. 반환 된 데이터 패킷의 FinalBlockId 가 EndBlockId 보다 작으면 EndBlockId 가 FinalBlockId 로 설정됩니다.

2.5 InsertNum, DeleteNum

InsertNum 은 얼마나 많은 데이터 패킷이 repo 에 성공적으로 insert 되었는지 나타내는 지표이며 insertion status check 의 응답에 사용됩니다. DeleteNum 은 delete 명령 및 deletion check 명령에 대한 응답으로 사용됩니다. DeleteNum 은 얼마나 많은 데이터 패킷이 repo 에서 성공적으로 삭제되었는지 나타냅니다.

3. Repo TLV Type Encoding Number

Type Number
RepoCommandParameter 201
StartBlockId 204
EndBlockId 205
ProcessId 206
RepoCommandResponse 207
StatusCode 208
InsertNum 209
DeleteNum 210
InterestLifetime 214

4. Repo Trust Model

repo 의 신뢰 모델은 PKI 와 같은 repo 서비스를 배포하는 사람들에 따라 다릅니다. Repo 는 자체 verification policies 를 지정할 수 있으며 데이터 소비자는 자체 신뢰 앵커를 지정할 수 있습니다. NDN FAQ 는 어떻게 NDN trust managment 가 작동하는지 보여줍니다.