5. NFS 프로토콜 (계속..)

Download Report

Transcript 5. NFS 프로토콜 (계속..)

TCP/IP 네트워크
제 29 장 Network File System
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
1
목 차
1. 개요
2. Sun 원격 프로시저 호출
3. XDR: 외부 데이터 표현
4. 포트 맵퍼
5. NFS 프로토콜
6. NFS 예
7. NFS 버전 3
8. 요약
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
2
1. 개 요


NFS의 구성요소: Sun RPC
NFS를 사용하는 클라이언트 프로그램


커널은 RPC 호출 생성


특별한 것 사용 불필요
액세스 되고 있는 파일이 NFS 서버에 있는 것을
자동적으로 파일 액세스 목적
NFS 관심사: 인터넷 프로토콜 사용
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
3
2. Sun 원격 프로시저 호출

네트워크 프로그램의 특징

특정한 네트워크 동작을 실행하기 위해 시스템에 의해 제공되
는 각종 함수를 호출하는 응용프로그램을 기술하여 수행.

네트워크 프로그램을 위한 대표적 함수: 소켓과 TLI

클라이언트에서 사용되는 API와 서버에 의해 사용되는 API는
다를 수 있음.

클라이언트와 서버가 서로 통신을 할 수 있는 지를 결정하는
것은 통신프로토콜과 응용 프로토콜임.

대부분 각종 응용 프로그램들은 명령과 응답으로 만들어짐.
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
4
2. Sun 원격 프로시저 호출(계속..)

RPC(Remote Procedure Call)



네트워크 프로그램을 위한 다른 방법
클라이언트에서 함수를 호출하도록 기술
호출 절차
• 클라이언트는 로컬 호스트에 함수(client stub)를 호출
• Client stub: 프로시저 arguments를 네트워크 메시지로 패키지화하
고 서버에 메시지 송신
• 서버 호스트의 Server stub는 네트워크 메시지 수신
• 네트워크 메시지로부터 argument 추출
• 서버 프로시저 호출
• server stub은 반환 값을 네트워크 메시지로 패키지화
• client stub에 송신, 네트워크 메시지로부터 반환 값 획득
• 응용 프로그램에 반환
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
5
2. Sun 원격 프로시저 호출(계속..)





네트워크 프로그램은 stub에 의해 수행
RPC library routines은 소켓 또는 TLI와 같은 API 사용
사용자 응용 프로그램은 API를 다루지 않음.
모든 네트워크 프로그래밍 상세는 RPC 패킷, 클라이언트 stub
과 서버 stub에 의해 숨겨짐.
RPC 패킷의 장점
• 프로그램이 쉬움
• 사용자 응용 프로그램을 단순화
• 다른 환경에서 동작하는 클라이언트와 서버의 코딩을 단순화

RPC 패킷: Sun RPC와 OSF(Open Software Foundation)의
DCE(Distributed Computing Environment) RPC 패킷
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
6
2. Sun 원격 프로시저 호출(계속..)

Sun RPC

2개의 버전
• 소켓 API를 사용, TCP와 UDP로 작동
• TI(Transport Independent)-RPC로 칭하는 TLI API 사용
– 커널에 의해 제공되고 있는 트랜스포트 층에서 작
동
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
7
2. Sun 원격 프로시저 호출(계속..)

RPC 프로시저 호출 메시지
(UDP 데이터그램)의 형식
IP 헤더
모든 Sun RPC
프로시저
호출에 대해
공통
호출되는
프로시저에
따라 다름
정보통신연구실
20 바이트
RPC 프로시저 응답 메시지
(UDP 데이터그램)의 형식
20 바이트
IP 헤더
UDP 헤더
8
UDP 헤더
8
transaction ID (XID)
4
transaction ID (XID)
4
Call (0)
4
reply (1)
4
RPC version (2)
4
status(0=accepted)
4
Program number
4
version number
4
procedure number
4
credentials
408 바이트까지
verifier
408 바이트까지
Procedure
parameters
...
verifier
400 바이트까지
Accept status(0=success) 4
Procedure
parameters
...
N
N
성균관 대학교
SungKyunKwan Univ.
8
2. Sun 원격 프로시저 호출(계속..)
• Transaction ID(XID):
– 클라이언트에서 의해 설정
– 서버에 의해 반환
• Call 변수: 호출=0, 응답=1
• program number, version number, procedure number:
– 서버에 의해 호출되는 하나의 프로시저를 지정
• Credential: 클라이언트 확인
• Verifier: secure RPC로 사용. DES 암호화 기법 사용
• Accept status:
– 0=성공, 기타 숫자=버전 숫자 다르거나 무효인 프로시
저 번호 표시
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
9
3. XDR: 외부 데이터 표현






