Tổng quan về giáo trình

Giáo trình Lập trình mạng (Phần lập trình mạng cơ sở) do tác giả Hà Mạnh Đào biên soạn tại Học viện Công nghệ Bưu chính Viễn thông (PTIT), hoàn thành vào tháng 07/2010. Trong chương trình đào tạo đại học và sau đại học các ngành Công nghệ Thông tin, Kỹ thuật Điện tử và Viễn thông, học phần này giữ vị trí cầu nối chuyên môn giữa khối kiến thức mạng máy tính phần cứng/giao thức và kỹ thuật phát triển phần mềm ứng dụng phân tán.

Mục tiêu học tập của giáo trình tập trung vào việc trang bị cho người học hệ thống nguyên lý và kỹ thuật lập trình để xây dựng các phần mềm hoạt động trên môi trường mạng máy tính cũng như mạng viễn thông tích hợp. Kết thúc chương trình học, sinh viên đạt được các chuẩn đầu ra:

  • Nắm vững cơ chế truyền thông mạng qua mô hình giao thức chuẩn OSI và TCP/IP.
  • Có khả năng thiết kế, cài đặt các ứng dụng mạng theo mô hình Client/Server và Peer-to-Peer sử dụng giao thức TCP, UDP ở tầng giao vận.
  • Làm chủ kỹ thuật lập trình phân tán đối tượng với Java RMI và các giao thức tầng ứng dụng phổ biến (Telnet, FTP, SMTP, POP3).
  • Bước đầu tiếp cận kỹ thuật lập trình truyền thông qua mạng điện thoại công cộng PSTN (thông qua Java Telephony API - JTAPI) và lập trình mạng an toàn với giao thức bảo mật SSL.

Giáo trình được cấu trúc thành 4 phần lớn trải dài trên 7 chương học thuật. Cách tiếp cận của tài liệu được hệ thống hóa qua công thức nền tảng: $\text{LTM} = \text{KTM} + \text{MH} + \text{NN}$ (trong đó LTM là Lập trình mạng, KTM là Kiến thức mạng truyền thông, MH là Mô hình lập trình mạng, và NN là Ngôn ngữ lập trình mạng).

