Watched Prefix Insertion Protocol

Watched Prefix는 Repo insert 를 위한 새로운 프로토콜입니다. 이 프로토콜을 사용하여 repo 는 동일한 prefix 로 데이터를 요청하도록 interest 를 계속 전송합니다. 데이터 패킷이 수신되면 repo 는 수신된 데이터를 제외하고 새 데이터를 요청하도록 selector (대부분의 경우 exclude selector) 를 업데이트합니다. Repo 는 전송된 interest 의 총량이 특정 숫자 또는 timeout 에 도달하지 못하도록하는 interest 가 표시 될 때까지 prefix 시청을 중단합니다.

1. Basic operations

1.1 Start watched prefix insertion

Command verb: watch start

name 은 Repo Command 포멧을 따릅니다. 예를 들어, <repo prefix>/ucla/cs/repo 로 지정하면 다음과 같습니다:

/ucla/cs/repo/watch/start/<RepoCommandParameter>/<timestamp>/<random-value>/<SignatureInfo>/<SignatureValue>

이 명령은 다음 parameter 를 사용합니다.

  • Name (required)
  • InterestLifetime (optional)
  • MaxInterestNum (optional)
  • WatchTimeout (optional)
  • Selectors (optional)

parameter 에 대한 세부설명:

  • Name: watched prefix
  • InterestLifetime: 전송 interest 와 수신 데이터 간의 최대 대기 시간; 지속시간이 interest 시간 초과보다 크면 동일한 interest 가 다시 전송; interest timeout 내에 데이터가 수신되면 interest selector 가 업데이트되어 새로운 데이터를 요청; 지정하지 않으면 기본값 (4000 밀리 초) 이 설정
  • MaxInterestNum: 전송할 수 있는 총 interest 의 최대 값; interest 의 총 수가이 한도에 도달하면 프로세스 중단; 지정하지 않으면 MaxInterestNum 은 0 으로 설정되고 무한대를 의미
  • WatchTimeout: 프로세스의 지속 시간; Repo 는 시간이 끝날 때까지 prefix 를 계속 watching; WatchTimeout 은 0 으로 설정되며 프로세스는 영원히 계속 실행
  • Selectors: 수신된 데이터를 제외하고 새 데이터를 요청하는 데 사용

1.2 Watch status check

Command verb: watch check

watched prefix 진행 도중 requester 는 진행 상태를 확인하기 위해 watch status check command 를 보낼 수 있습니다. watch check command 는 Repo Command 입니다. watch check command 의 의미는 다음과 같습니다:

/ucla/cs/repo/watch/check/<RepoCommandParameter>/<timestamp>/<random-value>/<SignatureInfo>/<SignatureValue>

이 command 는 다음 parameter 를 사용합니다:

  • Name (required)

parameter 에 대한 자세한 설명:

  • Name 은 watched prefix 입니다.

1.3 Stop watched prefix insertion

Command verb: watch stop

watched prefix 진행중에 requester 는 watch stop prefix insert 를 중지하기 위해 watch stop command 를 보낼 수 있습니다. stop command 은 Repo Command 입니다.

/ucla/cs/repo/watch/stop/<RepoCommandParameter>/<timestamp>/<random-value>/<SignatureInfo>/<SignatureValue>

command 는 다음 parameter 를 사용합니다:

  • Name (required)

parameter 에 대한 자세한 설명:

  • Name: watched prefix

2. RepoCommandResponse

이 watch status 데이터 객체는 watch 명령과 watchCheck 명령의 응답 데이터 객체가 될 수 있습니다. repo command 응답 포멧을 따릅니다.

Response 는 두부분이 있습니다: InsertNumber 는 watched prefix 아래의 데이터 패킷이 Repo 에 몇 개 insert 되었는지 나타냅니다; StatusCode 는 프로세스 상태를 나타냅니다.

StatusCode 정의:

StatusCode Description
100 command 는 OK; watch the prefix 시작
101 Watched Prefix insert 중지
300 watched prefix Insert 진행중임
401 watch 명령 또는 watchCheck 명령이 무효화 (invalidated)
402 BlockId 가 있음. BlockId 는 프로토콜에서 지원되지 않음
403 Malformed Command
404 프로세스가 진행되고 있지 않음

