FTP- File Transfer Protocol

Tổng quan về FTP

1.FTP là gì.

FTP( file transfer protocol)- giao thức truyền tệp tin phổ biến hiện nay.

2. Mục đích sử dụng

  • Được sử dụng để trao đổi tệp tin qua mạng lướt truyền thông sử dụng TCP/IP (internet, Mạng nội bộ,…)
  • Sử dụng để tải xuống máy tính các file từ máy chủ.
  • Tại sao nên dùng FTP: Mặc dù việc truyền file từ hệ thống này sang hệ thống khác rất đơn giản và dễ hiểu, nhưng đôi khi lại xảy ra vấn đề khác nhau. Ví dụ, 2 hệ thống có thể có các quy ước tập tin khác nhau, 2 hệ thống có cách khác nhau về thể hiện văn bản và dữ liệu hay 2 hệ thống có cấu trúc thư mục khác nhau,

Giao thức FTP khắc phục những vấn đề này bằng các thiết lập kết nối giữa 2 máy chủ. Một kết nối để sử dụng truyền dữ liệu, 1 kết nối còn lại được sử dụng để điều khiển kết nối.

Mô hình và nguyên lý hoạt động của FTP

  1. Mô hình cơ bản trong ftp:

Kết nối TCP trong FTP:

Giống như hầu hết các giao thức TCP/IP dựa trên mô hình Client -Server. Tuy nhiên, khác với các ứng dụng khác chạy nền trên TCP/IP, FTP cần tới 2 kết nối TCP:

  • Control Connection (sử dụng Port 21 trên server): Đây là kết nối TCP logic chính được tạo ra khi phiên làm việc được thiết lập. Nó được thực hiện giữa các quá trình điều khiển. Nó được duy trì trong suốt nhiều phiên làm việc và chỉ cho các thông tin điều khiển đi qua  như lệnh hay response( phản hồi)
  • Data connection ( sử dụng port 20 trên server): Kết nối này sử dụng các quy tắc rất phức tạp vì các loại dữ liệu có thể khác nhau. Nó được thiết lập giữa các quá trình truyền dữ liệu. Kết nối này mở khi có lệnh truyền tệp và đóng khi truyền tệp xong.

Mô hình FTP

Sơ đồ minh họa:

Do chức năng điều khiển dữ liệu được truyền tải bằng cách sử dụng các kênh riêng biệt nên mô hình FTP chia mỗi thiết bị thành 2 phần giao thức logic chịu trách nhiệm cho mỗi kết ở trên: 

  • Protocol Interpreter (PI): Là thành phần quản lý kênh điều khiển, phát – nhận lệnh và trả lời.
  • Data Transfer Process (DTP): Chịu trách nhiệm gửi và nhận dữ liệu giữa client và server.

Chức năng từng phần trong mô hình FTP

  • SERVER 
    • Server Protocol Interpreter (Server-PI): Chịu trách nhiệm quản lý Control Connection trên server. Nó lắng nghe yêu cầu kết nối từ hướng User trên cổng 21. Khi kết nối được thiết lập, nó nhận lệnh từ User PI, gửi phản hồi và quản lý quá trình truyền dữ liệu trên Server.
    • Server Data Transfer Process(Server-DTP): Chịu trách nhiệm nhận và gửi file từ User DTP vừa làm nhiệm vụ thiết lập Data Connection và lắng nghe Data Connection của User thông qua cổng 20. Nó tương tác với Server File System trên hệ thống cục bộ để đọc và chép file.
  • CLIENT
    • User Interface: Đây là chương trình được chạy trên máy tính, nó cung cấp giao diện xử lý cho người dùng, chỉ có trên phía Client. Nó cho phép người dùng sử dụng những đoạn lệnh đơn giản để điều khiển các session FTP, Từ đó có thể theo dõi các thông tin và kết quả xảy ra trong quá trình.
    • User Protocol Interpreter (User-PI): Chịu trách nhiệm quản lý Control Connection phía Client. Nó khởi tạo Phiên kết nối FTP bằng việc phát hiện ra Request tới Server-PI. Sau khi kết nối được thiết lập, nó xử lý các lệnh nhận được trên User Interface, gửi chúng tới Server-PI rồi đợi nhận Response trở lại. Nó cũng quản lý các tiến trình trên client.
    • User Data Transfer Process (User-DTP): Có nhiệm vụ gửi hoặc nhận dữ liệu từ Server-DTP. User-DTP có thể thiết lập hoặc lắng nghe DataConnection từ Server thông qua cổng 20. Nó tương tác với Client FIle System trên Client để lưu trữ file. 