Điểm đặc sắc của giáo trình nằm ở việc kết hợp chặt chẽ giữa lý thuyết giao thức chuẩn và kỹ thuật công nghệ phần mềm: toàn bộ các ca nghiên cứu (case studies) và bài tập thực hành đều được định hướng thiết kế theo mô hình kiến trúc MVC (Model – View – Control) chuẩn mực trên nền tảng ngôn ngữ Java, hỗ trợ đồng thời lập trình mạng máy tính truyền thống và giao tiếp mạng viễn thông PSTN.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung học thuật của giáo trình được triển khai theo trật tự logic gồm 7 chương chuyên sâu:

  • Chương I: Một số kiến thức cơ sở cho lập trình mạng: Trình bày tổng quan về lập trình mạng, đối sánh mô hình OSI/ISO 7 tầng và họ giao thức TCP/IP. Phân loại giao thức truyền thông thành hướng kết nối (Connection-oriented, tiêu biểu là TCP với 3 giai đoạn: thiết lập kết nối, truyền dữ liệu kiểm soát và giải phóng kết nối) và hướng không kết nối (Connectionless, tiêu biểu là UDP truyền gói tin độc lập). Cung cấp cơ sở về định danh: hệ thống địa chỉ IP (IPv4, IPv6, cơ chế chia mạng con subnet, siêu mạng supernet, mặt nạ mask, các dải địa chỉ riêng RFC 1918, địa chỉ loopback 127.0.0.1 / localhost), hệ thống địa chỉ cổng (Port từ 0 đến 65535, phân loại cổng hệ thống 0–1023, cổng đăng ký 1024–49151, cổng động 49152–65535), và giao diện điểm cuối Socket (Stream Socket, Datagram Socket, Raw Socket). Giới thiệu các mô hình lập trình mạng (Client/Server với cơ chế mở tích cực - active open và mở thụ động - passive open, Peer-to-Peer, Đa tầng) cùng phương pháp phân tích thiết kế ứng dụng theo mô hình MVC.
  • Chương II: Lập trình ứng dụng mạng với Socket: Đi sâu vào các lớp mạng trong gói thư viện java.net. Hướng dẫn thao tác địa chỉ máy trạm qua lớp InetAddress, Inet4Address, Inet6Address, SocketAddress, InetSocketAddress. Khảo sát cơ chế truyền thông TCP Socket qua các lớp Socket, ServerSocket, thiết lập các tùy chọn kết nối (TCP_NODELAY, SO_TIMEOUT, SO_BINDADDR, SO_LINGER, SO_KEEPALIVE) và quản lý luồng I/O mạng (luồng byte qua InputStream/OutputStream, luồng ký tự qua BufferedReader/PrintWriter, luồng đối tượng qua ObjectInputStream/ObjectOutputStream). Cài đặt các chương trình mẫu: quét cổng (PortScanner, LocalPortScanner), truy vấn dịch vụ Finger qua cổng 79 theo RFC 1288, đồng bộ thời gian máy chủ Time qua cổng 37, và bài toán đăng nhập từ xa TCP/IP theo mô hình MVC kết nối cơ sở dữ liệu MySQL qua JDBC. Khảo sát kỹ thuật UDP Socket qua các lớp DatagramPacket, DatagramSocket, lập trình với thẻ giao tiếp mạng vật lý qua lớp NetworkInterface, và truyền thông đa hướng qua lớp MulticastSocket.
  • Chương III: Kỹ thuật xây dựng ứng dụng mạng phía Server: Phân tích kiến trúc vận hành của máy chủ mạng bao gồm máy chủ đồng thời hướng kết nối (Concurrent Connection-Oriented Server) và máy chủ lặp hướng không kết nối (Iterative Connectionless Server). Cung cấp giải pháp lập trình đa luồng (Multi-threading) trong Java để xây dựng các máy chủ có khả năng phục vụ nhiều phiên kết nối máy khách đồng thời mà không bị nghẽn I/O.
  • Chương IV: Lập trình giao thức dịch vụ mạng phía Client: Cài đặt các chương trình ứng dụng phía Client tương tác với các dịch vụ Internet chuẩn mực: dịch vụ truy cập thiết bị đầu cuối từ xa Telnet (cổng 23), dịch vụ truyền tệp tin FTP (cổng điều khiển 21 và cổng dữ liệu 20), và hệ thống truyền nhận thư điện tử thông qua giao thức gửi thư SMTP (cổng 25) cùng giao thức nhận thư POP3 (cổng 110).
  • Chương V (Phần III): Kỹ thuật lập trình phân tán đối tượng RMI: Trình bày mô hình tính toán phân tán dựa trên cơ chế triệu gọi phương thức từ xa (Java Remote Method Invocation). Phân tích cơ chế truyền thông RMI, kỹ thuật truyền tham số cho phương thức gọi từ xa bao gồm truyền tham trị (truyền đối tượng thực thi giao diện Serializable) và truyền tham chiếu (đối tượng kế thừa giao diện Remote). Cung cấp kỹ thuật khởi tạo đối tượng phân tán thông qua mẫu thiết kế Factory Pattern, quy trình biên dịch (rmic) và thực thi Registry trên máy chủ phân tán.
  • Chương VI (Phần IV - Chương V): Lập trình ứng dụng truyền thông qua mạng PSTN: Giới thiệu thư viện Java Telephony API (JTAPI), cấu trúc mô hình cuộc gọi Java Call Model, cấu hình thiết bị đầu cuối mạng máy tính và desktop. Hướng dẫn cài đặt các kịch bản thiết lập cuộc gọi điện thoại, trả lời tự động và xây dựng cổng dịch vụ truy cập từ xa RAS (Remote Access Service).
  • Chương VII (Phần IV tiếp theo): Lập trình mạng an toàn bảo mật với SSL: Khảo sát cơ chế bảo mật tầng giao vận Secure Sockets Layer (SSL), nguyên lý mã hóa dữ liệu, cơ chế xác thực chứng chỉ và bắt tay bảo mật (SSL Handshake). Hướng dẫn sử dụng các lớp trong gói bảo mật Java (SSLSocket, SSLServerSocket) để thiết lập kênh truyền thông mã hóa an toàn.

