CƠ SỞ LÝ THUYẾT
Hệ điều hành Linux
Vào năm 1991, Linus Torvalds, khi đang học tại đại học Helsinki, đã nảy sinh ý tưởng về một hệ điều hành mới nhằm thay thế hệ điều hành cũ kỹ trong giáo dục Ông đã bắt đầu viết những dòng lệnh đầu tiên của Linux, từ đó đặt nền tảng cho sự phát triển mạnh mẽ của hệ điều hành này ngày nay.
Sau 3 năm nghiên cứu không ngừng, ông đã cho ra mắt hệ điều hành đầu tiên là Linux 1.0, đánh dấu bước khởi đầu cho một đế chế mạnh mẽ, cạnh tranh trực tiếp với Windows và Mac OS.
Linux có nhiều phiên bản nổi tiếng như Ubuntu, Debian, Fedora, Kali, Red Hat và PopOS! Trong số đó, Ubuntu, một nhánh của Debian Linux, được coi là hệ điều hành sử dụng nhân Linux phổ biến nhất.
Hình 1 Giao diện hệ điều hành Lubuntu a Ưu điểm nổi bật của hệ điều hành Linux
- Mượt mà với cả “máy yếu”
- Hoạt đổng ổn định, hiệu năng cao
- Bảo mật cao b Nhược điểm của hệ điều hành Linux
- Ứng dụng hỗ trợ không được phong phú
- Một số nhà sản xuất không sản xuất Driver cho Linux
- Khá mất thời gian để làm quen
Giao thức TCP và UDP
Giao thức UDP là một phần quan trọng trong tầng giao vận của giao thức TCP/IP, cho phép gửi tin nhắn đến các máy chủ khác trong mạng Internet một cách hiệu quả.
TCP là giao thức truyền tải hướng kết nối, yêu cầu thiết lập kết nối với đầu xa trước khi truyền dữ liệu Quá trình này được gọi là tiến trình bắt tay 3 bước (three-way handshake).
- Cơ chế đánh số thứ tự gói tin (sequencing)
- Có cơ chế báo nhận (Acknowledgement)
- Phục hồi dữ liệu bị mất trên đường truyền
- Cơ chế full-duplex (truyền và nhận dữ liệu cùng lúc)
- Tránh tắc nghẽn (Flow control) c Cấu trúc gói tin TCP
Hình 2 Cấu trúc gói tin TCP
Thành phần Chức năng/ Đặc điểm
Source port (16 bit) Số hiệu của cổng tại máy tính gửi Destination port (16 bit) Số hiệu của cổng tại máy tính nhận
Sequence number (32 bit) Dùng để đánh số thứ tự gói tin (từ số sequence nó sẽ tính ra được số byte đã được truyền)
Acknowledge number (32 bit) Dùng để báo đã nhận được gói tin nào và mong nhận được byte mang số thứ tự nào tiếp theo
Header length (4 bit) Cho biết toàn bộ header dài bao nhiêu tính theo đơn vị word Các bit reserved (4 bit) Đều được thiết lập bằng 0
Các bit control (9 bit) Các bit dùng để điều khiển cờ (flag) ACK, cờ
Window size (16 bit) Số lượng byte được thiết bị sẵn sàng tiếp nhận Checksum (16 bit) Kiểm tra lỗi của toàn bộ TCP Segment
Urgent Pointer (16 bit) Sử dụng trong trường hợp cần ưu tiên dữ liệu Options (tối đa 32 bit) Cho phép thêm vào TCP các tính năng khác
Data Dữ liệu của tầng ứng dụng
Bảng 1 Chi tiết thành phần cấu trúc gói tin TCP d Cách thức hoạt động
- Phiên TCP được thiết lập qua bắt tay 3 bước
Hình 3 Mô tả thiết lập phiên FTP
1.2.2 Giao thức UDP a Khái niệm
Ngược lại với giao thức TCP, UDP là giao thức truyền tải không kết nối, cho phép truyền dữ liệu ngay lập tức mà không cần thiết lập kết nối trước Với phương thức truyền tải "best effort", UDP mang lại sự nhanh chóng trong việc gửi dữ liệu khi có thông tin cần truyền.
- Truyền tải dữ liệu nhanh
- Không đảm báo tính tin cậy
- Không đánh số thứ tự các đơn vị dữ liệu được truyền
- Không có cơ chế phục hồi dữ liệu c Cấu trúc gói tin UDP
- Cấu trúc gói tin UDP thì đơn giản hơn rất nhiều so với TCP
Hình 4 Cấu trúc gói tin UDP
Thành phần Chức năng/ Đặc điểm
Source port (16 bit) Xác định cổng của người gửi thông tin Destination port (16 bit) Xác định cổng nhận thông tin
Chiều dài UDP (16 bit) xác định kích thước tổng thể của datagram, bao gồm cả phần header và dữ liệu Chiều dài tối thiểu của gói tin là 8 byte khi không có dữ liệu, chỉ chứa header.
UDP checksum (16 bit) Kiểm tra lỗi của phần header và dữ liệu
Bảng 2 Chi tiết thành phần cấu trúc gói tin UDP d Cách thức hoạt động
- UDP hoạt động tương tự như TCP nhưng nó không cung cấp kiểm tra lỗi khi truyền gói tin
Khi một ứng dụng sử dụng UDP, các gói tin được gửi trực tiếp đến người nhận mà không cần xác nhận Người gửi không chờ đợi để đảm bảo rằng người nhận đã nhận được gói tin, mà tiếp tục gửi các gói tiếp theo Nếu bên nhận bỏ lỡ một vài gói tin, chúng sẽ không được gửi lại, dẫn đến việc mất thông tin Điều này cho phép thiết bị giao tiếp nhanh hơn.
Hình 5 Minh họa tổng quát UDP
1.2.3 So sánh TCP và UDP
Giống nhau: Đều là các giao thức mạng TCP/IP, có chức năng kết nối các máy lại với nhau và có thể gửi dữ liệu cho nhau…
Hướng kết nối Không hướng kết nối Độ tin cậy cao Độ tin cậy thấp
Gửi dữ liệu dạng luồng byte đảm bảo việc truyền dữ liệu một cách liên tục và ổn định, trong khi gửi đi datagram cho phép thất thoát gói tin Việc gửi đầy đủ gói tin là ưu điểm của phương thức truyền dữ liệu dạng luồng byte, nhưng không đảm bảo sự toàn vẹn của dữ liệu khi sử dụng datagram.
Có sắp xếp thứ tự các gói tin Không sắp xếp thứ tự các gói tin Tốc độ truyền chậm hơn UDP Tốc độ truyền nhanh
Bảng 3 So sánh TCP và UDP
Giao thức FTP
FTP (File Transfer Protocol) hay "Giao thức truyền tập tin" là một giao thức Internet thuộc tầng ứng dụng, thường được sử dụng để lưu trữ và trao đổi tệp qua mạng lưới truyền thông sử dụng giao thức TCP/IP.
Giao thức FTP là công cụ phổ biến cho việc truyền tải dữ liệu, giúp rút ngắn thời gian và đáp ứng nhu cầu chuyển giao nhanh chóng các tập tin có dung lượng lớn.
- 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
Kết nối điều khiển là kết nối TCP logic quan trọng được thiết lập khi phiên làm việc bắt đầu, cho phép các quá trình điều khiển giao tiếp với nhau Kết nối này được duy trì trong suốt phiên làm việc và chỉ truyền tải thông tin điều khiển như lệnh và phản hồi, không được sử dụng để truyền file.
Mỗi khi dữ liệu được truyền, một kênh kết nối TCP được khởi tạo, cho phép dữ liệu được truyền qua kênh này, được gọi là kênh dữ liệu Sau khi file được truyền xong, kênh sẽ bị ngắt, mang lại sự linh hoạt trong việc truyền tải dữ liệu Tuy nhiên, việc sử dụng các kênh riêng lẻ cũng tạo ra độ phức tạp cho FTP.
Hình 6 Minh họa tổng quát FTP
- 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 1 cổng trên Client để Server gửi lại 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ủa 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 vận 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 NVT-ASCII hoặc nhị phân (BINARY)
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
1.3.3 Active FTP và Passive FTP e Active FTP
Khách hàng sẽ kết nối từ một cổng N (N > 1023) đến cổng điều khiển 21 của máy chủ FTP Sau đó, khách hàng sẽ lắng nghe trên cổng N+1 và gửi lệnh "PORT N+1" đến máy chủ FTP Máy chủ sẽ thiết lập kết nối đến cổng dữ liệu của khách hàng thông qua cổng dữ liệu mặc định, cổng 20.
- Đứng ở góc độ Firewall Server thì để hỗ trợ cho chế độ Active FTP này cần phải mở những luồng xử lý sau
+ FTP Server phải mở port 21 để đón nhận tất cả kết nối tới của Client
+ FTP Server phải mở kết nối từ cổng 21 đến cổng > 1023 để trả lời yêu cầu của Client
+ FTP Server phải mở kết nối từ cổng 20 đến cổng > 1023 để tạo kết nối truyền dữ liệu với Client
+ FTP Server phải mở kết nối từ cổng > 1023 đến cổng 20 để xác nhận kết nối với Client
Hình 7 Minh họa hoạt động Active FTP
In Step 1, the Client connects to the Server's control port 21 from command port 1026 and sends the PORT 1027 command In Step 2, the Server acknowledges this with an ACK packet sent back to the Client Step 3 involves the Server initiating a connection from data port 20 to the Client's port 1027, which was provided in Step 1 Finally, the Client sends an ACK packet back to the Server, confirming the connection.
Khi sử dụng Active FTP, một vấn đề chính là khả năng mất kết nối ở phía Client, do Client không tự khởi tạo kết nối tới port data của Server Thay vào đó, Client chỉ thông báo cho Server rằng nó đang lắng nghe trên port 1027 để chờ kết nối từ Server Nếu có Firewall đứng trước Client, kết nối này có thể bị chặn, gây ra sự cố trong quá trình truyền tải dữ liệu.
- Một phương thức kết nối khác của FTP Client truy cập chế độ Passive bằng cách gửi một lệnh “PASV” đến Server
Khi khởi tạo kết nối, Client mở cổng N và N+1 (N > 1023) để kết nối tới cổng 21 của Server Thay vì gửi lệnh “PORT N+1” như trong chế độ Active, Client sẽ gửi lệnh “PASV” Server sau đó sẽ mở cổng P (P > 1023) và gửi thông tin cổng P đến Client trong gói tin phản hồi PASV Cuối cùng, Client sẽ khởi tạo kết nối từ cổng N+1 của mình tới cổng P trên Server để thực hiện việc truyền dữ liệu.
- Ở phía Server, để hỗ trợ chế độ Passive FTP này thì cần phải mở những luồng giao tiếp như sau:
+ FTP Server phải mở cổng 21 nhận kết nối từ mọi Client
+ FTP Server phải mở các kết nối từ cổng 21 đi tới các cổng > 1023 để trả lời (response) cho Client
+ FTP Server phải mở các cổng > 1023 để nhận kết nối cổng truyền dữ liệu từ phía Client
+ FTP Server phải mở các cổng > 1023 tới các cổng > 1023 để trả lời chấp nhận kết nối và truyền dữ liệu với Client
Hình 8 Minh họa hoạt động Passive FTP
In step 1, the client connects to the server on the command port and issues the PASV command In step 2, the server responds with PORT 1024, indicating the data port it is listening on Step 3 involves the client establishing a data connection from its data port to the server's designated port 1024 Finally, the server sends an ACK packet to confirm the connection This process highlights the differences between Active FTP and Passive FTP.
Client thiết lập kênh điều khiển, Server thiết lập kênh dữ liệu
Client thiết lập kênh điều khiển, kênh dữ liệu
Cung cấp bảo mật cho FTP Server Không cung cấp bảo mật cho FTP Server
Có thể gặp sự cố vì tường lửa Không gặp sự cố kết nối vì tường lửa
Không được sử dụng làm chế độ mặc định của trình duyệt Được sử dụng làm chế độ mặc định của Browser
FTP Client xác nhận kênh dữ liệu FTP Server xác nhận kênh dữ liệu Client gửi lệnh PORT đến Server Client gửi lệnh PASV đến Server
Bảng 4 So sánh Active FTP và Passive FTP
Giao thức TFTP
TFTP, viết tắt của Trivial File Transfer Protocol, là một công nghệ chuyển file giữa các thiết bị mạng, được phát triển vào những năm 1970 như một phiên bản đơn giản hóa của giao thức FTP TFTP cung cấp hỗ trợ FTP cho các máy tính có bộ nhớ hoặc ổ đĩa hạn chế Do tính không bảo mật trong quá trình truyền tệp, TFTP thường được sử dụng trong mạng cục bộ (LAN) để sao lưu, nhập cấu hình IOS cho các thiết bị switch, router, firewall, hoặc cài đặt license cho các thiết bị này.
Vào năm 1970, TFTP ra đời nhằm hỗ trợ các máy tính có bộ nhớ hoặc không gian ổ đĩa hạn chế, không thể cung cấp hỗ trợ FTP đầy đủ Hiện nay, TFTP đã trở thành một phần không thể thiếu trên các router băng thông rộng tiêu dùng và router mạng thương mại.
TFTP sử dụng giao thức UDP để truyền tải tệp, với cổng 69 là cổng lắng nghe yêu cầu từ máy khách Sau khi nhận được yêu cầu, máy chủ sẽ sử dụng một cổng trong khoảng cho phép để tiến hành giao tiếp và truyền tệp.
- Có tổng cộng 6 loại gói tin TFTP:
6 Xác nhận tùy chọn (OACK)
Bảng 5 Các loại gói tin TFTP
Một máy khách thường gửi yêu cầu RRQ để tải một tệp từ Server về máy của mình, trong khi đó, yêu cầu WRQ được gửi khi khách muốn lưu một tệp vào bộ nhớ của Server.
- Khi điều này được thực hiện, một kết nối được thiết lập và tệp được vận chuyển dưới dạng các gói nhỏ
- Tập tin được chia thành các gói nhỏ, trong đó mỗi gói mặc định sẽ có kích thước là
Khi kích thước gói tin là 512 byte, nếu header của WRQ hoặc RRQ có tùy chọn blocksize, kích thước gói tin sẽ bằng giá trị blocksize, ngoại trừ gói tin dữ liệu cuối cùng có kích thước nhỏ hơn gói tin dữ liệu trước đó.
Khi một gói dữ liệu được gửi từ máy A đến máy B, máy A sẽ chờ nhận thông báo xác nhận từ máy B rằng gói dữ liệu đã được nhận Sau khi nhận được gói xác nhận, máy A sẽ biết rằng quá trình truyền tải đã thành công.
A sẽ tiếp tục gửi gói dữ liệu tiếp theo cho đến khi nhận được gói xác nhận cho gói dữ liệu cuối cùng từ máy B.
Hình 9 Minh họa "Đọc" và "Ghi" của TFTP
Hình 10 Minh họa "Đọc" và "Ghi" khi có tùy chọn blocksize a Ứng dụng của TFTP
- Sao lưu cấu hình mạng
- Khởi động từ xa không cần ổ cứng
- Nâng cấp Firmware b Ưu điểm của giao thức TFTP
- Sử dụng giao thức UDP
- Dễ dàng thao tác và cài đặt
- Sử dụng ít bộ nhớ hơn
- Yêu cầu mã hóa ít hơn c Nhược điểm của giao thức TFTP
- Khó kiểm tra quyền truy cập vào tệp
- Chỉ nên hoạt động ở mạng nội bộ
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Phân tích yêu cầu và tìm kiếm giải pháp
2.1.1 Phân tích yêu cầu đề tài
Triển khai hệ thống lưu trữ và tải lên/ tải xuống tập tin dựa trên giao thức FTP/ TFTP Yêu cầu:
Xây dựng Client/Server FTP,TFTP có giao diện thân thiện, dễ sử dụng dựa trên nền tảng các giao thức đã tìm hiểu và nắm vững Đầu vào:
- Lựa chọn cách truyền/ tải tập tin theo FTP hoặc TFTP
- Sau khi đăng nhập (bắt buộc với FTP) thì duyệt cây thư mục để chọn tập tin tải lên/xuống Đầu ra:
- Các tập tin được tải lên/ xuống 1 cách hợp lệ tương ứng với giao thức đã chọn
Ứng dụng cho phép truyền tải file kích thước lớn (trên vài trăm Megabytes) và hoạt động trên hệ điều hành Lubuntu (đối với Server) và Windows (đối với Client) Được lập trình bằng ngôn ngữ Java và sử dụng JavaFX để phát triển giao diện, ứng dụng này tuân thủ các ràng buộc về thiết kế và thực thi.
STT Ràng buộc Lý do
1 - Ứng dụng dành cho Server chạy trên môi trường Linux
- Ứng dụng dành cho Client chạy trên môi trường Windows Đảm bảo yêu cầu của PBL về mạng và hệ điều hành
Bảng 6 Ràng buộc về thiết kế và thực thi c Yêu cầu phi chức năng
STT Loại thuộc tính chức năng Yêu cầu
1 Tính sẵn sàng/ khả dụng - Hệ thống có khả năng sử dụng bất cứ khi nào người dùng cần
2 Tính sử dụng được - Hệ thống có giao diện thân thiện với người dùng, dễ nhìn, dễ sử dụng
3 Tính dễ dàng di chuyển - Hệ thống dễ dàng vận hành truyền thông tốt trên 2 nền tảng hệ điều hành Windows và Linux
Bảng 7 Yêu cầu phi chức năng d Yêu cầu chức năng
- Chức năng cho FTP Server:
Hệ thống hỗ trợ cả FTP chủ động và thụ động, cho phép quản trị viên dễ dàng thêm, sửa hoặc xóa người dùng Ngoài ra, người dùng có thể bật hoặc tắt server một cách nhanh chóng Hệ thống cũng hiển thị danh sách người dùng đang kết nối, cùng với khu vực ghi lại log hoạt động của người dùng và server.
- Chức năng cho FTP Client:
Cho phép người dùng lựa chọn giữa chế độ Active và Passive FTP khi đăng nhập, đồng thời hỗ trợ các thao tác như tải lên, đổi tên, xóa và tải xuống file Giao diện hiển thị cây thư mục một cách trực quan, giúp người dùng dễ dàng thao tác chỉ bằng một cú nhấp chuột.
+ Mỗi người dùng có thư mục chính độc lập với người dùng khác Có thể tạo các thư mục con tùy vào nhu cầu
- Chức năng cho TFTP Server:
Bài viết này đề cập đến các tính năng quan trọng của TFTP Server, bao gồm khả năng thay đổi cổng lắng nghe, cho phép bật hoặc tắt server nhanh chóng, và thay đổi thư mục lưu trữ file Ngoài ra, server còn có khu vực hiển thị thông báo hoạt động, giúp người dùng dễ dàng theo dõi trạng thái của server.
- Chức năng cho TFTP Client:
Bài viết đề cập đến việc cho phép tùy chọn GET (lấy về) và PUT (đẩy lên) với file, đồng thời hỗ trợ chế độ truyền ASCII và BINARY Ngoài ra, người dùng có thể thay đổi kích thước blocksize để tăng tốc độ truyền dữ liệu.
Giải pháp cho đề tài
Hình 11 Mô hình ứng dụng cho đề tài
- Hệ điều hành: Windows 10, Lubuntu
- Java Development Kit (JDK) 15: Bộ công cụ phát triển cho Java
- JavaFX Software Development Kit (JDK) 15: Bộ công cụ phát triển cho JavaFX
- JavaFX Scene Builder: cho phép ta thiết kế giao diện ứng dụng JavaFX, không cần code
- Thư viện sử dụng: ControlsFX, FontAwesomeFX, JFoenix, Apache Commons Net, Apache FtpServer
Thiết kế hệ thống
Hình 12 Sơ đồ Use Case theo tác nhân User (FTP Client)
Hình 13 Sơ đồ Use Case theo tác nhân Admin (FTP Server)
Hình 14 Sơ đồ Use Case theo tác nhân User (TFTP Client)
Hình 15 Sơ đồ Use Case theo tác nhân Admin (TFTP Server)
TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
Triển khai
Hình 16 Giao diện đăng nhập dịch vụ FTP
Hình 17 Giao diện chính dịch vụ TFTP
Hình 18 Lựa chọn hướng truyền file cho TFTP
Hình 19 Lựa chọn chế độ truyền file cho TFTP
Hình 20 Lựa chọn tùy chọn blocksize cho TFTP
Hình 21 Giao diện người dùng kết nối thành công đến FTP Server (Active mode)
Hình 22 Giao diện người dùng kết nối thành công đến FTP Client (Passive mode)
Hình 23 Giao diện khi chọn chức năng tạo thư mục mới
Hình 24 Giao diện khi chọn chức năng tạo tệp tin
Hình 25 Giao diện khi chọn chức năng Upload
Hình 26 Giao diện khi chọn chức năng xóa
Hình 27 Giao diện khi chọn chức năng đổi tên
Hình 28 Giao diện khi chọn chức năng Download
Hình 29 Giao diện chính của TFTP Server
Hình 30 Giao diện chính của FTP Server
Đánh giá kết quả
- Đáp ứng được yêu cầu cơ bản của người dùng
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Nhìn chung, sau khi kết thúc đề tài chúng em đã đạt được những điều cơ bản sau đây:
- Hiểu thêm về hệ điều hành Linux, giao thức TCP, UDP và hai giao thức truyền/tải tập tin FTP, TFTP
- Hiểu biết nhiều hơn về các kỹ thuật và kỹ xảo trong lập trình Java
- Phân tích thiết kế theo mô hình Client – Server
- Nâng cao tinh thần tự học, tự nghiên cứu
- Hiểu được quy trình làm phần mềm và kĩ năng làm việc nhóm
II Ưu điểm và hạn chế
- Chương trình thực hiện được các yêu cầu đề ra của đề tài
- Bước đầu xây dựng thành công ứng dụng truyền/tải tập tin dựa trên giao thức FTP, TFTP đáp ứng được yêu cầu cơ bản của người dùng
Chương trình sở hữu giao diện đẹp mắt và thân thiện với người dùng Hệ thống công cụ và lệnh đơn giản giúp người dùng dễ dàng nắm bắt và sử dụng thành thạo ứng dụng một cách nhanh chóng.
Do thời gian phân tích và thiết kế hệ thống có hạn, nên không thể tránh khỏi một số thiếu sót trong quá trình thực hiện đề tài rộng và phong phú này.
Ứng dụng này hoạt động theo mô hình Client/Server và phục vụ một lượng người dùng lớn, do đó cần một máy chủ mạnh mẽ và ổn định để đáp ứng nhu cầu.
- Xử lý các lỗi chặt chẽ hơn trước khi đưa vào sử dụng
- Tối ưu việc sử dụng bộ nhớ
- Thường xuyên cập nhật các phiên bản để sửa lỗi cũng như bổ sung thêm nhiều chức năng phù hợp với nhu cầu của người dùng