XDR(External Data Representation)은 RPC 호출과 응답 메시
지에서 값을 코드화 하기 위해 사용된 표준
RFC 1014에 정의
여러 가지 데이터 타입 정의, RPC 메시지에 전송되는 방법
정의
송신자: XDR형식에 RPC 메시지를 설립
수신기: 원래 표현으로 XDR 형식 변환
XDR에 정의된 다른 데이터 유형

부호 없는 정수, 부울 값, 부동 소수점, 고정길이 배열, 가변길
이 배열과 구조형 포함
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
10
4. 포트 맵퍼


RPC 서버 프로그램은 순간적인 포트 사용, 잘 알려진 포트
사용하지 않음.
Register:



포트 맵퍼는 잘 알려진 포트를 가져야 함


순간적인 포트의 사용 추적을 유지하는 형식
Sun RPC는 이 레지스터를 포트 맵퍼(port mapper)라 부름.
UDP 111, TCP 111
포트 맵퍼는 RPC 서버 프로그램

프로그램 번호(100000), 버전 번호(2), 111의 TCP 포트, 111의
UDP 포트를 갖음
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
11
4. 포트 맵퍼 (계속...)

포트 맵퍼는 4개의 서버 프로시저 제공

PMAPPROC_SET
• 프로그램 번호, 버전 번호, 포트 번호를 가진 프로토콜 저
장 시작할 때 RPC 서버에 의해 호출

PMAPPROC_UNSET
• 저장된 맵핑을 제거하기 위해 서버에 의해 호출

PMAPPROC_GETPORT
• 프로그램 번호, 버전 번호, 프로토콜에 대해 포트 번호를
획득 시작 시 RPC 클라이언트에 의해 호출

PMAPPROC_DUMP
• 모든 요소들을 되돌림
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
12
4. 포트 맵퍼(계속...)

RPC 서버 프로그램 시작, 후에 RPC 클라이언트 프로그램에 의
해 호출 시 다음 과정 확립

시스템 초기 가동 시 포트 맵퍼는 처음 시작
• TCP 종단 생성, TCP 포트 111에 대해 수동적 개방 수행
• UDP 종단 생성, UDP 포트 111에 대해 UDP 데이터그램 도착대기


서버는 각 프로그램, 버전, 프로토콜, 포트 맵퍼 번호를
PMAPPROC_SET 프로시저에 RPC에 의해 등록
RPC 클라이언트 프로그램이 시작할 때 PMAPPROC_GETPORT
프로시저 호출
• 포트 맵퍼의 주어진 프로그램, 버전, 프로토콜에 대한 순간적인 포트
번호를 획득

클라이언트는 단계 3에서 되돌려진 포트 번호에 RPC 호출 메시지
송신
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
13
4. 포트 맵퍼(계속..)

프로그램 rpcinfo(8)에 의한 포트 맵퍼의 현 맵퍼 출력
Sun % /usr/etc/rpcinfo -p
program vers proto port
100005
1 tcp 702
100005
1 udp 699
100005
2 tcp 702
100005
2 udp 699
100003
2 tcp 2049
100021
1 tcp 709
100021
1 udp 1036
100021
2 tcp 721
100021
2 udp 1039
100021
3 tcp 713
100021
3 udp 1037
정보통신연구실
mountd
mountd
mountd
mountd
nfs
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
mount daemon for NFS
NFS itself
NFS lock manager
성균관 대학교
SungKyunKwan Univ.
14
5. NFS 프로토콜




NFS는 클라이언트가 서버에 파일과 파일 시스
템에 투명한 방식의 파일 접근을 제공
NFS는 프로세스 기준의 파일 부분을 접속하고,
접근하는 데 투명성 제공
NFS는 Sun RPC를 사용 클라이언트-서버 응용
프로그램 설정
NFS 클라이언트는 송신 RPC가 서버에 요구함으
로써 NFS 서버에 파일을 접속
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
15
5. NFS 프로토콜(계속..)

NFS 클라이언트와 NFS 서버의 전형적인 배열
user
process
local
file access
NFS
client
NFS
server
kernel
UDP port
2049
TCP/UDP
IP
client kernel
local
disk
정보통신연구실
local
file access
TCP/UDP
IP
server kernel
local
disk
성균관 대학교
SungKyunKwan Univ.
16
5. NFS 프로토콜(계속..)

많은 subtle point 존재