Kiến thức nền tảng được xây dựng

  • Lý thuyết nền tảng (Fundamental theories): Mô hình tham chiếu truyền thông đa tầng (OSI và TCP/IP), cơ chế định danh điểm cuối truyền thông (Socket Address = IP Address + Port Number), nguyên lý truyền thông hướng kết nối dòng dữ liệu (Stream) và không kết nối dạng khối tin (Datagram), lý thuyết gọi thủ tục/phương thức từ xa (RPC/RMI), và mô hình mã hóa bảo vệ kênh truyền.
  • Nguyên lý cốt lõi (Core principles): Nguyên lý phân định vai trò Client (khởi tạo yêu cầu, mở tích cực) và Server (chờ yêu cầu, mở thụ động); nguyên lý xử lý đồng thời (Concurrency) qua cơ chế đa luồng; nguyên lý đóng gói dữ liệu và tuần tự hóa đối tượng (Object Serialization) truyền qua mạng; nguyên lý phân tách trách nhiệm hệ thống phần mềm (Separation of Concerns) theo kiến trúc MVC.
  • Khung làm việc thiết yếu (Essential frameworks): Bộ thư viện mạng chuẩn Java SE (java.net), khung giao tiếp I/O luồng (java.io), khung lập trình phân tán đối tượng Java RMI (java.rmi), khung lập trình viễn thông Java Telephony API (javax.telephony / JTAPI), và khung bảo mật mạng Java Secure Socket Extension (javax.net.ssl).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt thuần thục các Socket TCP và UDP trên nền tảng Java; xử lý chuyển đổi dữ liệu luồng byte và chuỗi văn bản; lập trình tuần tự hóa dữ liệu gửi/nhận đối tượng nguyên khối; cấu hình và triển khai máy chủ đa luồng; thực thi kết nối cơ sở dữ liệu quan hệ MySQL thông qua trình điều khiển JDBC Driver.
  • Kỹ năng phân tích (Analytical skills): Khả năng phân tích cấu trúc gói tin và phân tích luồng điều khiển của các giao thức chuẩn dựa trên đặc tả kỹ thuật RFC (RFC 1288 đối với Finger, RFC 868 đối với Time Protocol, RFC đối với FTP, SMTP, POP3); phân định sự khác biệt giữa truyền tham trị và truyền tham chiếu trong môi trường mạng phân tán.
  • Năng lực thực hành ứng dụng (Practical competencies): Thiết kế và hiện thực hóa các ứng dụng Client/Server hoàn chỉnh đạt chuẩn kiến trúc phân lớp MVC; triển khai các tiện ích kiểm tra mạng, các dịch vụ truyền file, dịch vụ mail client, dịch vụ tương tác thoại viễn thông và thiết lập kênh truyền thông an toàn SSL.

Phương pháp giảng dạy và học tập

Giáo trình triển khai phương pháp tiếp cận sư phạm kết hợp chặt chẽ giữa lý thuyết giao thức chuẩn và thực hành lập trình hướng đối tượng (Hands-on Object-Oriented Network Programming). Mỗi chủ đề học tập được xây dựng theo một chu trình khép kín:

  1. Trình bày đặc tả nguyên lý và cơ chế hoạt động của giao thức mạng.
  2. Mô tả chi tiết cấu trúc các lớp API, hàm khởi tạo (constructors) và các phương thức cốt lõi trong ngôn ngữ Java.
  3. Cung cấp sơ đồ kiến trúc hệ thống, sơ đồ lớp UML (Class Diagram) và sơ đồ tuần tự (Sequence Diagram).
  4. Cung cấp mã nguồn cài đặt hoàn chỉnh, có chú thích chi tiết để người học có thể biên dịch, thực thi và kiểm thử trực tiếp trên môi trường máy trạm.