3. Protocol Process

3.1 Repo watch start command process:

  1. command 유효성 검사 (validate) 시작; 유효성이 확인되면 3 단계로 이동, 그렇지 않으면 2 단계로 이동
  2. validation failure response; 이 단계를 중단하면 프로세스가 종료. (StatusCode: 401)
  3. Check parameters; interest 추출 할 수 없는 경우 부정적 응답 (StatusCode: 403) 을 보내고 프로세스 중지
  4. BlockId 가 있으면 부정적 응답 (StatusCode: 402) 을 전송하고 프로세스 중지
  5. interest 를 구성하려면 interest command 의 parameter 를 사용; Rightmost Child Selector 설정
  6. interest 보내고 timer 시작; 전송된 interest + 1 (초기 값은 0)
  7. 데이터를 받은 경우 8 단계로 이동, 시간이 초과되면 17 단계로 이동
  8. 데이터의 유효성이 확인되면 9 단계로 이동, 그렇지 않으면 15 단계로 이동
  9. watched prefix insert 실행 중인지 확인; 그렇지 않으면 프로세스 종료
  10. process times out(exceed watch timeout) 되거나 전송된 interest 의 총 수가 제한에 도달하면 11 단계로 이동, 그렇지 않으면 12 단계로 이동
  11. 모든 variables (전송된 interest 수, watch timeout, interest lifetime) 를 지우고 (단계를 중단) 프로세스 종료
  12. 데이터를 repo 에 store
  13. Update selector 및 수신된 항목을 min 에서 제외하고 업데이트된 selector 를 사용하여 새로운 interest 를 생성
  14. 신규 interest 와 전송된 interest 수에 1 을 더한 다음 7 단계로 이동
  15. 9-11 단계를 반복하고 12 단계를 건너뜀
  16. selector 를 업데이트 하고 수신 된 데이터만 제외 (name 이 작은 다른 데이터가 충족 될 수 있으므로); 14 단계로 이동
  17. 9-11 단계를 반복하고 12 단계를 건너뜀
  18. interest 를 보내고 전송된 interest 수에 1 을 더한 다음 7 단계로 이동

3.2 Repo watch check command process:

  1. check command validate 시작; 유효성이 확인되면 3 단계로 이동하고, 그렇지 않으면 2 단계로 이동
  2. validation failure 를 나타내는 응답을 보내고 이 단계를 중단하면 프로세스 종료 (StatusCode: 401)
  3. Check parameter; interest 에서 추출 할 수 없거나 checked 할 name 이 없는 경우 부정적인 응답 (StatusCode: 403) 을 보냄
  4. 해당 프로세스가 존재하는지 확인; 그렇다면 5 단계로 이동, 그렇지 않은 경우 부정 응답을 보냄 (StatusCode: 404)
  5. processId 를 사용하여 응답을 찾고 응답을 되돌려 보냄

3.3 Repo watch stop command process:

  1. stop command validate 시작; 유효성이 확인되면 3 단계로 이동, 그렇지 않으면 2 단계로 이동
  2. validation failure 를 나타내는 응답을 보내고 이 단계를 중단하면 프로세스 종료 (StatusCode: 401)
  3. Check parameter; interest 추출 할 수 없는 경우 부정 응답을 보냄 (StatusCode: 403)
  4. 프로세스를 중지하고 부정적인 응답을 보냄 (StatusCode: 101)

Basic Repo Insertion Protocol

기본 Repo insert 프로토콜은 Repo Command 를 사용합니다.

Repo insert command 는 Repo 가 내용을 검색 (retrieve) 하고 저장 (store) 하도록 요청합니다. 이 command interest 는 signed interest 이며 repo 에 의해 정의된 액세스 제어 정책으로 유효성 (validate) 이 검사됩니다. Interest 유효성이 확인되고 데이터의 name 이 repo 에 존재하지 않는 경우 저장소는 OK status 가 포함된 데이터 객체로 응답하고 insert 데이터를 가져올 interest 를 보내기 시작합니다.