로컬 파일 또는 NFS 파일 접속 여부에 상관없이 클라이언트에
투명
NFS 클라이언트는 TCP/IP 모듈을 통해 NFS 서버에 RPC 요구
송신
NFS 서버는 포트 2049에 대해 UDP 데이터그램으로써 클라이
언트 요구를 수신
NFS 서버가 클라이언트 요구를 수신할 때 요구들은 서버에 있
는 로컬 디스크를 접근하는 로컬 파일 접근 루틴에 보내짐
NFS 서버는 클라이언트의 요구를 처리하는 동안 수행
NFS 클라이언트는 클라이언트 호스트에 대해 사용자 프로세
스로부터 요구를 처리하는 동안 수행
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
17
5. NFS 프로토콜(계속..)

NFS와 함께 사용된 다양한 RPC 프로그램
응
용
Port mapper
NFS
Mount
Lock manager
Status monitor

프로그램
번호
100000
100003
100005
100021
100024
버전
번호
2
2
1
1, 2, 3
1
프로시저의
수
4
15
5
19
6
Lock 관리자와 상태 모니터는 NFS 서버에 존재하는 파일의
lock 부분에 클라이언트를 허용

두 프로그램들은 NFS 프로토콜에 독립, NFS는 서버에
statelessness
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
18
5. NFS 프로토콜 (계속..)

파일 처리(File Handles)

NFS의 기본 개념

서버에 파일 또는 디렉토리를 기준으로 사용하는 opaque 객체
• opaque: 서버가 파일 처리를 만들고 클라이언트에 그것을 돌려주
고 클라이언트가 파일을 접속할 때 파일 처리를 사용한다는 의미

클라이언트는 파일 처리의 내용을 보지 못함

보통 사용자 프로세스는 파일 처리를 다루지 않음
• 앞뒤로 전달하는 NFS 클라이언트 코드와 NFS 서버 코드
• NFS 버전 2: 파일 처리는 32 byte 차지
• NFS 버전 3: 파일 처리는 64 byte로 증가
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
19
5.NFS 프로토콜(계속..)

Mount 프로토콜


클라이언트가 파일 시스템에 접속할 수 있기 전에 클라이언트는
서버의 파일 시스템 유지를 위해 NFS mount 프로토콜 사용
UNIX mount 명령에 사용되는 Mount 프로토콜
user process
user process
mount
command
port
mapper
user process
(1) register
at start
mountd
daemon
(6)mount
system
call
(2) get port# RPC request
NFS
(3) RPC reply w/port#
(4) mount RPC request
client kernel
정보통신연구실
(5) RPC request w/file handle
server kernel
성균관 대학교
SungKyunKwan Univ.
20
5.NFS Protocol(Mount Protocol)

단계적 흐름
• 서버가 초기 가동할 때 포트 맵퍼가 서버에서 시작
• Mount 데몬(mountd)는 포트 맵퍼 후에 서버에서 시작
• mount 명령은 클라이언트에서 실행. 서버 mount 데몬의 포트
번호 획득을 위해 서버에 있는 포트 맵퍼에 RPC 호출 발행
• 포트 맵퍼는 포트번호에 응답
• mount 명령은 서버에 파일 시스템을 유지하기 위해 mount 데
몬에 RPC 호출을 발생
• mount 데몬은 주어진 파일 시스템에 대해 파일 처리에 응답
• mount 명령은 클라이언트에 있는 로컬 mount 지점을 가지고
단계 5에서 되돌아온 파일 처리에 관련된 클라이언트 위의
mount 시스템을 발행
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
21
5.NFS 프로토콜(계속..)

Sun # mount -t nfs bsdi:/usr /nfs/bsdi/usr
sun 클라이언트
/
nfs
bsdi 서버
bsdi
usr
/
NFS mount
usr
rstevens
hello.c
호스트 sun/nfs/bsdi/usr 디렉토리에서 bsdi:/usr/ 디렉토리 마운팅
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
22
5. NFS 프로토콜(계속..)

NFS 프로시저


NFS 서버가 제공하는 15 프로시저
프로시저명은 실제로 NFSPROC_ 으로 시작
1. GETATTR
2. SETATTR
3. STATFS
4. LOOKUP
5. READ
6. WRITE
7. CREATE
8. REMOVE
정보통신연구실
9. RENAME
10. LINK
11. SYMLINK
12. READLINK
13. MKDIR
14. RMDIR
15. READDIR
성균관 대학교
SungKyunKwan Univ.
23
5. NFS 프로토콜(계속..)

UDP 또는 TCP?


NFS는 원래 모든 판매자가 제공하는 UDP를 사용하여
쓰여진 것임.
새로운 구현들은 TCP를 제공
• TCP는 WAN에서 사용되도록 지원