Hệ thống bài tập và ca nghiên cứu được thiết kế gắn liền với các yêu cầu kỹ thuật thực tế trong ngành phần mềm và viễn thông. Điển hình là case study xây dựng hệ thống đăng nhập tài khoản từ xa:

  • Tầng dữ liệu/mô hình (Model): Định nghĩa lớp thực thể dữ liệu User và LoginModel chứa thông tin tài khoản, thực thi giao diện Serializable để truyền qua dòng dữ liệu mạng.
  • Tầng hiển thị (View): Cài đặt giao diện đồ họa người dùng bằng Java Swing (JFrame, JPanel, JTextField, JPasswordField, JButton, JOptionPane) trên các lớp LoginView, ClientView, ServerView.
  • Tầng điều khiển (Control): Đảm bảo xử lý nghiệp vụ, quản lý luồng điều khiển qua LoginControl, ClientControl, ServerControl, xử lý lắng nghe sự kiện (ActionListener), mở kết nối mạng Socket qua cổng chỉ định (port 8888), đọc/ghi dữ liệu thông qua ObjectOutputStream/ObjectInputStream và thực thi truy vấn kiểm tra dữ liệu qua DriverManager, Connection, Statement, ResultSet trong hệ quản trị MySQL (user management).

Các bài thực hành lập trình chức năng bao gồm:

  • Tiện ích kiểm tra hệ thống mạng: PortScanner (quét cổng từ xa), LocalPortScanner (dò cổng dịch vụ nội bộ), IPCharacteristics (phân tích đặc tính địa chỉ IP máy trạm).
  • Ứng dụng client giao thức: FingerClient (tra cứu thông tin người dùng qua cổng 79), TimeClient / TimeServer (đồng bộ thời gian hệ thống qua cổng 37 với thuật toán chuyển đổi epoch từ năm 1900 sang năm 1970 qua hằng số $2.208.988.800$ giây).

Phương pháp đánh giá học phần được thiết lập đa dạng: đánh giá kết quả thực hành phòng máy tính, kiểm tra kỹ năng phân tích thiết kế giao thức mạng, và thực hiện đồ án môn học/bài tập lớn xây dựng ứng dụng mạng phân tán hoàn chỉnh.

Để tự học hiệu quả, người học được hướng dẫn thiết lập môi trường máy tính nội bộ, cấu hình trình biên dịch Java JDK, sử dụng cơ chế địa chỉ Loopback (127.0.0.1 hoặc localhost) để kiểm thử độc lập mô hình Client và Server trước khi triển khai trên hệ thống mạng LAN vật lý.


Điểm nổi bật và cập nhật