Nguyên lý hoạt động của FTP

Cần có 2 kết nối TCP trong phiên làm việc của FTP: TCP Data Connection trên cổng 20, TCP Control Connection trên cổng 21.

  • Control Connection: luôn được mở ở mọi thời điểm khi dữ liệu hoặc lệnh được gửi.
  • Data Connection: chỉ được mở khi có trao đổi dữ liệu thực.

Trình tự chung của FTP hoạt động như sau:

  1. FTP Client mở Control Connection đến FTP Server(trên port 21) và chỉ định một cổng trên Client để Server phản hồi. Đường kết nối này dùng để truyền lệnh và không phải là dữ liệu. Control Connection sẽ mở trong suốt thời gian của phiên làm việc(telnet giữa 2 hệ thống).
  2. Client chuyển tiếp thông tin như Username, Password tới Server để thực hiện xác thực (authentication). Server sẽ trả lời bằng mã chấp nhận hay từ chối các request.
  3. Client gửi thêm các lệnh với tên tệp, Kiểu dữ liệu,… để vận chuyển, thêm luồng dữ liệu(Tức là chuyển tập tin từ máy khách đến máy chủ hoặc ngược lại). Server sẽ phản hồi với mã (reply code) chấp nhận hoặc từ chối.
  4. Khi dữ liệu đã sẵn sàng, 2 bên sẽ mở kết nối TCP trên cổng 20.
  5. Dữ liệu có thể được chuyển giữa Client và Server trên cổng 20. Dữ liệu vận chuyển được mã hóa theo 1 số định dạng bao gồm NTV-ASCII hoặc nhị phân.
  6. Khi quá trình vận chuyển dữ liệu được hoàn thành, phiên làm việc của FTP-Server  sẽ đóng lại Data Connection trên cổng 20. Nhưng vẫn giữ Control Connection trên cổng 21.
  7. Control Connection có thể được sử dụng để thiết lập truyền dữ liệu  khác hoặc đóng liên kết.

Một số lệnh sử dụng command sử dụng trên FTP

FTP reply

Mỗi lần User-PI gửi lệnh đến Server-PI qua Control Connection, server sẽ gửi lại phản hồi dưới dạng các code reply nhằm mục đích sau:

  • Xác nhận máy chủ đã được nhận lệnh.
  • Cho biết lệnh từ phía người dùng có được chấp nhận hay không, Nếu xảy ra lỗi thì đó là lỗi gì.
  • Cho biết nhiều thông tin khác nhau cho người dùng về phiên, ví dụ như là: tình trạng truyền file,…

Cấu trúc của FTP reply code: ?yz

Ý nghĩa của ? trong FTP reply code:

Tham số y cũng cung cấp thêm thông tin Như bảng dưới .z cũng cung cấp thêm thông tin nhưng ý nghĩa chính xác có thể khác nhau giữa các cài đặt.

Chú ý: Điều quan trọng cần lưu ý trong FTp, các Request không nhất thiết phải được thực hiện theo cùng một trình tự khi đã gửi, các giao dịch (transaction) và trả lời (reply) có thể được xen kẽ.

Tính bảo mật của FTP

Giống như phần lớn các giao thức cũ, phương pháp đăng nhập đơn giản của FTP là một sự kế thừa từ những giao thức ở thời kỳ đầu Internet. Ngày nay, nó không còn đảm bảo tính an toàn cần thiết trên môi trường Internet toàn cầu vì username va password được gửi qua kênh kết nối điều khiển dưới dạng clear text(không mã hóa).

Điều này làm cho bảo mật FTP đã định ra thêm nhiều tùy chọn chứng thực và mã hóa cho những ai muốn tăng thêm mức độ an toàn và phần mềm FTP của họ.

Kênh dữ liệu trong FTP

Kênh điều khiển được tạo ra giữa Server-PI và User-PI, sử dụng quá trình thiết lập kết nối và chứng thực được duy trì trong suốt phiên kết nối của FTP. Các lệnh và các hồi đáp được trao đổi giữa các bộ phận PI(Protocol Interpreter) qua kênh điều khiển, nhưng dữ liệu thì không.