NFS는 더 이상 지역적인 사용에 제한을 두지 않음
망의 유동성은 LAN에서 WAN으로 변화
왕복 시간은 넓게 변하고 빈번한 혼잡 발생
WAN의 특성은 TCP와 같은 알고리즘 사용성 증대
UDP는 TCP와 같은 특징을 제공하지 못함.
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
24
5. NFS 프로토콜(계속..)

TCP 상의 NFS


NFS의 버클리 Net/2 구현은 UDP 또는 TCP 지원
TCP 사용의 차이점
• 서버가 bootstraps할 때, TCP port 2049에 대해 수동적 개방을 시작.
클라이언트 연결 요구를 대기
• 클라이언트가 TCP를 사용 파일 시스템을 마운트할 때, 서버에 있
는 TCP port 2049에 능동적 개방을 수행: 클라이언트와 서버사이
의 TCP 연결
• 클라이언트와 서버 모두 그들의 연결 끝에 대해 TCP의 keepalive
옵션을 설정
• 서버 파일 시스템을 사용하는 클라이언트 위의 모든 응용은 이
파일 시스템에 대한 단일 TCP 연결을 공유
• 클라이언트는 서버가 충돌, 재부팅하는 것을 검출하면 서버에 다
시 연결 시도
• 클라이언트가 충돌하더라도 실행 중인 응용 프로그램은 실행
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
25
6. NFS 예

파일 읽기

cat(1) 명령어 사용 터미널에 NFS 서버에 있는 파일 복사 예제
sun % cat /nfs/bsdi/usr/rstevens/hello.c
main()
{
printf(“hello, world\n”);
}
1 0.0
2 0.003587 (0.0036)
3 0.005390 (0.0018)
4 0.009570 (0.0042)
5 0.011413 (0.0018)
6 0.015512 (0.0041)
7 0.018843 (0.0033)
8 0.022377 (0.0035)
9 0.027621 (0.0052)
10 0.032170 (0.0045)
정보통신연구실
copy file to terminal
sun.7aa6 > bsdi.nfs: 104 getattr
bsdi.nfs > sun.7aa6: reply ok 96
sun.7aa7 > bsdi.nfs: 116 lookup “rstevens”
bsdi.nfs > sun.7aa7:reply ok 128
sun.7aa8 > bsdi.nfs: 116 lookup “hello.c”
bsdi.nfs > sun.7aa8: reply ok 128
sun.7aa9 > bsdi.nfs: 104 getattr
bsdi.nfs > sun.7aa9: reply ok 96
sun.7aaa > bsdi.nfs: 116 read 1024 bytes @ 0
bsdi.nfs > sun.7aaa: reply ok 140
성균관 대학교
SungKyunKwan Univ.
26
6. NFS 예(계속..)

디렉토리 만들기

작업중인 디렉토리를 NFS에 있는 다른 디렉토리로 변경 및 새
로운 디렉토리 생성 예제
sun % cd /nfs/bsdi/usr/rstevens
sun % mkdir Mail
작업 디렉토리 변경
그리고 디렉토리 생성
1 0.0
sun.7ad2 > bsdi.nfs: 104 getattr
2 0.004912 (0.0049) bsdi.nfs > sun.7ad2: reply ok 96
3 0.007266 (0.0024) sun.7ad3 > bsdi.nfs: 104 getattr
4 0.010846 (0.0036) bsdi.nfs > sun.7ad3: reply ok 96
5 35.769875 (35.7590) sun.7ad4 > bsdi.nfs: 104 getattr
6 35.773432 ( 0.0036) bsdi.nfs > sun.7ad4: reply ok 96
7 35.775236 (0.0018) sun.7ad5 > bsdi.nfs: 112 lookup “Mail”
8 35.780914 (0.0057) bsdi.nfs > sun.7ad5: reply ok 28
9 35.782339 (0.0014) sun.7ad6 > bsdi.nfs: 144 mkdir “Mail”
10 35.992354 (0.2100) bsdi.nfs > sun.7ad6: reply ok 128
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
27
6. NFS 예(계속..)

Server Crash

