NDN - Basic-Repo-Insertion-Protocol
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
- command 의 authorize 시작; 승인 실패가 나지 않으면 3 번으로 이동
- 승인 실패인 경우 authorization failure 를 나타내는 응답을 보내고 요청을 중단하고 insert process (StatusCode: 401) 적용
- StartBlockId 및 EndBlockId 가 모두 누락된 경우 7 번으로 이동
- StartBlockId 와 EndBlockId 가 모두 있고 StartBlockId 가 EndBlockId 보다 작거나 같으면 7 번으로 이동
- malformed command 인 응답을 보내고 단계를 중단하고 insert process (StatusCode: 403) 적용
- 승인 완료까지 대기
- 인증이 실패하면 2 번 (StatusCode : 401) 으로 이동
- insert 진행중임을 나타내는 응답 전송 (StatusCode : 200)
- StartBlockId 또는 EndBlockId 가 있는 경우 16 번으로 이동
- insert command 에서 Name 검색 (retrieve) 시작
- 검색 완료까지 대기
- 검색에 실패하면 26 번으로 이동
- 검색된 데이터 패킷 저장
- 단계를 중단하고 insert 프로세스 종료
- StartBlockId 가 없으면 StartBlockId 를 0으로 설정; EndBlockId 가 누락 된 경우 데이터 패킷에 FinalBlockId 가 표시되지 않으면 EndBlockId 가 누락; EndBlockId Missing Timeout timer 시작
- Name 에 StartBlockId 추가
- Name 검색 (retrieve) 시작
- 검색 완료까지 대기
- 검색에 실패하면 26 번으로 이동
- 검색된 (retrieved) 데이터 패킷 저장 (store)
- 데이터 패킷에 FinalBlockId 가 포함되어 있고 FinalBlockId 가 EndBlockId 보다 작거나 EndBlockId 가 없는 경우 EndBlockId 를 FinalBlockId 로 설정
- Name 의 마지막 구성 요소가 EndBlockId 보다 크거나 같으면이 단계를 중단하고 insert 프로세스 종료
- Name의 마지막 컴포넌트를 증가
- 17 번으로 이동
- 이 데이터로 2 번 중복하여 데이터 검색; 이러한 2 검색 모두 실패하면 단계를 중단; 성공하면 21 번으로 이동
- 이 데이터로 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 프로세스는 다음과 같습니다.
- insert status command 에 대한 authorize 시작; 실패하면 2번으로, 성공하면 3 번으로 이동
- 승인 실패인 경우 authorization failure 를 나타내는 응답을 보내고 요청을 중단하고 insert process (StatusCode: 401) 적용
- command 에서 데이터 이름으로 insert 진행 점검; 4 번 또는 5 번으로 이동
- status code 가 있는 response status; 검사 (check) 프로세스 종료 (StatusCode: 404)
- 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 | | |
| | <==================== | | |
+---+ +---+ |
| | |
| | |