Mỗi khi cần phải truyền dữ liệu giữa các server và client, một kênh dữ liệu cần phải được tạo ra. Kênh dữ liệu kết nối bộ phận User-DTP và Server-DTP. Kết nối này cần thiết cho hoạt động truyền file trực tiếp (Gửi hoặc nhận một file) cũng như với việc truyền dữ liệu ngầm Như là một danh sách file trong thư mục nào đó trên server.

Để tạo ra kênh dữ liệu, FTP sử dụng 2 phương thức khác nhau: Normal (Active) Data Connection (mặc định) và Passive Data Connection.

Khác biệt giữa 2 phương thức này là phía Client hay bên Server đưa ra yêu cầu khởi tạo kết nối.

  1. Normal (Active) Data Connections

Phương thức tạo kết nối dữ liệu bình thường hay còn gọi là Kết nối kênh dữ liệu ở dạng chủ động.

Phía Server-DTP tạo kênh dữ liệu bằng cách mở một cổng kết nối tới User-DTP.Server sử dụng cổng đặc biệt được dành riêng cho kết nối dữ liệu là cổng số 20. Trên máy Client, cổng mặc định được sử dụng chính là cổng được sử dụng để kết nối điều khiển, nhưng Server sẽ thường chọn mỗi cổng khác nhau cho mỗi chuyển giao.

  1. Passive Data Connections
    Phương thức tạo kết nối bị động.
  • Server sẽ chấp nhận một yêu cầu kết nối dữ liệu được khởi tạo từ Client.
  • Server trả lời lại phía client với địa chỉ IP cũng như địa chỉ cổng mà server sẽ sử dụng.
  • Sau đó phía Server-DTP lắng nghe trên cổng này một kết nối TCP đến từ User-DTP.
  • Theo mặc định, phía Client sẽ sử dụng cùng coognr mà nó sử dụng cho Control Connection như trong trường hợp chủ động. Tuy nhiên, Trong phương pháp này, Client cũng có thể chọn một cổng khác cho Data Connection nếu cần thiết.

Các phương thức truyền dữ liệu trong FTP

Khi Client-DTP và Server-DTP thiết lập xong kênh dữ liệu, dữ liệu sẽ được truyền trực tiếp từ phá Client tới phía Server, hoặc ngược lại, tùy theo các lệnh được sử dụng. Do thông tin điều khiển được gửi đi trên kênh điều khiển, nên toàn bộ kênh dữ liệu có thể được sử dụng để truyền dữ liệu. FTP có ba phương thức truyền dữ liệu, đó là : stream mode, block mode compressed mode.

Stream mode

  • Dữ liệu truyền đi liên tiếp dưới dạng các byte không cấu trúc.
  • Thiết bị gửi chỉ đơn thuần đẩy luồng dữ liệu qua kết nối TCP tới phía nhận.
  • Không có trường tiêu đề nhất định.
  • Không có cấu trúc dạng Header, nên việc báo hiệu kết thúc file sẽ đơn giản được thực hiện khi thiết bị gửi ngắt kênh kết nối dữ liệu khi đã truyền dữ liệu xong.
  • Được sử dụng nhiều nhất trong 3 phương thức triển khai FTP thực tế, Do:
  • Là phương thức Mặc định và đơn giản nhất.
  • Là phương thức phổ biến nhất, vì nó xử lý các file chỉ đơn thuần là xử lý dòng Byte, mà không để ý tới nội dung.
  • Không tốn 1 lượng Byte “overload” nào để thông báo Header.

Block mode

  • Phương thức truyền dữ liệu mang tính chất quy chuẩn hơn.
  • Dữ liệu được chia thành nhiều khối nhỏ và đóng gói thành các FTP block.
  • Mỗi block có 1 trường header 3 byte: Báo hiệu độ dài, và chứa thông tin về các khối dữ liệu đang được gửi.
  • Một thuật toán được sử dụng để kiểm tra các dữ liệu đã truyền đi. Và để phát hiện, Khởi tạo lại đối với một phiên truyền dữ liệu đã bị ngắt kết nối.

