310 likes | 506 Views
Chap. 27 FTP: File Transfer Protocol. 목 차. 개요 FTP 프로토콜 FTP 예 요약. 개 요. FTP 는 파일 전송을 위한 인터넷 표준 NFS(29 장 ) 차이점 FTP 는 로그인할 수 있는 계정이 필요 , anonymous FTP 를 허용하는 서버에 로그인이 필요 서로 다른 운영체제 , 파일구조 , 문자 집합을 사용하는 호스트들 사이에 작동할 수 있도록 설계 FTP 는 제한된 파일 형식과 파일구조를 지원한다 . RFC 959 는 FTP 공식 명세서 이다.
E N D
목 차 • 개요 • FTP 프로토콜 • FTP 예 • 요약
개 요 • FTP는 파일 전송을 위한 인터넷 표준 • NFS(29장) 차이점 • FTP는 로그인할 수 있는 계정이 필요, anonymous FTP를 허용하는 서버에 로그인이 필요 • 서로 다른 운영체제, 파일구조, 문자 집합을 사용하는 호스트들 사이에 작동할 수 있도록 설계 • FTP는 제한된 파일 형식과 파일구조를 지원한다. • RFC 959는 FTP 공식 명세서 이다.
FTP 프로토콜 • 2개의 TCP를 사용 기존의 응용과는 다르다. • 제어연결 : 전형적인 C/S 방식으로 서버는 포트21을 수동적 개방을 하고 클라이언트는 TCP 포트 21에 능동적 개방을 행한다. 이 상태는 C/S 간의 통신하는 전 시간 내 유지, 최소지연 (3장) • 데이터연결 : C/S 파일이 전송 될 때마다 생성 파일 전송을 위해 최대 처리율을 가져야 함(3장)
사용자 인터페이스 서버 프로토콜 인터페이스 사용자프로토콜 인터페이스 사용자프로토콜 인터페이스 서버 데이터 전송 기능 파일전송 처리 터미널사용자 제어접속 (FTP명령) (FTP응답) 파일 시스템 파일 시스템 데이터접속
데이터 표현 형식 • FTP 프로토콜은 다양한 옵션들이 제공되며 선택은 4가지 차원으로 이루어진다. • 파일형태 • ASCII 파일 형태 • 디폴트 텍스트 파일은 NVT ASCII 형태로 데이터 연결을 통해 전송된다. 송신측은 로컬텍스트를 ASCII로 수신측은 ASCII를 로컬 텍스트 파일 형태로 변환해야 하며 CR, LF가 뒤따른다. • EBCDIC 파일 형태 • 양쪽 종단이 ECDIC시스템인 경우, 턱스트 전송의 대안적인 방안 • 이미지 파일 형태(2진파일) • 데이터를 연속적인 비트 스트림으로 보낸다. 2진 파일 전송시 사용 • 로컬 파일 형태 • 다른 바이트 크기를 갖는 호트간의 2진 파일 전송 방식 바이트당 비트수는 송신측이 기입.
Cont’d • 형식제어 • 비인쇄(Nonprint) • 디폴트 파일은 수직 정보를 갖지 않는다. • Telnet 형식제어 • 파일은 프린터가 번역할 수 있는 Telnet 수직 형식 제어를 갖는다. • 포트란 캐리지 제어 • 각 줄의 첫문자가 포트란 형식의 제어 문자이다. • 구조 • 파일구조 • 디폴트, 파일은 연속적인 바이트 스트림으로 취급 • 레코드구조 • 텍스트 파일에서만 사용(ASCII or EBCDIC) • 페이지구조 • 각 페이지는 페이지 번호를 가지고 전송 수신측은 무작위로 페이지를 저장
Cont’d • 전송모드 • 스트림 모드 • 디폴트, 바이트 스트림으로 파일을 전송한다. • 블록 모드 • 파일은 일련의 블록 들로 전송, 하나이상의 헤더바이트가 선행된다. • 압축모드 • 간단한 run-length 코드화는 연속적으로 나타나는 동일한 바이트를 압축한다. 공백, 이진파일에서의 0바이트 문자열 (거의 사용하지 않음) • 일반적인 구현 • 형태:아스키, 이미지 • 형식제어:비 인쇄형태 • 구조:파일구조 • 전송모드:스트림 모드
FTP 명령어 • 명령은 3, 4바이트의 ASCII 대문자로 구성되며 그 중의 몇몇은 옵션인자를 가진다. • 클라이언트는 30개 이상의 FTP 명령을 보낼 수 있다.
명 령 설 명 ABOR filelist LIST password PASS n1,n2,n3,n4,n5,n6 PORT QUIT RETR filename STOR filename SYST TYPE type USER username 이전의 FTP 명령과 데이터 전송을 중지 파일 또는 디렉토리를 리스트 서버상의 패스워드 클라이언트 IP 주소와 포트(n5x256+n6) 서버에서 로그 오프 파일 검색(수신) 파일 저장(송신) 서버가 시스템 타입을 변환 파일 형태를 기술:ASCII A, 이미지는 I 서버상의 사용자명 일반적인 FTP 명령
FTP 응답 • 응답은 ASCII로 된 3 자리 수 숫자 뒤로 옵션 메시지를 갖는다. • 응답코드내의 3자리에서 각 자리는 서로 다른 의미 를 갖는다.
응답 코드의 의미 명 령 설 명 1yz 2yz 3yz 4yz 5yz x0z x1z x2z x3z x4z x5z 긍정적인 예비 응답 다른 응답을 수신하기를 기대하라는 응답 긍정적인 완성 응답, 새 명령을 보낼 수 있다. 긍정적인 중간 응답, 명령이 승인, 다른 추가 명령이 필요 순간적 부정 완성 응답 차후에 명령을 재실행 할 수 있다 지속적인 부정 완성 응답 승인, 재시도 되지 않음 문법 에러 정보 연결, 제어연결 또는 데이터 연결을 언급하는 응답 인증과 계정 로그인 또는 계정 명령을 위해 응답한다. 명시되지 않음 파일시스템 상태
Cont’d • 응답 코드의 3번째자리의 에러 메시지에 대한 의미를 추가한다. (이에 따른 메시지 문자열이 추가) • 125 데이터 접속이 이미 열림; 전송시작 • 200 명령 OK • 214 도움 메시지 (사용자를 위한 것) • 331 사용자명 OK, 패스워드가 요구됨 • 425 데이터 접속을 열 수 없음 • 452 에러를 기록한 파일 • 500 문법 에러 (인식되지 않는 명령) • 501 문법에러 (유효하지 않는 인수) • 502 구현되지 않은 MODE 형태
Cont’d • 보통 FTP는 1줄짜리 응답을 한다. >> QUIT 221 Goodbye • 만일 응답이 여러 줄이면 응답코드 뒤에 공백대신 하이픈, 마지막 줄은 응답코드 뒤에 공백 >> HELP 214- The following command ….. | 214 Direct comment to ftp …...
연결관리 • 데이터 연결 용도 • 클라이언트에서 서버로 파일 보내기 • 서버에서 클라이언트로 파일 보내기 • 서버에서 클라이언트로 파일 또는 목록 보내기 • 데이터 연결의 절차 • 클라이언트는 데이터 연결의 생성을 제어한다. • 클라이언트는 호스트상에 임시 포트번호를 선택 이 포트에 대해 수동적 개방 • 클라이언트는 PORT 명령을 통해 서버에게 이 포트번호를 보낸다. • 서버는 제어연결을 통해 포트번호를 받아 호스트의 해당 포트에 능동적 개방을 지시한다. 서버의 종단은 항상 포트 20을 사용
FTP 클라이언트 FTP 서버 포트 1173 포트 1174 (수동적 개방) 포트 21 포트 140.252.13.34.4.150\ r\n IP addr 140.252.13.34 FTP 제어 접속을 통해 진행되는 PORT 명령 Cont’d • • • FTP 클라이언트 FTP 서버 포트 1173 포트 1174 (수동적 개방) 포트 21 (제어 접속) • • • • 포트 20 (능동적 개방) IP addr 140.252.13.34 FTP 제어 접속을 통해 진행되는 FTP 서버
FTP 예 연결관리:임시 데이터 포트 svr4 % ftp -d bsdi -d 옵션은 디버그 출력 Connected to bsdi. 클 제어접속의 active open 220 bsdi FTP server (version 5.60) ready. Name (bsdi : rstevens) : 클라이언트 프롬프트 --> USER rstevens 331 Password required for rstevens. Password : 패스워드 입력 (과정생략) ftp>dir hello.c -->PORT 140,252,13,34,4,150 200 PORT command successful -->LIST hello.c 150 Opening ASCII mode data connection for /bin/ls (결과생략) 226 Transfer complete. Remote : hello.c 56 bytes received in 0.03 seconds(1.8 Kbytes/s) ftp> quit --> QUIT 221 Goodbye
연결관리 : 디폴트 데이터 포트 • 클라이언트가 PORT 명령을 서버에게 보내지 않는다면 이는 스트림 모드에서 클라이언트에게 문제가 발생된다.(RFC는 PORT 명령 권장)
Cont’d • 제어연결 클라이언트 포트 1176, 서버 포트 21 • 클라이언트가 포트 1176에 수동적 개방을 할 때 클라이언트는 SO_REUSEADDR 기술 • 서버는 포트 20에서 1176까지 직접열기를 한다. 클라이언트는 이것을 받아 드린다. <svr4, 1176, bsdi, 21> <svr4, 1176, bsdi, 20> • 서버는 데이터 접속을 능동적으로 종료 한다. • 클라이언트는 제어연결을 통행 LIST 명령을 보냄 이때 SO_REUSEADDR 옵션 기술 • 서버 포트는 20에서 1176까지 능동적 개방지시 이때도 옵션 기술
2개의 연속적인 LIST 명령 직접 열기를 한다. 클라이언트는 1176 사용을 받아드림 약 1분 후에 진행
텍스트 파일 전송 새로운 줄을 알리는 (\n) 문자가 (\r\n)으로 변환 전송되기 때문 sun % ftp bsdi Connected to bsdi. 220 bsdi FTP server (Version 5.60) ready. 생략 ftp> get hello.c 200 PORT command successful 150 Opening ASCII mode data connection for hello.c (38bytes). 226 Transfer complete 서버는 파일이 38byte 라고 알려 준다. local : hello.c remote:hello.c 42 bytes received in 0.0037 seconds (11 Kbytes/s) 42 바이트 수신 생략 sun % ls -l hello.c -rw-rw-r-- 1 rstevens 38 Jul 18 08:48 hello.c 파일크기 38바이트 sun % wc -l hello.c 4 hello.c 파일 줄 수 4줄
파일 전송 중단 : Telnet 동기 신호 • 전송중지(C-S) : 제어연결을 통하여 전송을 중지하고 서버로 ABOR을 전송 • 수신중지 (C-S) : ftp>get a.out --> TYPE I 200 Type set to I. --> PORT 140,252,13,66,4,99 200 PORT command successful . --> RETR a.out 150 Opening BINARY mode data connection for a.out (28672 bytes). ^? Received aborted waiting for remote to finish abort 426 Transfer aborted. Data connection closed. 226 Abort successful. 1536 bytes received in 1.7 seconds (0.89 Kbytes/s)
파일 전송 중지 (뒷부분) 수신된 6번째 세그먼트 인터럽트 키 입력 서버의 전송이 중지됨을 알림 1537 에서 5120 까지의 전송은 즉 18세그먼트 다음의 전송은 무시됨 이처럼 중지 명령 후에 데이터가 전송 되는 것은 프로세서 가 동시에 입력에 대 한 2개의 연결을 확인 하기 어렵기 때문
Anonymous FTP • FTP의 흔한 형태 anonymous FTP 서버가 지원 할 때 아무나 서버에 로그인 하여 FTP 를 사용하여 파일을 전송 받을 수 있다. 방대한 자료를 무료로 이용할 수 있다.
Anoymous FTP SUN % ftp ftp.uu.net Connected to ftp.uu.net 생략 Name (ftp.uu.net:rstevens):anonymous 생략 ftp>cd published/books 250 CWD command successful frp>binary 200 Type set to I frp>get stevens.tcpipiv1.errata.Z 생략 ftp>quit
요 약 • FTP 인터넷 표준이며 클라이언트와 서버간의 두개의 TCP 두개의 C/S 세션이 유지되는 동안 제어연결과 필요 시 생성 제거 되는 데이터 연결 사용 • PORT 명령에서 거론되지 않은 TCP의 2MSL의 상호 작용 • 새로운 유닉스 클라이언트는 자동적으로 명령을 전송하여 서버가 8비트를 한 바이트로 처리하는 호스트인 경우 효율적인 2진 모드 사용 • anonymous FTP