- 파일과 자원 공유 프로토콜의 힘
- 파일과 자원 공유의 궁극적인 목표는 파일 위치의 세부사항과 파일을 이동하는 데 필요한 명령까지도 감추는 것
- 네트워크의 자원을 로컬 컴퓨터의 자원과 똑같은 방법으로 사용할 수 있음
- 파일과 자원 공유 프로토콜의 구성요소
- 파일 시스템 모델과 구조
- 공유할 자원과 파일을 정의하고 가상 파일 시스템의 동작을 기술하는 절차
- 자원 접근 방법
- 사용자가 자신의 로컬 호스트에 원격 자원을 부착하거나 분리하는 절차
- 동작 집합
- 사용자가 다른 호스트상의 파일에 수행하는 다양한 작업을 달성하기 위한 동작의 집합
- 메시징 프로토콜
- 수행할 작업, 상태 정보 등을 담고 있는 메시지 형식과 이런 메시지의 장비 간 교환을 위한 프로토콜
- 관리도구
- 프로토콜의 동작을 지원하고 다른 요소들을 연결해주는 데 필요한 기타 기능
NFS 설계 목표, 버전, 표준
- NFS의 설계 목표
- NFS는 로컬과 원격 파일의 구별을 제거하겠다는 목표하에 특별히 설계됨
- 속도 때문에 안정적인 TCP가 아닌 UDP를 사용
- NFS는 클라이언트 호스트가 원격 서버의 파일에 마치 로컬 파일처럼 접근할 수 있게 하기 위해 개발됐으며 성능, 단순성, 제조업체 간 호환성을 주요 목표로 설계됨
- NFS의 버전과 표준
- 1989년 RFC 1094, "NFS: Network File System Protocol Specification"에서 NFSv2는 공식적인 TCP/IP 표준이 됨
- 1995년 RFC 1813, NFSv3
- 2000년 RFC 3010, NFSv4
- 2003년 4월 RFC 3530, "NFS Version 4 Protocol"에 의해서 갱신
NFS의 구조와 구성 요소
- NFS의 주요 구성요소
- 원격 절차 호출(RPC, Remote Procedure Call)
- 외부 데이터 표현방식(XDR, External Data Representation)
- 데이터 타입을 일관적인 방법으로 정의하게 해주는 설명 언어
- XDR은 개념적으로 프리젠테이션 계층에 존재
- NFS 절차와 동작
- NFS의 실질적인 기능은 개념적으로 OSI 모델의 계층 7 역할을 하는 절차와 동작의 형태로 구현된다.
- NFS의 기타 중요한 기능
- 마운트 프로토콜
- 파일 열기와 닫기를 위해 마운트 프로토콜이라는 별도의 프로토콜을 사용
- 네트워크상의 파일 또는 다른 자원에 접근하기 위해서는 우선 마운트 프로토콜을 사용해서 마운팅해야 한다.
- NFS 파일 시스템 모델
- 유닉스 파일 시스템 모델에 기반하지만 유닉스 운영체제에만 특정적인 것음 아님
- 보안
- 버전 2와 3은 제한적인 보안 기능만을 포함하며 다양한 동작을 위한 권한을 확인하기 위해 유닉스 방식의 인증을 사용
외부 데이터 표현 방식(XDR) 표준을 사용한 NFS 데이터 정의
전혀 다른 머신이라 하더라도 데이터를 공유하게 해주는 좀 더 일반적인 방법이 필요
-> 결국 NFS 개발자들은 보편적인 데이터 기술 언어를 다룰 수 있도록 NFS를 정의
-> 이 언어가 XDR
- 보편적인 데이터 교환방법: XDR
- XDR의 기본 아이디어는 기반 시스템의 특성에 구애 받지 않는 데이터 교환을 위해 다른 프로토콜에서도 사용된다.
- 외부 데이터 표현 방식(XDR) 표준의 목적은 일반적인 데이터 유형을 표현하기 위해 공통적인 방법을 정의하는 것이다.
- 이 보편적인 표현 방식을 사용하면 각 장비는 내부적 파일 시스템에 관계없이 데이터를 교환할 수 있다.
- 이를 통해 전혀 다른 하드웨어와 소프트웨어 플랫폼을 사용해 구현한 클라이언트와 서버간에 파일 데이터 교환이 가능해졌다.
- XDR 데이터 유형
데이터 유형 코드 | 크기(바이트) | 설명 |
int | 4 | 부호있는 정수 32비트 부호가 있는 정수 -2,147,483,648 ~ +2,147,483,647 까지 |
unsigned int | 4 | 부호 없는 정수 |
enum | 4 | 열거형 |
bool | 4 | 부울형 |
hyper | 8 | 부호 있는 초과 정수 64비트 부호 있는 정수 |
unsigned hyper | 8 | 부호 없는 초과 정수 |
float | 4 | 실수(부동 소수점 수) 32비트 부호가 있는 실수 - 1비트 부호 - 8비트 지수 - 23비트 가수 |
double | 8 | 2배 정밀도의 부동 소수점 수 - 1비트 부호 - 11비트 지수 - 52비트 가수 |
quadruple | 16 | 4배 정밀도의 부동 소수점 수 - 1비트 부호 - 15비트 지수 - 112비트 가수 |
opaque | 가변 | 불투명 데이터 XDR을 사용하는 특정한 표현이 없이 장비 간에 전달되는 데이터 |
string | 가변 | 문자열 |
(array) | 가변 | 배열 |
struct | 가변 | 구조체 |
union | 가변 | 식별자가 있는 공용체 |
void | 0 | null 데이터 유형 |
const | 0 | 상수 다른 표현에 사용된 상수값 |
원격 절차 호출(RPC)을 이용한 NFS의 클라이언트/서버 동작
- RPC의 동작과 전송 프로토콜의 사용
- NFS는 다른 포르토콜과는 달리 전용 메시지 형식을 사용하지 않는다.
- 대신 클라이언트와 서버는 파일 동작과 요청과 데이터를 교환하기 위해 원격 절차 호출(RPC) 프로토콜을 사용한다.
- NFS에서 클라이언트와 서버의 책임
- NFS 서버는 멍청하고 NFS 클라이언트는 똑똑하다
- UDP를 사용하며, 클라이언트가 열심히...
- 클라이언트와 서버의 캐싱
- NFS는 상태를 유지하지 않는(stateless) 프로토콜이며 영리한 클라이언트와 상대적으로 바보 같은 서버를 가진다.
- 서버는 요청에 응답만 하며 어떤 파일이 사용 중에 있는지에 대한 상태 정보는 유지하지 않는다.
- NFS는 원래 효율성을 위해서 전송하는 데 UDP를 사용하도록 설계되었다.
- 이 때문에 NFS 클라이언트가 유실된 요청을 탐지하고 재전송해야 한다.
- NFSv4는 TCP의 신뢰성과 여러 기능을 이용하기 위해서 TCP를 사용한다.
NFS의 서버 절차와 동작
- NFS 버전 2와 버전 3의 서버 절차
V2 | V3 | 절차 이름 | 절차 요약 | 설명 |
0 | 0 | null | 아무 것도 안 함 | 테스트 목적으로 제공되는 무의미한 절차 |
1 | 1 | getattr | 파일 속성 가져오기 | 원격 서버상의 파일에 대한 속성을 가져온다 |
2 | 2 | setattr | 파일 속성 설정 | 원격 서버의 파일 속성을 설정한다(변경한다) |
3 | - | root | 파일 시스템의 루트 가져오기(폐기됨) | 원래 클라이언트는 이 절차를 통해 원격 파일 시스템의 루트를 찾을 수 있었으나 현재는 폐기되었다. 대신 이 기능은 마운트 프로토콜의 일부로서 구현됐다. NFSv3에서는 없어졌다. |
4 | 3 | lookup | 파일명 검색 | 클라이언트가 사용할 수 있도록 파일의 핸들을 반환한다. |
5 | 5 | readlink | 심볼릭 링크 읽기 | 심볼릭 링크를 사용해서 명시한 파일의 이름을 읽는다. |
6 | 6 | read | 파일 읽기 | 파일로부터 데이터를 읽는다. |
7 | - | writecache | 캐시 쓰기 | NFSv2에서 추후의 사용을 위해 제안했으나 폐기되었고 NFSv3에서는 없어졌다. |
8 | 7 | write | 파일 쓰기 | 데이터를 파일에 적는다. |
9 | 8 | create | 파일 생성 | 서버에 파일을 생성한다. |
10 | 12 | remove | 파일 제거 | 서버로부터 파일을 삭제한다. |
11 | 14 | rename | 파일 이름 변경 | 파일의 이름을 변경한다. |
12 | 15 | link | 파일로의 링크 생성 | 파일로 하드(심볼릭이 아닌) 링크를 생성한다. |
13 | 10 | symlink | 심볼릭 링크 생성 | 파일로 심볼릭 링크를 생성한다. |
14 | 9 | mkdir | 디렉토리 생성 | 서버에 디렉토리를 생성한다. |
15 | 13 | rmdir | 디렉토리 제거 | 디렉토리를 삭제한다. |
16 | 16 | readdir | 디렉토리 읽기 | 디렉토리의 내용을 읽는다. |
17 | - | statfs | 파일 시스템 속성 가져오기 | 파일 시스템의 크기와 남은 용량을 포함하는 원격 파일 시스템에 대한 일반적인 정보를 클라이언트에게 제공한다. NFSv3에서는 fsstat와 fsinfo로 대체됐다. |
- | 4 | access | 접근 권한 확인 | 사용자가 특정 파일 시스템 객체에 대해 가지는 접근 권한을 확인한다. |
- | 11 | mknod | 특수 장비 생성 | 명명된 파이프나 장비 파일과 같은 특수 파일을 생성한다. |
- | 17 | readdirplus | 확장된 디렉토리 읽기 | 디렉토리로부터 추가적인 정보를 검색해온다. |
- | 18 | fsstat | 동적 파일 시스템 정보 가져오기 | 파일 시스템의 현재 남은 용량과 빈 파일 슬롯의 수와 같은 휘발성(동적) 파일 시스템의 상태 정보를 반환한다. |
- | 19 | fsinfo | 정적 파일 시스템 정보 가져오기 | 파일 시스템의 사용방법에 대한 일반적인 데이터와 서버로의 요청을 구조화하는 방법에 대한 매개변ㄴ수 등과 같은 파일 시스템의 정적 정보를 반환한다. |
- | 20 | pathconf | POSIX 정보 검색 | 파일이나 디렉토리에 대한 추가적인 정보를 검색해온다. |
- | 21 | commit | 캐시에 저장한 정보를 서버의 안정적 저장장비에 저장하기 | 서버가 쓰기 캐시에 저장하고 있는 데이터를 저장장비에 쓴다. 클라이언트가 서버로 전송했지만 그 서버가 저장장비에 쓰는 것을 보류한 데이터를 저장장비로 완전히 썼는지를 보장하기 위해 이용한다. |
- NFS 버전 4의 서버 절차와 동작
- NFS 버전 4의 서버 절차
절차 번호 | 절차 이름 | 절차 요약 | 설명 |
0 | null | 아무 것도 안 함 | 테스트 목적으로 제공되는 무의미한 절차 |
1 | compound | 합성 절차 | 다수의 NFS 동작을 하나의 요청으로 결합한다. |
- NFS 버전 4의 서버 동작
동작 번호 | 동작 이름 | 동작 요약 | 설명 |
3 | access | 접근 권한 확인 | |
4 | close | 파일 닫기 | |
5 | commit | 캐시 데이터를 저장장비에 쓰기 | |
6 | create | 비정규 파일 객체 생성 | |
7 | delepurge | 복구 대기 중인 위임의 제거 | |
8 | delegreturn | 위임 반환 | |
9 | getattr | 속성 가져오기 | |
10 | getfh | 현재의 파일 핸들 가져오기 | |
11 | link | 파일로의 링크 생성 | |
12 | lock | 잠금(lock) 생성 | |
13 | lockt | 잠금에 대한 시험 | |
14 | locku | 파일 잠금 해제 | |
15 | lookup | 파일명 검색 | |
10044 | illegal | 잘못된 동작 |
NFS의 파일 시스템 모델과 마운트 프로토콜
- NFS의 파일 시스템 모델
- 대부분의 사람에게 친숙한 디렉토리의 계층적 배열과 동일
- 마운트 프로토콜
- NFS 버전 2와 버전 3은 원격 서버의 자원을 열거나 닫는 절차를 포함하지 않는다. 그래서 이 버전에서 NFS 작업을 수행하기 전에 파일 시스템을 마운트하기 위해서 특별한 마운트 프로토콜을 사용하며 파일 시스템상의 파일에 접근하기 위해서 파일 핸들을 생성한다. 그리고 마운트 프로토콜은 파일 시스템이 더 이상 필요하지 않을 때 언마운트 하기 위해서도 사용된다.
- 마운트 프로토콜은 RPC와 XDR을 사용하는 절차의 나열을 정의하는 NFS와 유사한 방법으로 구현된다. NFSv4에서는 마운트 프로토콜이 수행하는 업무를 NFSv4 동작으로 구현했기 때문에 마운트 프로토콜이 더 이상 필요치 않다.
댓글 없음:
댓글 쓰기