세그먼트 데이터 insert 는 insert 프로토콜에서 지원됩니다. 분할 정보는 RepoCommandParameter 에 정의됩니다. 콘텐츠가 세그먼트화 되면 최종 세그먼트 ID 가 블록에 인코딩 됩니다.

Forwarding hint 는 대규모 NDN 네트워크에서 mobility 지원을 위한 내용입니다. Repo 는 insert 프로토콜에서 Forwarding hint 메소드를 지원합니다. 정기적인 interest 가 라우팅 불가 (unroutable) 면 사용자는 목적지 범위 (destination region) 가 포함된 링크 객체를 사용하여 interest 를 보냅니다. interest 가 사용자 범위 (region) 에지 (edge) 에 도달하면 라우터는 위임 정보를 선택합니다. 중계 라우터 (Intermediate router) 는 이 위임을 통해 interest 를 전달합니다. interest 가 생산자 (producer) 범위 (region) 에지 (edge) 에 도달하면 라우터는 원래 name 으로 interest 를 전달합니다.

1. Basic operations

1.1 Insert data

Command verb: insert

name semantics 는 insert 라는 repo command 포멧을 따릅니다. 예를들어 <repo prefix>/ucla/cs/repo 로 지정하면 다음과 같습니다:

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

1.2 Insertion status check

Command verb: insert check

insert 진행 중에 요청자 (requester) 는 insert 진행 상태를 확인하기 위해 insert status check command 를 보낼 수 있습니다. 이 status check command 는 signed interest 형식입니다. insert status check 명령의 의미는 다음과 같습니다:

insert check 와 같습니다. 예:

/ucla/cs/repo/insert check/<RepoCommandParameter>/<timestamp>/<random-value>/<SignatureInfo>/<SignatureValue>

2. Formats

2.1 RepoCommandParameter

insert 및 insert check command 의 RepoCommandParameter 는 Repo Command 페이지에 있습니다. Name, StartBlockId, EndBlockId 는 insert 에 사용됩니다. Name과 ProcessId 는 insert check command 에 사용됩니다.

insert command 에서 Name 은 repo 가 가져올 (fetch) 데이터의 name 또는 prefix 를 나타냅니다. StartBlockId 또는 EndBlockId 가 설정된 경우 Repo 는 StartBlockId 와 EndBlockId 사이의 세그먼트 번호가 있는 세그먼트 데이터를 검색합니다.

insert check command 에서 Name 은 가져올 (fetch) Repo 에 대한 데이터의 name 또는 prefix 를 나타냅니다. ProcessId 는 지정된 프로세스를 나타내기 위해 RepoCommandResponse 에 의해 설정됩니다.

2.2 Insertion status response

이 insert status 데이터 오브젝트는 insert command 와 insert check command 모두의 응답 데이터 오브젝트 일 수 있습니다. repo command response 포멧을 따릅니다.

StatusCode 는 insert status 를 나타냅니다. InsertNum 은 repo interest 의 데이터 수를 나타냅니다. StartBlockId 및 EndBlockId 는 insert 된 데이터의 시작 및 끝 세그먼트 ID 입니다. InsertNum 은 insert 된 데이터 세그먼트의 수 입니다. ProcessId 는 프로세스의 ID 로 repo 에 의해 생성된 임의의 번호를 나타냅니다.

insert command 의 경우 아래 정의에 따라 상태 코드가 설정되며 insert command 에 따라 StartBlockId 및 EndBlockId 가 설정됩니다. RepoCommandParameter 의 StartBlockId 가 누락되면 응답으로 0 이 설정됩니다. EndBlockId 가 누락되면 설정되지 않습니다.

insert check command 의 경우 아래의 정의에 따라 상태 코드가 설정되며 StartBlockId 와 EndBlockId 는 Repo 가 사용하는 StartBlockId 와 EndBlockId 에 따라 설정되고 InsertNum 은 insert 진행에 따라 설정됩니다. ProcessId 는 확인된 프로세스의 ID 에 따라 설정됩니다. EndBlockId 가 결정되지 않은 경우이 EndBlockId 는 응답으로 설정되지 않습니다.

