Bối cảnh và vấn đề nghiên cứu
Trong xu thế phát triển của hạ tầng Internet toàn cầu, các dịch vụ truyền thông dữ liệu đã trở thành nền tảng thiết yếu phục vụ nhu cầu liên lạc, giải trí, nghiên cứu khoa học và thương mại của xã hội. Về mặt bản chất, Internet cũng như các mô hình mạng quy mô nhỏ hơn như mạng diện rộng (WAN) hay mạng cục bộ (LAN) đều hoạt động dựa trên các quy chuẩn truyền thông chung nhằm liên kết các hệ thống tính toán phân tán. Nhằm đáp ứng mục tiêu đào tạo sinh viên ngành Công nghệ thông tin có năng lực làm chủ kiến thức nền tảng về mạng máy tính và phát triển các ứng dụng mạng đa nền tảng, học phần Đồ án cơ sở ngành mạng được triển khai tại Bộ môn Mạng & Truyền Thông, Khoa Công nghệ Thông tin, Trường Đại học Bách Khoa – Đại học Đà Nẵng.
Đồ án được thực hiện bởi nhóm ba sinh viên: Mai Thế Dũng (MSSV: 102180118, Lớp 18TCLC_DT1), Nguyễn Viết Bửu (MSSV: 102190004, Lớp 19TCLC_DT1) và Sisanonh Thinnakone (MSSV: 102190392, Lớp 19TCLC_DT1), dưới sự hướng dẫn chuyên môn của thầy Nguyễn Tấn Khôi, hoàn thành vào tháng 12 năm 2021. Báo cáo tích hợp hai chủ đề nghiên cứu và thực nghiệm kỹ thuật cụ thể:
- Đề tài thuộc Nguyên lý hệ điều hành: "Tìm hiểu giao thức FTP – Xây dựng ứng dụng trao đổi file giữa App và máy tính" (cụ thể hóa thành mô hình App đóng vai trò FTP Server và máy tính cá nhân đóng vai trò FTP Client).
- Đề tài thuộc Mạng máy tính: "Quản lý cửa hàng áo quần Zefa Store" (nghiên cứu cơ sở lý thuyết phát triển ứng dụng web trên nền tảng React JS và kiến trúc Web API).
Mục tiêu và nhiệm vụ nghiên cứu được xác định bao gồm:
- Nghiên cứu toàn diện nguyên lý hoạt động, cấu trúc phân tầng và cơ chế truyền thông của giao thức FTP (File Transfer Protocol) trên nền giao thức TCP/IP.
- Thiết kế và cài đặt chương trình Client/Server bằng ngôn ngữ Java, cho phép nhiều người dùng kết nối đồng thời, theo dõi trạng thái người dùng trực tuyến và truyền tải tệp tin qua mạng thông qua cơ chế lập trình đa luồng (multithreading) và Socket.
- Nghiên cứu các công nghệ giao diện người dùng và dịch vụ web hiện đại, bao gồm thư viện React JS, công cụ quản lý trạng thái Redux, giải pháp Styled-components và tiêu chuẩn thiết kế dịch vụ RESTful Web API để áp dụng vào bài toán quản trị hệ thống bán hàng Zefa Store.
Đối tượng nghiên cứu là các giao thức mạng tầng giao vận và ứng dụng (TCP/IP, FTP, HTTP/HTTPS), kỹ thuật lập trình Socket trong Java, cùng kiến trúc giao tiếp client-server trên nền Web API. Phạm vi triển khai thực nghiệm giới hạn trong môi trường mạng cục bộ, thực thi trên hệ điều hành Microsoft Windows 10 và môi trường phát triển tích hợp NetBeans 12.5.
Cơ sở lý thuyết và phương pháp
Đồ án kết hợp nghiên cứu lý thuyết giao thức chuẩn và phương pháp thiết kế, xây dựng hệ thống phần mềm thực nghiệm.
Khung lý thuyết và mô hình kỹ thuật
Hệ thống hoạt động dựa trên các nền tảng lý thuyết mạng và kiến trúc phần mềm cốt lõi:
- Mô hình Client/Server: Máy chủ (Server) là hệ thống có bộ xử lý mạnh, quản lý tài nguyên, dữ liệu và duy trì hoạt động trong thời gian thực để tiếp nhận yêu cầu từ các máy khách (Client). Client là điểm tương tác của người dùng cuối, khởi tạo yêu cầu dịch vụ và nhận kết quả phản hồi từ server.
- Bộ giao thức TCP/IP, Port và Socket: TCP (Transmission Control Protocol) là giao thức hướng kết nối (connection-oriented), đảm bảo thứ tự thiết lập kết nối, truyền dữ liệu và kết thúc kết nối. Địa chỉ IP xác định định danh của máy trạm trên mạng. Cổng (Port) là chỉ số nguyên 2 byte (0 đến 65535) giúp chuyển dữ liệu chính xác đến từng tiến trình ứng dụng; trong đó dải từ 0 đến 1023 dành cho các dịch vụ chuẩn (HTTP: 80, Mail: 25, FTP: 21, Telnet: 23). Khái niệm Socket là sự kết hợp giữa địa chỉ IP và số hiệu Port để định vị một dịch vụ logic trên mạng.
- Giao thức truyền tệp FTP (File Transfer Protocol): FTP chạy trên nền TCP, sử dụng kiến trúc hai kênh logic tách biệt:
- Kênh điều khiển (Control Connection): Khởi tạo trên cổng 21 của Server, duy trì liên tục trong suốt phiên kết nối để trao đổi lệnh và mã hồi đáp giữa tiến trình diễn giải giao thức phía người dùng (User-PI) và phía máy chủ (Server-PI). Kênh này không dùng để chuyển dữ liệu tệp tin.
- Kênh dữ liệu (Data Connection): Thiết lập độc lập giữa tiến trình truyền dữ liệu phía người dùng (User-DTP) và phía máy chủ (Server-DTP) mỗi khi có yêu cầu truyền tệp hoặc chuyển danh sách thư mục, sau đó tự động đóng lại khi hoàn tất truyền dữ liệu.
Giao thức FTP hỗ trợ hai chế độ kết nối kênh dữ liệu:
| Đặc tính |
Kết nối chủ động (Active FTP) |
Kết nối bị động (Passive FTP) |
| Bên khởi tạo kênh dữ liệu |
Phía Server khởi tạo kết nối |
Phía Client khởi tạo kết nối |
| Cổng sử dụng trên Server |
Cổng 20 cố định |
Cổng ngẫu nhiên (do Server cấp, ví dụ: 2223) |
| Lệnh điều khiển sử dụng |
Lệnh PORT (do Client gửi để báo số cổng) |
Lệnh PASV (do Client gửi yêu cầu chế độ bị động) |
| Xử lý tường lửa (Firewall) |
Dễ gặp lỗi ngắt mạch do tường lửa chặn kết nối ngược |
Khắc phục hạn chế tường lửa chặn kết nối từ bên ngoài vào Client |
FTP cung cấp ba phương thức truyền dữ liệu:
- Stream mode: Dữ liệu gửi đi dưới dạng luồng byte không cấu trúc liên tiếp, không dùng tiêu đề (header) riêng, kết thúc tệp bằng việc ngắt kênh TCP. Đây là phương thức mặc định, phổ biến và tối ưu nhất do không tốn byte quản lý thừa.
- Block mode: Dữ liệu chia thành các khối nhỏ đóng gói dạng FTP block, mỗi block mang header 3 byte báo hiệu độ dài và thông tin khối, có thuật toán phát hiện và khôi phục phiên truyền bị gián đoạn.
- Compressed mode: Sử dụng thuật toán nén Run-length encoding (RLE) để tìm các chuỗi lặp nhằm giảm dung lượng truyền tải, sau đó đóng gói có header tương tự Block mode.
- Nền tảng công nghệ phần mềm:
- Java Networking: Ứng dụng lớp
ServerSocket (mở cổng, chờ kết nối với phương thức accept()) và Socket (kết nối máy chủ qua IP/Port, lấy luồng dữ liệu getInputStream(), getOutputStream(), close()), kết hợp xử lý đa luồng với Thread và Runnable, giao diện với java.awt.event và xử lý I/O với java.io.
- React JS: Thư viện JavaScript của Facebook xây dựng giao diện dựa trên Component stateless có khả năng tái sử dụng cao, cú pháp JSX biên dịch nhanh, và cơ chế Virtual DOM giúp so sánh điểm khác biệt để cập nhật giao diện mà không tải lại toàn trang.
- Quản lý dữ liệu trong React: Sử dụng
Props và State để điều khiển hiển thị thành phần giao diện.
| Tiêu chí |
Props |
State |
| Khái niệm |
Thuộc tính truyền từ bên ngoài vào component |
Trạng thái dữ liệu nội tại do component tự quyết định |
| Khởi tạo từ component cha |
Có |
Có |
| Thay đổi bởi component cha |
Có |
Không |
| Giá trị mặc định bên trong component |
Có |
Có |
| Thay đổi bên trong component |
Không (bất biến như hàm thuần khiết) |
Có (thay đổi qua cơ chế cập nhật trạng thái) |
| Kích hoạt kết xuất lại (re-render) |
Có |
Có |
- Styled-components và Redux: Styled-components triển khai kỹ thuật CSS-in-JS dựa trên tagged template literals; Redux cung cấp công cụ quản lý trạng thái dự đoán được (predictable state management) lấy cảm hứng từ ngôn ngữ Elm và kiến trúc Flux.
- Kiến trúc Web API / RESTful API: Framework ASP.NET Web API xây dựng dịch vụ HTTP theo tiêu chuẩn RESTful. Giao tiếp qua các phương thức HTTP ứng với các thao tác dữ liệu (CRUD):
GET (Select/Đọc), POST (Create/Tạo mới), PUT (Update/Cập nhật), DELETE (Delete/Xóa). Hệ thống không dùng session và cookie mà định danh bằng access_token trên mỗi yêu cầu, dữ liệu trao đổi có cấu trúc JSON tiêu chuẩn.
Phương pháp nghiên cứu
Nhóm tác giả sử dụng phương pháp khảo sát tài liệu chuẩn kỹ thuật kết hợp với phương pháp thiết kế và phát triển phần mềm theo hướng mô đun hóa:
- Khảo sát lý thuyết về quy trình bắt tay và chứng thực (lệnh
USER, PASS, ACCT).
- Xây dựng mô hình tương tác đa luồng trên máy chủ để điều phối phiên làm việc của nhiều người dùng cùng lúc.
- Lập trình thực nghiệm, kiểm thử chức năng truyền tệp tin qua Socket trên mạng cục bộ và tài liệu hóa cấu trúc mã nguồn.
Thiết kế và triển khai
Hệ thống ứng dụng trong đồ án được thiết kế xoay quanh hai module kỹ thuật độc lập tương ứng với hai đề tài thành phần.
Ứng dụng truyền tệp tin Client/Server (Phần I)
Kiến trúc chương trình truyền tệp bằng Java phân chia rõ ràng giữa phía máy chủ và máy khách:
-
Phía Server:
MainForm.java: Giao diện chính của máy chủ, chứa các nút chức năng "Khởi động Máy Chủ", "Dừng Máy Chủ" và khung hiển thị thông báo nhật ký hệ thống (appendMessage).
ServerThread.java: Tiến trình chạy nền, khởi tạo đối tượng ServerSocket lắng nghe các yêu cầu kết nối từ client; khi có kết nối mới, tiến trình sinh ra một thể hiện SocketThread để quản lý riêng phiên làm việc đó.
SocketThread.java: Quản lý việc đọc/ghi dữ liệu của một client cụ thể qua DataInputStream và DataOutputStream. Luồng này xử lý logic xác thực tên người dùng: nếu nickname chưa tồn tại thì cho phép đăng nhập; nếu nickname bị trùng, server buộc phiên đăng nhập trước đó phải đăng xuất và tiếp nhận phiên đăng nhập mới. Đồng thời, luồng này chịu trách nhiệm gửi danh sách người dùng đang online, thông báo trạng thái đăng xuất và làm trung gian chuyển tiếp luồng tệp tin giữa hai client.
-
Phía Client:
LoginForm.java: Giao diện đăng nhập, cho phép người dùng nhập địa chỉ IP máy chủ, cổng kết nối và nickname tự chọn.
MainForm.java: Giao diện làm việc chính sau khi đăng nhập thành công, hiển thị danh mục người dùng đang trực tuyến trên server.
ClientThread.java: Tiến trình chạy thường trực tại máy khách để nhận các thông điệp bất đồng bộ gửi về từ máy chủ (cập nhật danh sách online, nhận thông báo yêu cầu nhận file).
SendFileThread.java: Tiến trình chuyên biệt được kích hoạt khi người dùng nhấn nút "Gửi File". Tiến trình này mở luồng kết nối tới server, gửi yêu cầu truyền tải dữ liệu tệp và trực tiếp đẩy mảng byte của tệp tin qua mạng tới máy nhận.
Kiến trúc hệ thống Quản lý cửa hàng Zefa Store (Phần II)
Ứng dụng quản trị Zefa Store được thiết kế dựa trên mô hình tách biệt Frontend và Backend:
- Tầng giao diện (Frontend): Ứng dụng React JS được module hóa thành các component lồng nhau (Multiple Components). Các component duy trì tính độc lập và hạn chế lưu trữ trạng thái cục bộ để tăng khả năng tái sử dụng. Tầng giao diện sử dụng Redux làm kho lưu trữ trạng thái ứng dụng tập trung (Store), giúp đồng bộ dữ liệu sản phẩm trên toàn bộ các view. Giao diện được định dạng linh hoạt bằng Styled-components mà không cần dùng tệp CSS bên ngoài.
- Tầng dịch vụ (Backend Web API): Cung cấp các giao diện lập trình ứng dụng RESTful API chạy trên nền giao thức HTTP/HTTPS. Mọi giao dịch đọc, thêm, cập nhật hoặc xóa dữ liệu sản phẩm trong cửa hàng đều được chuẩn hóa qua các HTTP verbs:
| Thao tác CRUD |
Phương thức HTTP |
Chức năng trong hệ thống Zefa Store |
| Create |
POST |
Tạo mới thông tin sản phẩm, danh mục quần áo |
| Read |
GET |
Truy vấn và trả về danh sách hoặc chi tiết sản phẩm |
| Update |
PUT |
Cập nhật số lượng, đơn giá, thông tin sản phẩm |
| Delete |
DELETE |
Xóa sản phẩm khỏi hệ thống quản lý |
Các gói tin phản hồi từ Server API tuân thủ cấu trúc đối tượng JSON chuẩn dạng:
{
"data": {
"id": "1",
"name": "1"
}
}
Môi trường cài đặt và thử nghiệm toàn bộ hệ thống là máy tính cá nhân chạy hệ điều hành Microsoft Windows 10, sử dụng môi trường lập trình NetBeans IDE phiên bản 12.5.
Nội dung chính theo từng chương
PHẦN I. Tìm hiểu giao thức FTP – Xây dựng ứng dụng trao đổi file giữa App và máy tính
CHƯƠNG 1. MỞ ĐẦU
Chương này trình bày lý do chọn đề tài xuất phát từ nhu cầu thực tiễn của công nghệ mạng Internet và mục tiêu môn học Lập trình mạng. Tác giả luận giải việc lựa chọn ngôn ngữ Java làm công cụ phát triển ứng dụng dựa trên ba ưu điểm cốt lõi: khả năng lập trình đa tiến trình hỗ trợ các tác vụ chạy song song; tính độc lập nền tảng giúp mã nguồn thực thi trên nhiều thiết bị và hệ điều hành; và hệ thống thư viện mạng mạnh mẽ, trọng tâm là các lớp Socket và ServerSocket.
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Chương 2 tập trung phân tích sâu các nguyên lý kỹ thuật:
- Trình bày kiến trúc hai thành phần của mô hình Client/Server.
- Khảo sát cơ chế bắt tay của giao thức TCP, vai trò định tuyến của địa chỉ IP, không gian định danh 2 byte của cổng Port (0 - 65535) và bản chất của Socket.
- Phân tích chi tiết giao thức FTP: cơ chế chia tách kênh điều khiển (cổng 21) và kênh dữ liệu (cổng 20 hoặc cổng động); cấu trúc 4 khối chức năng logic (User-PI, User-DTP, Server-PI, Server-DTP); quy trình chứng thực tài khoản thông qua lệnh
USER và PASS; cơ chế hoạt động của Active FTP (server chủ động kết nối tới client qua cổng 20) và Passive FTP (client chủ động kết nối tới cổng ngẫu nhiên của server qua lệnh PASV).
- Khảo sát ba phương thức truyền dữ liệu: Stream mode, Block mode và Compressed mode (nén RLE).
- Trình bày chi tiết cú pháp các hàm mạng trong Java:
public Socket(int port), public accept(), getInputStream(), getOutputStream(), close().
CHƯƠNG 3 : PHÂN TÍCH THIẾT KẾ CHƯƠNG TRÌNH
Chương 3 thiết lập các yêu cầu chức năng cho phần mềm truyền tệp:
- Phía Client: Đăng nhập bằng nickname tùy chọn; nhận danh sách tài khoản đang trực tuyến; gửi tệp tin tới client khác; tiếp nhận tệp tin và thực hiện đăng xuất.
- Phía Server: Khởi tạo cổng kết nối; xử lý đăng nhập (cho phép đăng nhập mới nếu chưa có, hoặc buộc tài khoản cũ thoát ra nếu phát hiện trùng nickname); cập nhật danh sách trực tuyến; điều phối việc gửi file; giám sát lịch sử đăng nhập/đăng xuất.
- Thiết kế kiến trúc lớp và luồng:
MainForm, LoginForm, ServerThread, SocketThread, ClientThread.
CHƯƠNG 4 : TRIỂN KHAI THỰC HIỆN VÀ KẾT QUẢ
Chương 4 tổng kết quá trình cài đặt phần mềm trên Windows 10 và NetBeans 12.5. Tác giả công bố các giao diện thực tế của chương trình bao gồm: Giao diện máy chủ lúc khởi động và dừng; Giao diện đăng nhập client; Giao diện chính hiển thị danh sách người dùng online; Hộp thoại gửi tệp tin. Chương này cũng trích xuất cấu trúc các đoạn mã nguồn Java chính trên máy chủ (mainform.java, các thread kết nối dữ liệu) và máy khách (xử lý sự kiện đăng nhập, hiển thị danh sách online, luồng gửi file SendFileThread).
PHẦN II. Mạng Máy Tính – Đề tài: Quản lý cửa hàng áo quần Zefa Store
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
Chương này hệ thống hóa các công nghệ được sử dụng để phát triển hệ thống Zefa Store:
- Giới thiệu thư viện React JS do Facebook phát triển, phân tích ưu thế hiệu năng của Virtual DOM trong việc tính toán bản vá (patch) và cập nhật giao diện mà không cần tải lại toàn bộ trang web.
- Trình bày cú pháp JSX và tính đóng gói của Component; so sánh chi tiết tính chất giữa
Props (bất biến, truyền từ ngoài vào) và State (nội tại, thay đổi bên trong component); giới thiệu giải pháp Styled-components và công cụ quản lý trạng thái Redux.
- Tổng quan về Web API (ASP.NET Web API) và kiến trúc RESTful API; so sánh giao thức HTTP truyền văn bản rõ với HTTPS được mã hóa bảo mật bằng thuật toán bất đối xứng; đặc tả chi tiết 4 phương thức CRUD (
GET, POST, PUT, DELETE), cơ chế xác thực thông qua access_token và định dạng trao đổi dữ liệu JSON.
CÁC NỘI DUNG PHÂN TÍCH, THIẾT KẾ VÀ TRIỂN KHAI HỆ THỐNG
Theo danh mục mục lục của báo cáo, các phần tiếp theo bao gồm: "PHÂN TÍCH THIẾT KẾ HỆ THỐNG" (phân tích chức năng và thiết kế chương trình quản lý cửa hàng), "TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ" (trình bày các công cụ sử dụng và đánh giá hoạt động của hệ thống Zefa Store), và phần "KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN".
Kết quả và đóng góp
Báo cáo đồ án đạt được các kết quả kỹ thuật và đóng góp học thuật cụ thể như sau:
Hạn chế và hướng nghiên cứu tiếp
Căn cứ vào nội dung và phạm vi nghiên cứu được công bố trong văn bản, đồ án tồn tại một số hạn chế và định hướng phát triển:
-
Hạn chế:
- Đối với ứng dụng FTP bằng Java: Việc truyền file mới triển khai ở mức độ gửi dữ liệu tuần tự trực tiếp giữa các trạm qua máy chủ, chưa hỗ trợ cơ chế khôi phục phiên truyền khi đứt kết nối (resume transfer) như chuẩn Block mode của FTP thực tế. Hệ thống chưa tích hợp thuật toán mã hóa dữ liệu trên đường truyền, do đó các thông tin trao đổi và nội dung tệp tin truyền đi ở dạng rõ (plain text), tiềm ẩn nguy cơ mất an toàn thông tin khi triển khai ngoài mạng Internet công cộng.
- Đối với ứng dụng Zefa Store: Nội dung văn bản tập trung phần lớn vào việc trình bày cơ sở lý thuyết công nghệ (React JS, Redux, RESTful Web API), các số liệu kiểm thử hiệu năng tải và đánh giá khả năng chịu tải của hệ thống chưa được ghi nhận chi tiết trong báo cáo.
-
Hướng phát triển:
- Bổ sung cơ chế bảo mật cho ứng dụng Java Socket bằng cách triển khai giao thức SSL/TLS để mã hóa dữ liệu và kênh điều khiển.
- Nâng cấp ứng dụng truyền tệp để hỗ trợ tính năng truyền tải tệp tin dung lượng lớn ngắt quãng, áp dụng các thuật toán nén dữ liệu trước khi gửi nhằm tối ưu hóa băng thông mạng.
- Hoàn thiện toàn diện chức năng giao dịch và thanh toán trực tuyến cho hệ thống quản lý cửa hàng thời trang Zefa Store, tích hợp cơ chế phân quyền người dùng thông qua mã thông báo
access_token trên tầng Web API.
Giá trị tham khảo
Đồ án là tài liệu học tập và tham khảo kỹ thuật phù hợp cho:
- Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật Mạng và An toàn thông tin đang thực hiện các học phần: Nguyên lý hệ điều hành, Lập trình mạng, Mạng máy tính và Phát triển ứng dụng Web.
- Lập trình viên đang bước đầu tiếp cận kỹ thuật lập trình Socket trong Java: Báo cáo cung cấp đầy đủ các bước từ khởi tạo
ServerSocket, quản lý luồng dữ liệu DataInputStream/DataOutputStream đến việc điều phối nhiều kết nối đồng thời thông qua các Thread độc lập.
- Người nghiên cứu giao thức mạng: Phần phân tích về cơ chế hoạt động của giao thức FTP (kênh điều khiển cổng 21, kênh dữ liệu cổng 20, cơ chế Active/Passive FTP và các phương thức Stream/Block/Compressed) được tác giả diễn giải chi tiết, rõ ràng và có tính trực quan cao.
- Các nhà phát triển Frontend: Bảng tổng hợp so sánh các thuộc tính của
Props và State trong React JS, cùng phân tích về cơ chế Virtual DOM là tư liệu hữu ích cho việc chuẩn hóa kiến thức nền tảng về Single Page Application (SPA).
Câu hỏi thường gặp
1. Tại sao giao thức FTP lại chia quá trình truyền thông thành hai kênh logic riêng biệt thay vì chỉ dùng một kênh TCP như các giao thức khác?
Giao thức FTP tách biệt tiến trình thành kênh điều khiển (Control Connection, cổng 21) và kênh dữ liệu (Data Connection, cổng 20 hoặc cổng động) nhằm tạo sự linh hoạt trong truyền thông. Kênh điều khiển được duy trì xuyên suốt phiên làm việc chỉ để truyền lệnh và hồi đáp mã trạng thái giữa Server-PI và User-PI mà không dùng để gửi tệp. Kênh dữ liệu chỉ được khởi tạo khi có nhu cầu truyền tải tệp tin thực tế hoặc lấy danh sách thư mục giữa Server-DTP và User-DTP, sau đó tự động ngắt kết nối khi hoàn tất, giúp tối ưu hóa băng thông đường truyền.
2. Điểm khác nhau cơ bản giữa Active FTP và Passive FTP là gì?
Sự khác biệt cốt lõi nằm ở phía thiết bị khởi tạo kênh dữ liệu. Trong kết nối chủ động (Active FTP), sau khi nhận lệnh PORT từ client, máy chủ (Server-DTP) sẽ chủ động mở kênh kết nối từ cổng 20 của nó tới cổng do client chỉ định. Trong kết nối bị động (Passive FTP), client gửi lệnh PASV, máy chủ sẽ phản hồi một địa chỉ cổng ngẫu nhiên (ví dụ: cổng 2223) và lắng nghe yêu cầu; sau đó client (User-DTP) sẽ là bên chủ động khởi tạo kết nối tới cổng này của máy chủ, giúp vượt qua các giới hạn chặn kết nối từ bên ngoài của bức tường lửa phía client.
3. Ba phương thức truyền dữ liệu trong giao thức FTP hoạt động như thế nào?
- Stream mode: Dữ liệu truyền đi dưới dạng các byte không cấu trúc liên tiếp, không có header riêng; việc kết thúc tệp được đánh dấu đơn giản bằng cách ngắt kênh TCP. Đây là phương thức mặc định và hiệu quả nhất.
- Block mode: Dữ liệu được chia thành các khối nhỏ, mỗi khối có header 3 byte báo hiệu độ dài và thông tin trạng thái, có thuật toán kiểm tra để khôi phục các phiên truyền bị đứt đoạn.
- Compressed mode: Sử dụng thuật toán nén Run-length encoding (RLE) để triệt tiêu các đoạn lặp trong chuỗi dữ liệu trước khi đóng gói truyền đi nhằm giảm thiểu dung lượng gói tin.
4. Ứng dụng truyền file bằng Java của nhóm tác giả xử lý trường hợp hai người dùng đăng nhập cùng một nickname như thế nào?
Theo quy trình thiết kế tại máy chủ (SocketThread.java), khi tiếp nhận yêu cầu đăng nhập từ máy khách: nếu nickname chưa từng xuất hiện trên hệ thống thì cho phép đăng nhập thành công; trường hợp nickname đó đã được một người dùng đăng nhập từ trước, máy chủ sẽ tự động ngắt kết nối và buộc người đăng nhập trước đó phải đăng xuất khỏi hệ thống, sau đó cấp quyền đăng nhập cho người dùng mới.
5. Cơ chế Virtual DOM trong React JS mang lại ưu thế gì cho ứng dụng Zefa Store?
Virtual DOM là một bản sao ảo của cấu trúc DOM thật được lưu trong bộ nhớ. Khi có sự thay đổi dữ liệu trên component, React JS kết xuất ra hiển thị trên DOM ảo, tiến hành so sánh (diffing) sự khác biệt giữa DOM ảo và DOM thật, sau đó chỉ áp dụng bản vá (patch) cho chính xác phần tử bị thay đổi trên DOM thật. Cơ chế này giúp giao diện không phải kết xuất lại toàn bộ trang web (như việc thay đổi một sản phẩm trong danh sách 20 sản phẩm chỉ làm cập nhật duy nhất sản phẩm đó), từ đó tối ưu hóa tốc độ và hiệu năng hiển thị của hệ thống.
Kết luận
Đồ án cơ sở ngành mạng của nhóm tác giả tại Trường Đại học Bách Khoa – Đại học Đà Nẵng đã hoàn thành tốt hai mục tiêu nghiên cứu và thực nghiệm kỹ thuật: cài đặt thành công ứng dụng truyền tệp đa luồng Client/Server dựa trên cơ chế Socket của Java mô phỏng nguyên lý của FTP, đồng thời hệ thống hóa toàn diện các công nghệ xây dựng hệ thống quản lý web Zefa Store bằng React JS và RESTful Web API. Tài liệu cung cấp cơ sở lý thuyết chuẩn xác về kiến trúc phân tầng mạng, đặc biệt là cơ chế phân tách kênh điều khiển - dữ liệu và hai chế độ Active/Passive của giao thức FTP. Đây là công trình thực hành hữu ích cho sinh viên chuyên ngành Công nghệ thông tin trong việc củng cố kiến thức lập trình mạng và phát triển ứng dụng phân tán.