NFS 서버로부터 파일을 읽는 도중에 서버가 갑자기 동작을 멈
추거나 재시동 되는 경우
sun % cat /nfs/svr4/usr/share/lib/termcap
1 0.0
sun.7ade > svr4.nfs: 104 getattr
2 0.007653 (0.0077) svr4.nfs > sun.7ade: reply ok 96
3 0.009041 (0.0014) sun.7adf > svr4.nfs: 116 lookup “share”
4 0.017237 (0.0082) svr4.nfs > sun.7adf: reply ok 128
5 0.018518 (0.0013) sun.l7ae0 > svr4.nfs: 112 lookup “lib”
6 0.026802 (0.0083) svr4.nfs > sun.7ae0: reply ok 128
7 0.028096 (0.0013) sun.7ae1 > svr4.nfs: 116 lookup “termcap”
8 0.036434 (0.0083) svr4.nfs > sun.7ae1: reply ok 128
9 0.038060 (0.0016) sun.7ae2 > svr4.nfs: 104 getattr
10 0.045821 (0.0078) svr4.nfs > sun.7ae2: reply ok 96
11 0.050984 (0.0052) sun.7ae3 > svr4.nfs: 116 read 1024 bytes @ o
12 0.084995 (0.0340) svr4.nfs > sun.7ae3: reply ok 1124
reading
continues
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
28
6. NFS 예(계속..)
128
129
130
131
144
145
3.430313
3.441828
4.125031
4.868593
71.090305
71.830155
(0.0013) sun.7b22 > svr.nfs: 116 read 1024 bytes @ 64512
(0.0115) svr4.nfs > sun.7b22: reply ok 1124
(0.6832) sun.7b23 > svr4.nfs: 116 read 1024 bytes @ 65536
(0.7436) sun.7b24 > svr4.nfs: 116 read 1024 bytes @ 73728
(19.2594) sun.7b23 > svr4.nfs: 116 read 1024 bytes @ 65536
(0.7398) sun.7b24 > svr4.nfs: 116 read 1024 bytes @ 73728
retransmissions continue
167 291.824285 (0.7400) sun.7b24 > svr4.nfs: 116 read 1024 bytes @ 73728
168 311.083676 (19.2594) sun.7b23 > svr4.nfs: 116 read 1024 bytes @ 65536
server reboots
169 311.149476 (0.0658) arp who-has sun tell svr4
170 311.150004 (0.0005) arp reply sun is-at 8:0:20:3:f6:42
171 311.154852 (0.0048) svr4.nfs > sun.7b23: reply ok 1124
172 311.156671 (0.0018) sun.7b25 > svr4.nfs: 116 read 1024 bytes @ 66560
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
29
6. NFS 예(계속..)

Idempotent 프로시저


서버에 의해 한번 이상 실행되어질 수 있고 여전히 같은 결과가
나온다면 RPC 프로시저를 Idempotent라 부름.
Idempotent 인 NFS operations:
• GETATTR, STATFS, LOOKUP, READ, WRITE, READLINK,
READDIR.

Idempotent 가 아닌 프로시저:
• CREATE, REMOVE, RENAME, LINK, SYMLINK, MKDIR, RMDIR.

NFS 서버는 nonidempotent 동작을 처리할 수 있는 방법 필요
• 잃어버린 응답은 UDP에서 발생 할 수 있음.
• Nonidempotent 동작을 위해 최근의 응답을 저장한 recent-reply 캐쉬
구현
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
30
7. NFS 버전 3
구
분
버전
2
버전 3
파일처리 크기
32 바이트 고정
64 바이트 까지 가변
READ/WRITE
RPC 당 바이트 수
8192 바이트 까지
제한
제한 없음
파일크기, READ/WRITE
순서 시작 바이트 offset
32 비트
64 비트까지 확장
파일 속성
GETATTR
속성에 영향을 주는 모든
요구마다 되돌려질 수 있음
WRITE 동기 여부
동기 필요
비동기 가능
추가 프로시저
정보통신연구실
- STATFS 삭제
- ACCESS, MKNOD,
READDIRPLUS, FSINFO,
FSSTAT, PATHCONF,
COMMIT 추가
성균관 대학교
SungKyunKwan Univ.
31
8. 요 약

RPC는 클라이언트가 서버에게 수행하도록 요청하는 것 같은 클
라이언트 서버 응용 프로그램을 구체화 하기 위한 하나의 방법

모든 망의 세부 사항은 클라이언트와 서버 stub, RPC 라이브러리
루틴 내에 숨겨져 있음.

XDR은 RPC 클라이언트와 서버들이 다른 구조를 가진 머신들에
서 동작하도록 값을 암호화 하는데 사용

NFS와 NFS가 UDP와 TCP를 사용 방법

15개 프로시저가 NFS 버전 2 프로토콜에서 정의

한 NFS 서버에 클라이언트의 접근은 mount 프로토콜로 시작, 클
라이언트에 하나의 파일 처리 반환

NFS는 그것의 프로시저를 idempotent화 시도
정보통신연구실
성균관 대학교
SungKyunKwan Univ.
32