Giáo trình Lập trình mạng (Phần lập trình mạng cơ sở) của PTIT sở hữu các đặc điểm học thuật và cập nhật kỹ thuật đáng chú ý:

  • Tính mô-đun hóa và định hướng phát triển: Các phần học được phân tách rõ ràng với cấu trúc mở, đóng vai trò nền tảng vững chắc để người học tiếp tục nâng cao trình độ ở các học phần chuyên sâu về công nghệ phân tán và tích hợp doanh nghiệp (EJB, CORBA, Web Portal, SOA, JavaMail, Điện toán đám mây - Cloud Computing).
  • Tích hợp địa chỉ thế hệ mới IPv6: Giáo trình cập nhật cấu trúc xử lý địa chỉ IPv6 song song với chuẩn IPv4 truyền thống thông qua các lớp chuyên dụng Inet4Address, Inet6Address, phương thức nhận diện địa chỉ liên kết nội bộ (isLinkLocalAddress), địa chỉ đa hướng (isMulticastAddress) và địa chỉ Wildcard (isAnyLocalAddress).
  • Mở rộng sang lĩnh vực truyền thông và mạng hội tụ: Không giới hạn trong phạm vi mạng máy tính cục bộ, tài liệu mở rộng sang kỹ thuật lập trình mạng điện thoại công cộng PSTN thông qua thư viện viễn thông JTAPI. Đây là tiền đề kỹ thuật để xây dựng các giải pháp ứng dụng hội tụ IP như thoại Internet, hội nghị truyền hình, dịch vụ truy cập từ xa RAS, mạng riêng ảo VPN và truyền hình giao thức mạng IPTV.
  • Tiếp cận bảo mật tầng giao vận: Cung cấp nền tảng lập trình mã hóa an toàn với giao thức SSL, giải quyết yêu cầu bảo mật thông tin trong truyền thông dữ liệu thông qua các lớp bảo mật tiêu chuẩn của Java.
  • Chuẩn hóa công nghệ phần mềm: Đưa mô hình thiết kế MVC vào toàn bộ các ca thực hành ứng dụng mạng, giúp sinh viên làm quen với kiến trúc phần mềm tiêu chuẩn đang được áp dụng rộng rãi trong các dự án phát triển phần mềm công nghiệp.

Đối tượng sử dụng giáo trình

Giáo trình được biên soạn phục vụ các nhóm đối tượng cụ thể trong hệ thống giáo dục đại học và nghiên cứu kỹ thuật:

  • Sinh viên đại học và học viên cao học: Phù hợp cho sinh viên từ năm thứ 3 hoặc năm thứ 4 chuyên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Mạng máy tính & Truyền thông dữ liệu, Kỹ thuật Điện tử - Viễn thông và Hệ thống Thông tin.
  • Yêu cầu kiến thức tiên quyết (Prerequisites): Để tiếp thu toàn diện các nội dung của tài liệu, người học bắt buộc phải hoàn thành các môn học tiên quyết bao gồm:
    • Mạng máy tính: Nắm vững cấu trúc mô hình OSI, bộ giao thức TCP/IP, cơ chế định tuyến, địa chỉ IP, phân đoạn subnet và cơ chế hoạt động của cổng giao vận.
    • Lập trình hướng đối tượng (OOP): Thành thạo các nguyên lý đóng gói, kế thừa, đa hình và trừu tượng hóa.
    • Phân tích và thiết kế hệ thống: Có kỹ năng đọc hiểu và xây dựng sơ đồ ca sử dụng, sơ đồ lớp UML, sơ đồ tuần tự.
    • Ngôn ngữ lập trình Java cơ bản: Nắm vững kỹ thuật lập trình Java Core, cơ chế quản lý luồng nhập/xuất (I/O Streams), lập trình giao diện người dùng đồ họa (Java Swing/AWT), kỹ thuật lập trình đa luồng (Threads), kỹ thuật xử lý ngoại lệ (try-catch-finally), và kết nối cơ sở dữ liệu JDBC.
  • Giảng viên chuyên ngành: Sử dụng làm giáo trình giảng dạy chính thức, khung đề cương môn học, đồng thời cung cấp hệ thống ca nghiên cứu mẫu để biên soạn bài tập thực hành phòng thí nghiệm và đề tài bài tập lớn.
  • Kỹ sư phần mềm và độc giả nghiên cứu: Phù hợp làm tài liệu tra cứu kỹ thuật về các hàm API trong gói java.net, java.rmi, javax.net.ssl và các quy trình chuẩn hóa thiết kế ứng dụng Client/Server phân tán.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được thiết kế chuẩn mực cho sinh viên đại học, học viên cao học các ngành Công nghệ Thông tin, Viễn thông, cũng như các kỹ sư phần mềm muốn nắm vững nguyên lý lập trình mạng bản chất thông qua mã lệnh Java.

2. Cần trang bị những kiến thức nền tảng nào trước khi bắt đầu học?