StatusCode 정의:

StatusCode Description
100 command 는 OK, 데이터를 가져올 (fetch) 수 있습니다
200 모든 데이터가 insert 되었습니다
300 insert 작업이 진행 중입니다
401 insert command 또는 insert check command 가 무효화되었습니다
403 잘못된 (Malformed) command 입니다
404 insert 작업이 진행 중입니다
405 EndBlockId Missing Timeout

2.3 EndBlockId Missing Timeout

StartBlockId 가 있지만 EndBlockId 가 없고 반환 데이터 패킷에 FinalBlockId 가 없으면 Repo 는 데이터를 계속 가져옵 (fetch) 니다. 이 경우를 막기 위해 EndBlockId missing timeout 이 설정됩니다. Repo 는 StartBlockId 가 있지만 EndBlockId 가없는 경우 타이머를 시작합니다. Timeout 이 발생하면 Repo 는 데이터를 가져 (fetch) 와서 insert 프로세스를 저장 (store) 하고 종료합니다. insert 프로세스 중에 insert check command 가 도착하면 타이머 시간은 0 으로 설정됩니다. FinalBlockId 가 포함 된 데이터 패킷이 도착하면 timeout 이해제됩니다.

3. Protocol Process

  1. command 의 authorize 시작; 승인 실패가 나지 않으면 3 번으로 이동
  2. 승인 실패인 경우 authorization failure 를 나타내는 응답을 보내고 요청을 중단하고 insert process (StatusCode: 401) 적용
  3. StartBlockId 및 EndBlockId 가 모두 누락된 경우 7 번으로 이동
  4. StartBlockId 와 EndBlockId 가 모두 있고 StartBlockId 가 EndBlockId 보다 작거나 같으면 7 번으로 이동
  5. malformed command 인 응답을 보내고 단계를 중단하고 insert process (StatusCode: 403) 적용
  6. 승인 완료까지 대기
  7. 인증이 실패하면 2 번 (StatusCode : 401) 으로 이동
  8. insert 진행중임을 나타내는 응답 전송 (StatusCode : 200)
  9. StartBlockId 또는 EndBlockId 가 있는 경우 16 번으로 이동
  10. insert command 에서 Name 검색 (retrieve) 시작
  11. 검색 완료까지 대기
  12. 검색에 실패하면 26 번으로 이동
  13. 검색된 데이터 패킷 저장
  14. 단계를 중단하고 insert 프로세스 종료
  15. StartBlockId 가 없으면 StartBlockId 를 0으로 설정; EndBlockId 가 누락 된 경우 데이터 패킷에 FinalBlockId 가 표시되지 않으면 EndBlockId 가 누락; EndBlockId Missing Timeout timer 시작
  16. Name 에 StartBlockId 추가
  17. Name 검색 (retrieve) 시작
  18. 검색 완료까지 대기
  19. 검색에 실패하면 26 번으로 이동
  20. 검색된 (retrieved) 데이터 패킷 저장 (store)
  21. 데이터 패킷에 FinalBlockId 가 포함되어 있고 FinalBlockId 가 EndBlockId 보다 작거나 EndBlockId 가 없는 경우 EndBlockId 를 FinalBlockId 로 설정
  22. Name 의 마지막 구성 요소가 EndBlockId 보다 크거나 같으면이 단계를 중단하고 insert 프로세스 종료
  23. Name의 마지막 컴포넌트를 증가
  24. 17 번으로 이동
  25. 이 데이터로 2 번 중복하여 데이터 검색; 이러한 2 검색 모두 실패하면 단계를 중단; 성공하면 21 번으로 이동
  26. 이 데이터로 2 번 중복하여 데이터 검색; 이러한 2 검색 모두 실패하면 단계를 중단; 성공하면 14 번으로 이동

EndBlockId Missing Timeout 타이머가 시작되면 Repo 는 17 ~ 26 단계에서 타이머를 모니터링합니다. Timeout 이 발생하면 즉시 insert command process 를 중단합니다.

3.1 Repo insert check command progress