Compressed mode ( Chế độ nén)

  • Phương thức truyền dữ liệu sử dụng 1 kỹ thuật nén đơn giản, là “ run-length encoding (mã hóa chiều dài)” – có tác dụng phát hiện và xử lý các đoạn lặp trong dữ liệu được truyền đi để giảm chiều dài của toàn bộ thông điệp.
  • Thông tin sau khi được nén, sẽ được xử lý như block mode , với trường header.
  • Trong thực tế. việc nén dữ liệu thường được thực hiện ở chỗ khác, làm cho phương thức Compressed mode trở nên không cần thiết

Dữ liệu trong FTP

Các tập tin được coi là một tập hợp các byte.FTP không quan tâm nội dung tệp tin, suex chỉ đơn giản di chuyển các tệp tin, các byte cùng 1 thời điểm, từ nơi này sang nơi khác.

FTP Data Type:

Phần đầu tiên của thông tin có thể được đưa ra về tệp tin là kiểu dữ liệu của nó.

Có 4 kiểu dữ liệu khác nhau dược quy định trong chuẩn của FTP.

  •  ASCII: File văn bản
  • EBCDIC: tương tự ASCII nhưng sử dụng kiểu ký tự do IBM đặt.
  • Image: Các tệp tin không có cấu trúc nội bộ chính thức.
  • Local: Kiểu dữ liệu này được sử dụng để sử lý các tệp tin có thể lưu trữ dữ liệu trong Byte Logic. Cách xác định loại này cùng với cách dữ liệu có cấu trúc cho phép dữ liệu được lưu trữ trên hệ thống đích một cách phù hợp với đại diện local của nó.

Trong thực tế, hai loại kiểu dữ liệu thường xuyên nhất được sử dụng là ASCII và Image.

Kiểu ASCII được sử dụng cho các tệp tin văn bản. và cho phép chúng được Di chuyển giữa các hệ thống với dòng kết thúc mã chuyển đổi tự động. Loại Image được sử dụng cho các tệp tin nhị phân, Chẳng hạn như đồ họa hình ảnh, tập tin ZIP và các dữ liệu khác. Nó cũng thường được gọi là kiểu nhị phân và lý do đó.

FTP Format Control

Đối với các loại ASCII và EBCDIC, FTP xác định một tham số tùy chọn được gọi là “Format Control”(điều khiển định dạng), nó cho phép người dùng chỉ định một đại diện cụ thể cho cách sử dụng định dạng dọc để mô tả tệp.

Các tùy chọn định dạng kiểm soát định dạng được tạo ra cho mục đích cụ thể đúng cách xử lý các tệp tin chuyển giao từ các thiết bị máy chủ đến máy in. Nó không được sử dụng ngày nay, hoặc nếu nó được sử dụng, Nó chỉ là trong ứng dụng đặc biệt.

Tùy chọn trong FTP Format COntrol :

  • Non Print: Đây là tùy chọn mặc định, cho biết không có định dạng dọc
  • Telnet Format: Tệp sử dụng các ký tự điều khiển định dạng dọc, Như được chỉ định trong giao thức telnet.
  • Carriage Control/Fortran : Tệp sử dụng kí tự điều khiển được định dạng đưa ra làm ký tự đầu tiên của mỗi dòng, như được xác định cho ngôn ngữ lập trình Fortran.

FTP Data Structures 

Ngoài việc xác định một loại dữ liệu tệp tin, ta cũng có thể xác định cấu trúc tệp tin theo 3 cách:

  • File Structure : Tệp là một luồng byte liền kề không có cấu trúc bên trong. Đây là cách mặc định và được sử dụng hầu hết cho các loại tệp.
  • Record Structure : Tệp bao gồm tập hợp các bản ghi, mỗi bản ghi được phân định bằng đánh dấu end-of-record. Cấu trúc bản ghi có thể sử dụng cho các tệp văn bản ASCII, nhưng chúng thường được gửi với các cấu trúc tệp thông thường sử dụng kiểu dữ liệu ASCII.
  • Page Structure : tệp chứa 1 trang dữ liệu được lập chỉ mục đặc biệt. Cấu trúc này không được sử dụng phổ biến. nó tạo ra cho một máy tính cỏ xưa được sử dụng trong ARPAnet đời đầu.

Was this article helpful?

Related Articles