Người học cần hoàn thành 4 học phần nền tảng: Mạng máy tính (kiến thức TCP/IP, Port, IP), Lập trình hướng đối tượng OOP, Phân tích & thiết kế hệ thống (UML), và Lập trình Java cơ bản (xử lý ngoại lệ, luồng I/O, giao diện Swing, đa luồng Multi-threading, cơ sở dữ liệu JDBC).

3. Điểm khác biệt cơ bản giữa giáo trình này và các tài liệu lập trình mạng khác là gì?

Giáo trình chuẩn hóa việc áp dụng mô hình thiết kế kiến trúc MVC (Model - View - Control) vào toàn bộ mã nguồn ứng dụng mạng Client/Server; đồng thời mở rộng phạm vi lập trình từ mạng máy tính truyền thống (TCP/UDP, RMI) sang mạng viễn thông điện thoại công cộng PSTN (với thư viện JTAPI) và lập trình an toàn với SSL.

4. Làm thế nào để tự học và thực hành hiệu quả các bài tập trong giáo trình?

Người học nên chuẩn bị môi trường gồm bộ công cụ Java Development Kit (JDK), một môi trường phát triển (IDE) và hệ quản trị cơ sở dữ liệu MySQL. Thực hành tuần tự từ các chương trình thao tác địa chỉ (InetAddress), các tiện ích mạng (PortScanner, FingerClient), sau đó phát triển ứng dụng Client/Server hoàn chỉnh theo mô hình MVC, tiến tới cấu hình các bài toán đa luồng phía Server và ứng dụng phân tán RMI.

5. Có những tài liệu bổ trợ hoặc định hướng học tập nâng cao nào tiếp nối giáo trình này?

Để nghiên cứu sâu hơn, người học có thể tham khảo thêm các tài liệu về Lập trình mạng nâng cao (CORBA, EJB, Portlet, Web Services/SOA, Cloud Computing), lập trình thiết bị di động và mạng cảm biến (J2ME, Bluetooth, Sensor network), cũng như tài liệu lập trình can thiệp tầng sâu hệ thống mạng bằng Raw Socket trên môi trường C/C++ Linux.


Kết luận

Giáo trình Lập trình mạng (Phần lập trình mạng cơ sở) của tác giả Hà Mạnh Đào (Học viện Công nghệ Bưu chính Viễn thông) cung cấp một hệ thống tri thức hoàn chỉnh, khúc chiết về kỹ thuật phát triển ứng dụng trong môi trường mạng máy tính và viễn thông. Giá trị cốt lõi của tài liệu thể hiện ở sự chuẩn hóa về mặt kiến trúc phần mềm, liên kết trực tiếp giữa lý thuyết truyền thông giao thức và mã nguồn cài đặt thực tế qua ngôn ngữ Java.

Lộ trình học tập khuyến nghị dành cho sinh viên:

  1. Nắm chắc kiến thức cơ sở mạng, hệ thống phân loại cổng, phân loại địa chỉ và mô hình MVC (Chương I).
  2. Làm chủ kỹ thuật lập trình Socket TCP/UDP, xử lý luồng dữ liệu I/O và điều khiển máy chủ đa luồng (Chương II, III, IV).
  3. Làm chủ kỹ thuật lập trình phân tán đối tượng với Java RMI (Chương V).
  4. Nghiên cứu ứng dụng truyền thông viễn thông qua thư viện JTAPI và thiết lập bảo mật kênh truyền SSL (Chương VI, VII).

Nguồn tài liệu bổ trợ phục vụ quá trình nghiên cứu bao gồm: các tài liệu đặc tả tiêu chuẩn mạng RFC của IETF (RFC 1288, RFC 868), tài liệu hướng dẫn kỹ thuật Java API Documentation của Sun Microsystems/Oracle cho các gói java.net, java.rmi, javax.net.ssl, cùng bộ đặc tả kỹ thuật của Java Telephony API (JTAPI).