2015년 7월 14일 화요일

파일 전송 프로토콜(FTP)

TCP/IP에서 파일을 전송하는 데 쓰이는 대표적인 파일 전송 프로토콜은 파일 전송 프로토콜(FTP, File Transfer Protocol)이다. 이름에서도 알 수 있듯이 FTP는 범용 프로토콜이다.

FTP 개관과 역사, 표준문서
  • FTP의 개발과 표준화
    • 직접 연결 방식
      • 텔넷
      • 호스트 앞에서 직접 작업하는 것 같은 환상을 제공
    • 간접 연결 방식
      • FTP
      • 원격 호스트에서 리소스를 받아와 로컬 시스템에서 작업하고, 다시 원격 호스트로 전송하는 방식
    • 1971.04 - RFC 114 : 최초의 FTP 표준 문서, TCP나 IP가 개발되기 이전에 출간
    • 1971.07 - RFC 172
    • 1971.11 - RFC 265
    • 1972.07 - RFC 354 : 현대 TCP에서도 사용되는 통신 모델과 오늘날에도 사용되는 각종 기능을 처음으로 설명
    • 1973.08 - RFC 542 : NCP를 사용한다는 점만 제외하면 오늘날의 FTP와 비슷
    • 1980.06 - RFC 765 "File Transfer Protocol Specification)" 출판 : TCP/IP 기반
    • 1985.10 - RFC 959
  • FTP 동작의 개관
    • 주된 목적 : 파일을 옮기는 것에 관한 구현 내용을 사용자에게 숨김으로써 사용자가 쉽게 파일 전송을 할 수 있도록 돕는 것
    • 전송하는 두 시스템이 사용하는 파일 형식이 서로 달라서 생기는 문제를 자동으로 해결
    • 전송 계층에 TCP를 사용 - 데이터 손실 방지
    • 인증 시스템 사용 - 익명도 가능

FTP의 동작 모델과 구성요소, 주요 용어
  • 서버-FTP 프로세스와 사용자-FTP 프로세스
    • FTP에서 인간인 사용자가 직접 클라이언트를 다루기 때문에 클라이언트를 가끔 사용자 장비라고 부르기도 한다.
    • FTP 클라이언트 소프트웨어는 사용자-FTP 프로세스라고 부르고, 서버의 것은 서버-FTP 프로세스라고 부른다.
  • FTP 제어 연결과 데이터 연결
    • 제어연결
      • FTP 세션이 연결될 때 생기는 주된 TCP 연결이다.
      • FTP 세션 내내 연결된 상태로 있으며 FTP 명령과 응답 같은 제어 정보를 전달할 때만 사용된다.
      • 파일을 직접 전송하지는 않는다.
    • 데이터 연결
      • 서버에서 클라이언트로, 클라이언트에서 서버로 데이터가 전달될 때마다 따로 TCP 데이터 연결이 이루어진다.
      • 실제 데이터는 이 연결을 통해 전달된다.
      • 파일 전달을 완료하면 데이터 연결을 끊는다.
  • FTP 프로세스 구성요소와 주요 용어
    • 서버-FTP 프로세스의 구성요소
      • 서버 프로토콜 해석기(서버-PI, Server Protocol Interpreter)
        • 서버의 제어 연결을 담당
        • FTP 주포트에서 대기하면서 사용자로부터 들어오는 연결을 기다림
        • 서버 DTP를 관리
      • 서버 데이터 전송 프로세스(서버-DTP, Server Data Transfer Process)
        • 사용자 DTP와 데이터를 주고 받는 일을 담당
        • 서버의 파일 시스템에서 파일을 읽고 쓴다
    • 사용자-FTP 프로세스의 구성요소
      • 사용자 프로토콜 해석기(사용자-PI, User Protocol Interpreter)
        • 클라이언트의 제어 연결을 담당하고, 서버 PI로 요청 메시지를 보냄으로써 FTP 세션을 초기화 함
        • 연결이 수립되면 사용자 인터페이스로부터 명령을 받아 처리하고 서버-PI로 보내며, 응답을 기다림
        • 사용자 DTP를 관리
      • 사용자 데이터 전송 프로세스(사용자-DTP, User Data Transfer Process)
        • 서버-DTP와 데이터를 주고 받음
        • 클라이언트의 파일 시스템에서 파일을 읽고 씀
      • 사용자 인터페이스
        • 인간에게 친숙한 FTP 인터페이스를 제공
        • 난해한 FTP의 내부 명령어 대신 비교적 쉬운 사용자 중심 명령을 제공
  • 써드 파티 파일 전송 (프록시 FTP)
    • 한 컴퓨터에 있는 사용자가 한 서버에서 제 3의 컴퓨터인 다른 서버로 파일을 보낼 수 있는 모델도 소개
    • 보안 상 문제가 많아 거의 사용하지 않음

FTP 제어 연결의 수립, 사용자 인증과 익명 FTP 사용

  • FTP 로그인 순서와 인증



2015년 4월 27일 월요일

파일과 메시지 전송의 개관과 애플리케이션 범주 (71)

TCP/IP 애플리케이션 계층 주소지정: 유일 자원 식별자, 위치, 이름 (URI, URL, URN) (70)

TCP/IP 원격 네트워크 모니터링(RMON) (69)

SNMP 프로토콜 메시징과 메시지 형식 (68)

TCP/IP 단순 네트워크 관리 프로토콜의 개념과 동작 (67)

TCP/IP 관리 정보 구조(SMI)와 관리 정보 베이스(MIB) (66)

TCP/IP 인터넷 표준 관리 프레임워크 개요 (65)

DHCP 클라이언트/서버 구현, 기능, IPv6 지원 (64)

DHCP 메시징, 메시지 유형, 형식 (63)

DHCP의 설정과 동작 (62)

DHCP 개관과 주소 배당의 개념 (61)

TCP/IP 부트스트랩 프로토콜(BOOTP) (60)

호스트 설정의 개념, 문제, 동기 (59)

2015년 3월 11일 수요일

네트워크 파일과 자원공유, TCP/IP 네트워크 파일 시스템(NFS)

파일과 자원 공유의 개념과 구성 요소
  • 파일과 자원 공유 프로토콜의 힘
    • 파일과 자원 공유의 궁극적인 목표는 파일 위치의 세부사항과 파일을 이동하는 데 필요한 명령까지도 감추는 것
    • 네트워크의 자원을 로컬 컴퓨터의 자원과 똑같은 방법으로 사용할 수 있음
  • 파일과 자원 공유 프로토콜의 구성요소
    • 파일 시스템 모델과 구조
      • 공유할 자원과 파일을 정의하고 가상 파일 시스템의 동작을 기술하는 절차
    • 자원 접근 방법
      • 사용자가 자신의 로컬 호스트에 원격 자원을 부착하거나 분리하는 절차
    • 동작 집합
      • 사용자가 다른 호스트상의 파일에 수행하는 다양한 작업을 달성하기 위한 동작의 집합
    • 메시징 프로토콜
      • 수행할 작업, 상태 정보 등을 담고 있는 메시지 형식과 이런 메시지의 장비 간 교환을 위한 프로토콜
    • 관리도구
      • 프로토콜의 동작을 지원하고 다른 요소들을 연결해주는 데 필요한 기타 기능

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 동작으로 구현했기 때문에 마운트 프로토콜이 더 이상 필요치 않다.