Bối cảnh và vấn đề nghiên cứu
Sự phát triển của công nghệ thông tin và mạng Internet đóng vai trò trung tâm trong mọi hoạt động khoa học kỹ thuật, kinh tế và đời sống xã hội. Internet, với bản chất là mạng máy tính toàn cầu kết nối các máy chủ (host) thông qua các phương tiện truyền dẫn và giao thức tiêu chuẩn, đã tạo ra phương thức trao đổi dữ liệu nhanh chóng và tiện lợi. Cùng với sự mở rộng của hạ tầng mạng, nhu cầu liên lạc trực tuyến thời gian thực thông qua các ứng dụng trò chuyện (chatting) ngày càng trở nên phổ biến. Hoạt động trao đổi thông tin không chỉ dừng lại ở các ký tự văn bản đơn giản mà còn mở rộng sang hình ảnh, biểu tượng cảm xúc và tương tác đa phương tiện.
Trong bối cảnh đó, đề tài đồ án cuối kỳ môn Lập trình mạng với tên gọi "Xây dựng ứng dụng Chat Room sử dụng giao thức UDP" (đồng thời trình bày chi tiết về cơ chế truyền thông socket TCP) được nhóm sinh viên thuộc Khoa Khoa học Máy tính, Trường Đại học Công nghệ Thông tin & Truyền thông Việt - Hàn thực hiện dưới sự hướng dẫn của TS. Hoàng Hữu Đức (tháng 12 năm 2022).
Mục tiêu và nhiệm vụ nghiên cứu của đề tài bao gồm:
- Nghiên cứu tổng quan về mạng máy tính, mô hình truyền thông Client - Server, ngăn xếp giao thức mạng và cơ chế hoạt động của socket trên nền tảng Berkeley Socket API.
- Tìm hiểu sâu về ngôn ngữ lập trình Java, các đặc tính lập trình hướng đối tượng, xử lý ngoại lệ, cấu trúc dữ liệu và giải thuật áp dụng trong xử lý luồng dữ liệu.
- Phân tích nguyên lý hoạt động của các giao thức tầng giao vận (Transport Layer), trọng tâm là TCP/IP và UDP, bao gồm cơ chế bắt tay, cấu trúc gói tin (segment header) và các thuật toán kiểm soát tắc nghẽn, kiểm soát luồng.
- Khảo sát các công nghệ truyền thông thời gian thực bổ trợ như WebSocket và WebRTC.
- Phân tích yêu cầu, thiết kế kiến trúc hệ thống và xây dựng ứng dụng Chat Room hoàn chỉnh cho phép kết nối máy chủ - máy khách, quản lý phòng chat, truyền tải tin nhắn văn bản, hình ảnh và icon.
Đối tượng nghiên cứu của đồ án là mô hình giao tiếp mạng qua Socket, các giao thức truyền tải tầng Transport và ngôn ngữ lập trình Java. Phạm vi nghiên cứu tập trung vào việc thiết kế và lập trình ứng dụng phòng chat hoạt động trên môi trường mạng cục bộ hoặc qua kết nối địa chỉ IP/Port trong không gian phòng thực hành môn học.
Cơ sở lý thuyết và phương pháp
Đề tài sử dụng hệ thống cơ sở lý thuyết chuẩn mực trong lĩnh vực mạng máy tính và kỹ thuật phần mềm:
- Khái niệm mạng và kiến trúc mạng: Sử dụng mô hình tham chiếu 7 tầng OSI (Open Systems Interconnection) do ISO/ITU-T xây dựng và mô hình mạng thực tế TCP/IP.
- Cơ chế Socket mạng (Network Socket): Định danh điểm cuối giao tiếp (endpoint) dựa trên sự kết hợp giữa địa chỉ IP, số hiệu cổng (Port) và giao thức tầng giao vận. Socket API hoạt động dựa trên tiêu chuẩn Berkeley Socket.
- Lý thuyết giao thức giao vận:
- Giao thức TCP (Transmission Control Protocol): Phân tích tiến trình bắt tay ba bước (Three-way handshake) với cờ SYN và ACK; cấu trúc gói tin TCP segment; thuật toán tính toán tổng kiểm tra (Checksum) trên IPv4 và IPv6; cơ chế kiểm soát tắc nghẽn dựa trên RFC 2581 thông qua các thuật toán Khởi động chậm (Slow Start), Tránh tắc nghẽn (Congestion Avoidance - AIMD), Truyền lại nhanh (Fast Retransmit) và Phục hồi nhanh (Fast Recovery).
- Giao thức UDP (User Datagram Protocol): Khái niệm truyền tải dữ liệu không hướng kết nối.
- Hệ thống lý thuyết ngôn ngữ Java: Nền tảng hướng đối tượng (OOP) gồm 4 tính chất cốt lõi (Đóng gói, Đa hình, Trừu tượng, Kế thừa); phân loại quyền truy cập (Access Modifiers: Default, Public, Protected, Private); cấu trúc lớp lồng nhau (Nested Class); cơ chế quản lý bộ nhớ và kiểm soát ngoại lệ (Checked và Unchecked Exception); hệ thống Java Collections Framework (Set, List, Queue, Map) và các thuật toán sắp xếp, tìm kiếm cơ bản.
- Công nghệ mở rộng: WebSocket hỗ trợ kết nối 2 chiều liên tục qua TCP Socket và WebRTC (sử dụng giao thức SRTP) truyền thông thời gian thực đa phương tiện P2P.
Phương pháp nghiên cứu được triển khai theo quy trình kỹ thuật phần mềm:
- Phương pháp phân tích - tổng hợp tài liệu lý thuyết về giao thức mạng và ngôn ngữ lập trình.
- Phương pháp phân tích yêu cầu hệ thống và mô hình hóa chức năng bằng biểu đồ Use Case, biểu đồ chức năng cho Client và Server.
- Phương pháp lập trình thực nghiệm (Implementation) trên môi trường Java để hiện thực hóa giao diện đồ họa và cơ chế trao đổi gói tin qua Socket.
Nội dung chính theo từng chương
Chương I: Giới Thiệu Tổng Quan
Chương này cung cấp cái nhìn tổng quan về lịch sử hình thành Internet (khởi nguồn từ mạng ARPANET của Bộ Quốc phòng Mỹ), mục tiêu chia sẻ dữ liệu và phân loại máy tính trong mạng thành hai nhóm Client (máy khách) và Server (máy phục vụ). Nội dung đi sâu phân tích khái niệm Network Socket như một cấu trúc phần mềm đại diện cho điểm cuối giao tiếp mạng được xác định bởi địa chỉ IP, số hiệu Port và giao thức giao vận.
Trọng tâm của chương tập trung làm rõ giao thức TCP:
- Cơ chế bắt tay ba bước: Thiết lập kết nối tin cậy giữa hai máy chủ qua cổng dịch vụ (ví dụ cổng 80 cho máy chủ web hoặc cổng tự chọn >1024 cho máy khách) bằng các phân đoạn mang cờ SYN, SYN/ACK và ACK.
- Cấu trúc Header của TCP: Độ dài các trường điều khiển bao gồm Source Port (16 bit), Destination Port (16 bit), Sequence Number (32 bit), Acknowledge Number (32 bit), Reserved (4 bit), Control Flags (9 bit), Window Size (16 bit), Checksum (16 bit), Urgent Pointer (16 bit), Options (tối đa 32 bit) và trường Data.
- Tính toán Checksum: Phương thức lấy phần bù 1 của tổng phần bù 1 trên các từ 16 bit cho cả IPv4 (32-bit address) và IPv6 (128-bit address).
- Cơ chế kiểm soát: Kiểm soát luồng qua cửa sổ trượt (Window Size) và kiểm soát tắc nghẽn qua 4 thuật toán chuẩn (Slow Start, Congestion Avoidance, Fast Retransmission, Fast Recovery).
| Thuật toán kiểm soát |
Nguyên lý hoạt động theo văn bản |
| Khởi động chậm (Slow Start) |
Bắt đầu truyền ở tốc độ thấp, tăng nhanh tốc độ cho đến khi đạt giới hạn băng thông khả dụng |
| Tránh tắc nghẽn (Congestion Avoidance) |
Tiếp tục tăng tốc độ dần dần theo phương pháp Tăng dần Giảm nhân (AIMD) |
| Truyền lại nhanh & Phục hồi nhanh |
Phát hiện mất gói và nhanh chóng truyền lại để phục hồi phân phối dữ liệu |
Chương 2: Tìm Hiểu Về Ngôn Ngữ Java
Chương hai hệ thống hóa toàn diện các kiến thức về nền tảng ngôn ngữ Java – công cụ trực tiếp dùng để xây dựng ứng dụng:
- Tổng quan và đặc tính: Khái niệm "Viết một lần, chạy ở mọi nơi" (WORA), tính độc lập nền tảng nhờ Máy ảo Java (JVM), tính bảo mật và các lĩnh vực ứng dụng (Đám mây, Big Data, AI, IoT).
- Lập trình hướng đối tượng (OOP): Chi tiết về 4 tính chất Đóng gói (Encapsulation), Đa hình (Polymorphism), Trừu tượng (Abstraction), Kế thừa (Inheritance). Phân biệt quan hệ kế thừa
Is-A (quan hệ cha-con) và quan hệ kết tập Has-A.
- Cấu trúc ngôn ngữ:
- Quyền truy cập: Default, Public, Protected, Private.
- Phân loại Nested Class: Static nested classes và Non-static nested classes (Inner classes, Local classes, Anonymous classes).
- Phân loại biến: Biến cục bộ (Local), Biến toàn cục (Instance), Biến tĩnh (Static).
- Xử lý ngoại lệ: Phân biệt Checked Exception (xảy ra tại thời gian biên dịch) và Unchecked Exception (xảy ra tại runtime, kế thừa từ
RuntimeException).
- Ép kiểu: Nới rộng (Widening - ngầm định, không mất dữ liệu) và Thu hẹp (Narrowing - tường minh, có thể mất dữ liệu).
- Toán tử và phương thức: Toán tử
instanceof, khái niệm Nạp chồng (Overloading) và Ghi đè (Overriding), vai trò của Interface và Abstract class.
- Giải thuật và cấu trúc dữ liệu:
- Các giải thuật: Sắp xếp nổi bọt (Bubble Sort), Sắp xếp nhanh (Quick Sort), Sắp xếp vun đống (Heap Sort dựa trên Binary Heap), Sắp xếp trộn (Merge Sort), Tìm kiếm nhị phân (Binary Search với độ phức tạp $O(\log N)$).
- Java Collections Framework: Set Interface (
TreeSet, HashSet, EnumSet), List Interface (ArrayList, LinkedList, Vector đồng bộ đa luồng, Stack), Queue Interface (LinkedList, PriorityQueue, ArrayDeque), Map Interface (TreeMap dùng cây đỏ-đen độ phức tạp $O(\log n)$, HashMap dùng bảng băm độ phức tạp $O(1)$, EnumMap, WeakHashMap).
Chương 3: Tổng quan về lập trình mạng
Nội dung chương ba mở rộng nghiên cứu về cấu trúc mạng và các tiêu chuẩn truyền thông:
- Mô hình mạng máy tính: Khái niệm kết nối mạng; phân tích ưu nhược điểm của 3 dạng topo mạng chính: Mạng hình sao (Star Network - dùng Hub/Switch/Router, bán kính hạn chế khoảng 100m), Mạng tuyến tính (Bus Network - dùng cáp trục, đầu nối T và Terminator), Mạng hình vòng (Ring Network - dùng Repeater truyền 1 chiều).
- Phân loại mạng theo phạm vi: Mạng cục bộ (LAN - phạm vi từ vài mét đến 1 km, tốc độ 10 Mbps đến 100 Gbps), Mạng đô thị (MAN - phạm vi vài km, vận tốc đạt đến 10 Gbps), Mạng diện rộng (WAN - phạm vi quốc gia, lục địa, sử dụng mạng truyền thông con subnet).
- Mô hình 7 tầng OSI: Tầng vật lý (Physical), Tầng liên kết dữ liệu (Data-Link), Tầng mạng (Network), Tầng giao vận (Transport), Tầng phiên (Session), Tầng trình diễn (Presentation), Tầng ứng dụng (Application).
- Các giao thức truyền thông tiêu biểu: Tổng hợp chức năng của TCP, IP, HTTP, FTP, SMTP, POP3, WAP.
- Công nghệ mạng thời gian thực:
- WebSocket: Hỗ trợ giao tiếp 2 chiều tốc độ cao qua TCP Socket, dễ triển khai, không cần phần mềm phụ trợ, tuy nhiên mức độ hỗ trợ giữa các trình duyệt có sự khác biệt.
- WebRTC: API JavaScript giao tiếp P2P real-time cho video, voice và data; mã hóa bằng giao thức SRTP; không cần plugin. Hạn chế gồm việc gặp khó khăn khi đi qua NAT/Firewall, thiếu cơ chế báo hiệu tích hợp sẵn và chuẩn video giữa các trình duyệt chưa đồng nhất.
Chương 4: Xây dựng ứng dụng thực tế
Chương cuối cùng trình bày quá trình đặc tả yêu cầu, thiết kế và hiện thực hóa phần mềm Chat Room:
- Phân tích yêu cầu hệ thống: Hệ thống là phòng ảo cho phép người dùng giao tiếp qua mạng Internet, hỗ trợ tin nhắn văn bản, truyền tải hình ảnh và biểu tượng cảm xúc.
- Phân tích đối tượng:
- Phía Client: Đăng nhập/kết nối, hiển thị danh sách người dùng online, gửi/nhận tin nhắn, gửi icon và hình ảnh.
- Phía Server: Quản trị kết nối, thiết lập cổng (Port), quản lý thông tin trạng thái của các Client kết nối vào mạng.
- Thiết kế hệ thống: Xây dựng biểu đồ Use Case và biểu đồ chức năng phân định rõ luồng xử lý của Server và Client.
Thiết kế và triển khai
Ứng dụng được xây dựng theo kiến trúc Client - Server trên ngôn ngữ Java, bao gồm các thành phần giao diện và module xử lý sau:
[Máy chủ (Server)]
[Máy khách (Client)]
- Giao diện quản trị máy chủ (Server Frame):
- Chức năng: Cho phép quản trị viên nhập số hiệu cổng mạng (Port), bắt đầu lắng nghe kết nối (Start) hoặc tạm dừng kết nối (Stop).
- Quản lý dữ liệu: Hiển thị trạng thái máy chủ đang hoạt động và danh sách các kết nối hiện hành.
- Giao diện kết nối máy khách (Chat Connect Server):
- Chức năng: Cho phép người dùng cấu hình cổng kết nối tương ứng với cổng đã mở trên Server Frame, nhập tên định danh (nickname) và gửi yêu cầu tham gia phòng chat.
- Ghi nhận trạng thái: Lưu thông tin người dùng kết nối thành công vào hệ thống.
- Giao diện phòng chat chính (Chat Frame):
- Khu vực hiển thị danh sách trực tuyến: Hiển thị danh sách các tài khoản đang online trong phòng chat (ví dụ hiển thị người dùng "TQuynh" khi tham gia).
- Khung hội thoại (Messenger Area): Hiển thị tiến trình trò chuyện 2 chiều giữa các máy khách.
- Bảng chức năng tương tác: Hỗ trợ nhập liệu ký tự từ bàn phím, đính kèm và gửi biểu tượng cảm xúc (icon) và truyền gửi tệp hình ảnh.
Kết quả và đóng góp
Đồ án đã đạt được các kết quả kỹ thuật cụ thể:
- Hoàn thành báo cáo phân tích toàn diện về lý thuyết mạng máy tính, giao thức truyền thông TCP/IP, UDP, Socket và ngôn ngữ lập trình Java.
- Xây dựng thành công ứng dụng Chat Room đa người dùng chạy trên môi trường Java Swing/AWT với đầy đủ 3 khối giao diện: Server Frame, Chat Connect Server và Chat Frame.
- Ứng dụng triển khai thành công cơ chế giao tiếp qua Socket, cho phép quản lý mở/đóng cổng kết nối từ Server, định danh người dùng và cập nhật trạng thái người dùng online theo thời gian thực.
- Cung cấp tính năng gửi nhận tin nhắn văn bản kết hợp truyền tải biểu tượng cảm xúc và hình ảnh giữa các máy trạm.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên phạm vi và nội dung được nhóm tác giả trình bày trong văn bản:
- Hạn chế:
- Có sự chưa đồng nhất giữa tiêu đề đề tài ghi nhận giao thức UDP nhưng nội dung phân tích lý thuyết chuyên sâu và mô tả kỹ thuật lại tập trung chủ yếu vào cơ chế truyền thông Socket hướng kết nối của giao thức TCP.
- Giao diện ứng dụng được thiết kế ở mức độ cơ bản, các tính năng kiểm soát quyền riêng tư và an toàn thông tin chưa được mở rộng chi tiết.
- Ứng dụng chưa tích hợp các cơ chế truyền thông đa phương tiện nâng cao (Voice/Video Call) như phần khảo sát công nghệ WebRTC đã nêu.
- Hướng mở rộng:
- Bổ sung cơ chế truyền thông qua cả hai giao thức TCP và UDP tùy theo loại dữ liệu (văn bản dùng TCP, luồng âm thanh/hình ảnh dùng UDP).
- Hoàn thiện mã hóa bảo mật đường truyền (như mô hình SRTP trong WebRTC) để tăng cường an toàn thông tin cho người dùng.
- Tối ưu hóa giao diện người dùng và mở rộng tính năng tạo nhiều phòng chat độc lập.
Giá trị tham khảo
Tài liệu đồ án là nguồn tư liệu hữu ích cho:
- Sinh viên chuyên ngành Công nghệ thông tin, Khoa học máy tính, Kỹ thuật mạng đang học tập các học phần Lập trình mạng, Lập trình ứng dụng Java, hoặc Hệ thống phân tán.
- Người học cần tài liệu tổng hợp nhanh và có hệ thống về cấu trúc gói tin TCP, cơ chế bắt tay 3 bước, cấu trúc dữ liệu Java Collections Framework và kiến trúc ứng dụng Client - Server cơ bản qua Socket.
- Phần phân tích thiết kế giao diện và phân chia module Server - Client tại Chương 4 có giá trị trực tiếp cho việc tham khảo thực hiện các đồ án cơ sở ngành hoặc bài tập lớn.
Câu hỏi thường gặp
1. Đồ án do những sinh viên nào thực hiện và dưới sự hướng dẫn của ai?
Đề tài được thực hiện bởi nhóm sinh viên gồm Nguyễn Khắc Thịnh, Nguyễn Hải Dương, Nguyễn Phương Thanh, Lê Hoàng Minh thuộc Khoa Khoa học Máy tính, Trường Đại học Công nghệ Thông tin & Truyền thông Việt - Hàn, dưới sự hướng dẫn của TS. Hoàng Hữu Đức (tháng 12/2022).
2. Giao thức TCP kiểm soát tắc nghẽn thông qua những thuật toán nào theo tài liệu?
Theo tiêu chuẩn RFC 2581 được trích dẫn trong văn bản, TCP sử dụng 4 thuật toán kiểm soát tắc nghẽn bao gồm: Khởi động chậm (Slow Start), Tránh tắc nghẽn (Congestion Avoidance - sử dụng cơ chế AIMD), Truyền lại nhanh (Fast Retransmission) và Phục hồi nhanh (Fast Recovery).
3. Khung Header của gói tin TCP gồm những trường thông tin chính nào?
Header TCP bao gồm các trường: Source Port (16 bit), Destination Port (16 bit), Sequence Number (32 bit), Acknowledge Number (32 bit), Reserved (4 bit), Control Flags (9 bit), Window Size (16 bit), Checksum (16 bit), Urgent Pointer (16 bit), Options (tối đa 32 bit) và vùng Data.
4. Ứng dụng Chat Room trong đồ án bao gồm những giao diện chính nào?
Ứng dụng gồm 3 giao diện chính:
Server Frame: Dùng để quản trị máy chủ, nhập port, bắt đầu hoặc dừng kết nối.
Chat Connect Server: Dùng cho máy khách nhập port, đặt tên định danh và tham gia kết nối.
Chat Frame: Khung giao diện chính để trò chuyện, hiển thị danh sách người dùng online, gửi ký tự văn bản, biểu tượng cảm xúc và hình ảnh.
5. Điểm khác biệt giữa Checked Exception và Unchecked Exception trong Java được trình bày ra sao?
Checked Exception là ngoại lệ được kiểm tra và thông báo bởi trình biên dịch tại thời điểm biên dịch (Compile-time), là lỗi lập trình viên không thể lường trước. Unchecked Exception là ngoại lệ xảy ra tại thời gian chạy (Runtime), kế thừa từ RuntimeException và có thể phòng tránh được bởi lập trình viên.
Kết luận
Đồ án cuối kỳ của nhóm sinh viên Trường Đại học Công nghệ Thông tin & Truyền thông Việt - Hàn đã hệ thống hóa đầy đủ cơ sở lý thuyết về mạng máy tính, giao thức truyền thông tầng giao vận và ngôn ngữ lập trình Java. Trên cơ sở đó, nhóm tác giả đã phân tích và xây dựng hoàn chỉnh ứng dụng Chat Room theo mô hình Client - Server hỗ trợ gửi tin nhắn văn bản, icon và hình ảnh qua cổng socket. Đây là tài liệu mang tính thực hành cao, phản ánh toàn diện quy trình nghiên cứu lý thuyết và triển khai phần mềm mạng cơ bản.