구현은 insert 진행 상황에 대한 상태 알림 (notification) 을 게시 (publish) 할 수 있습니다. status check 프로세스는 다음과 같습니다.

  1. insert status command 에 대한 authorize 시작; 실패하면 2번으로, 성공하면 3 번으로 이동
  2. 승인 실패인 경우 authorization failure 를 나타내는 응답을 보내고 요청을 중단하고 insert process (StatusCode: 401) 적용
  3. command 에서 데이터 이름으로 insert 진행 점검; 4 번 또는 5 번으로 이동
  4. status code 가 있는 response status; 검사 (check) 프로세스 종료 (StatusCode: 404)
  5. insert 상태 확인; insert 진행 상태 반환; EndBlockId Missing Timeout 타이머가 실행중인 경우 타이머를 0 으로 설정; 검사 (check) 프로세스 중단 (StatusCode : 300)

3.2 Protocol diagram:

Requester                     Repo                          Data producer
    |                           |                                 |
    |                           |                                 |
  +---+  Insert command       +---+                               |
  |   | --------------------> |   |                               |
  +---+                       |   |                               |
    |                         |   |                               |
  +---+   Confirm start       |   |                               |
  |   | <==================== |   |                               |
  +---+   Reject command      +---+                               |
    |     (with status code)    |                                 |
    |                         +---+     Interest for Data       +---+
    |                         |   | --------------------------> |   |
    |                         +---+                             |   |
    |                           |                               |   |
    |                         +---+       Data segment          |   |
    |                         |   | <========================== |   |
    |                         +---+                             +---+
    |                           |                                 |
    |                           ~                                 ~
    |                           ~                                 ~
    |                           |                                 |
    |                         +---+     Interest for Data       +---+
    |                         |   | --------------------------> |   |
    |                         +---+                             |   |
    |                           |                               |   |
    |                         +---+       Data segment          |   |
    |                         |   | <========================== |   |
    |                         +---+                             +---+
    |                           |                                 |
    |                           |                                 |
    |                           ~                                 ~
    |                           ~                                 ~
    |                           |                                 |
    |                           |                                 |
    |                           |                                 |
  +---+   Status interest     +---+                               |
  |   | --------------------> |   |                               |
  +---+                       |   |                               |
    |                         |   |                               |
  +---+    Status response    |   |                               |
  |   | <==================== |   |                               |
  +---+                       +---+                               |
    |                           |                                 |
    |                           |                                 |

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 가 작동하는지 보여줍니다.


Repo Protocol Specification

Repo 는 콘텐츠를 보존하고 보유한 콘텐츠를 요청하는 interest 에 응답하는 것으로 네트워크를 지원합니다. 어떤 노드에서도 Repo 가 존재할 수 있는데 특히 해당 노드의 응용 프로그램이 데이터를 보존해야 하는 경우 권장됩니다. NDN repo protocol 이란 repo 에서 데이터 객체 (Data Object) 에 대한 read, insert, delete 사양 (specification) 입니다.

Repo 의미는 NDN 의 name 끝에 서명된 객체 (signed components) Signed Interests 와 basic common semantic 을 기반으로 합니다.

데이터 객체의 insert 및 delete 를 포함하는 repo 의 일부 동작이 요구 될 때 command interest 가 전송됩니다. command interest 는 insert 및 delete 명령으로서의 interest 이며 액세스 제어를 위한 command interest 형식으로 서명됩니다. repo 는 데이터 객체를 사용하여 command 에 응답합니다.

repo protocol 은 데이터 패킷 검색 및 관리의 두 부분으로 분류할 수 있습니다. Repo-ng 는 다양항 방식으로 데이터를 insert 하고 delete 하는 일련의 repo 관리 프로토콜 (management protocol) 을 구현하고 있습니다.

1. Repo Management Protocols

아래 내용은 repo-ng 포스팅의 Repo 관리 프로토콜의 내용입니다.

  • Repo Command 는 repo 에 데이터를 insert 하거나 remove 할 수 있는 요청 및 응답에 대한 포멧, 이러한 command 를 서명하고 인증하는 방법을 정의합니다.
  • Basic Repo Insertion Protocol 은 데이터 패킷의 insert 형식을 정의합니다. repo-ng 는 기본 프로토콜 외에도 몇가지 다른 insert 프로토콜을 구현할 수 있습니다.
  • Repo Deletion Protocol 은 특정 prefix 아래에서 데이터 패킷에 대한 delete 포멧을 정의합니다.

2. Data packet retrieval from repo

Repo 는 보유하고있는 데이터 객체의 prefix 를 NDN forwarding daemon 에 등록하고 Repo 는 해당 prefix 로 응답합니다.

standard interest 는 repo 에서 콘텐츠를 가지고 오는데 사용됩니다. NFD 에 등록된 prefix 와 interest 의 name 이 일치하면 Repo 가 응답합니다. repo 의 콘텐츠가 interest 와 일치하면 데이터 객체로 응답합니다. interest 가 일치하지 않으면 응답하지 않습니다.

프로토콜은 다음과 같습니다.

일치하는 데이터 객체가 있는 경우:

Requester                     Repo
    |                           |
    |                           |
    |         Interest          |
 t1 |-------------------------->|
    |                           |
    |        Data Object        |
 t2 |<==========================|
    |                           |
    |                           |
    |                           |

일치하는 데이터 객체가 없는 경우:

Requester                     Repo
    |                           |
    |                           |
    |         Interest          |
 t1 |-------------------------->|
    |                           |
    |                           |
    |                           |

2.1 About Freshness

repo 로 freshness (신선도?) 를 처리하는 솔루션은 명확하게 정의되지 않았으므로 생산자 (producer) 는 repo 에 콘텐츠를 담을 때 freshness 를 관리 (쓸모없는 콘텐츠 삭제) 하여야 합니다. MustBeFresh selector 는 repo 에서 콘텐츠를 가지고 오거나 (fetching), repo command 를 처리할 때 무시 (ignored) 됩니다.


Repo protocol and repo-ng

1. Repo protocol

Repo protocol 은 NDN 영구 스토리지 노드 (persistent storage node) 로서의 의미 및 운영 프로세스를 의미합니다. NDN repo 의 동작은 NDN Repository 노드에서 데이터 객체 (Data Object) 에 대한 read, insert, delete 를 수행하는 것 입니다.

Repo protocol 은 운영 및 제어를 위한 Repo Protocol Specification 을 준수하며 아래의 Repo 관리 프로토콜을 포함합니다:

  • Repo Command 는 repo 에 데이터를 insert 하거나 remove 할 수 있는 요청 및 응답에 대한 포멧, 이러한 command 를 서명하고 인증하는 방법을 정의합니다.
  • Basic Repo Insertion Protocol 은 데이터 패킷의 insert 형식을 정의합니다. repo-ng 는 기본 프로토콜 외에도 몇가지 다른 insert 프로토콜을 구현할 수 있습니다.
  • Repo Deletion Protocol 은 특정 prefix 의 데이터 패킷에 대한 delete 포멧을 정의합니다.

2. repo-ng

repo-ng (repo-new generation) 는 Repo protocol 을 준수하는 NDN 영구(NDN persistent) 인-네트워크 스토리지 (in-network storage) 의 구현체를 의미합니다. NDN 클라이언트 라이브러리로 ndn-cxx 를 사용하고 기본 스토리지로 sqlite3 데이터베이스를 사용합니다.

2.1 platform and libraries

2.2 specific design

2.3 current supported functions

프로토콜의 대부분은 repo-ng 에서 지원됩니다. 하지만 아래의 사양은 현재 버전에서 지원되지 않습니다.

  • delete command 에서, RepoCommandParameter 의 EndBlockId 가 null 인 경우 repo 는 StartBlockId 의 모든 세그먼트 데이터에 응답 할 수 없습니다.
  • delete 진행 과정을 체크하는 command 는 지원하지 않습니다.

command 검증 (validation) 및 액세스 제어 (access control) 에 대한 신뢰 모델 (Trust model) 이 설계되지 않았습니다. 모든 command 는 현재 버전에서 유효하며 통과할 수 있습니다.

2.4 user experience