Ứng dụng mạng, mạng máy tính, giao thức

    0

    Trong bài học này chúng ta nhắc lại một số khái niệm cơ bản về mạng máy tính và giao thức. Bài học hướng tới tóm tắt và hệ thống hóa các thành phần của mạng chứ không đi sâu vào chi tiết như nội dung học của môn học mạng máy tính.

    Các nội dung này đưa ra bức tranh tổng quan giúp xác định vị trí của ứng mạng trong cả hệ thống. Từ đó chúng ta sẽ dần dần đi sâu vào các vấn đề của phát triển ứng dụng mạng trong các bài sau, bao gồm dịch vụ Tcp/Ip, mô hình ứng dụng mạng, socket.

    Quay trở lại Hướng dẫn tự học lập trình socket Tcp/Ip.

    Ứng dụng mạng

    Ngày nay, ứng dụng mạng đã trở nên đặc biệt phổ biến và quen thuộc với hầu hết người sử dụng máy tính:

    • Hầu như ai cũng biết đến và đang sử dụng ít nhất một trong số các trình duyệt phổ biến như Chrome, Firefox, Edge, Opera, Safari.
    • Lập trình viên sẽ thường xuyên phải upload chương trình lên dịch vụ hosting bằng một chương trình hỗ trợ FTP client.
    • Các bạn trẻ vẫn thường xuyên sử dụng các chương trình trao đổi tin nhắn tức thời (Yahoo Messenger trước đây, Skype, Zalo, Facebook Messenger hiện nay), hoặc chơi game online.
    • Các phần mềm quản lý chuyên dụng nhiều năm trở lại đây cũng đều chuyển sang mô hình client/server để hoạt động trong mạng LAN.
    • Những phần mềm quen thuộc có lịch sử lâu dài như Microsoft Office trước kia hoạt động hoàn toàn offline giờ cũng đều tích hợp thêm các chức năng hoạt động trên mạng như tải template, chia sẻ lên các dịch vụ lưu trữ, hoặc chuyển hẳn sang hình thức online (Office 365), v.v..

    Như vậy, gần như không thể kể hết các loại ứng dụng mạng khác nhau đang phục vụ công việc. Các ứng dụng mạng, nói một cách hình tượng, giống như ‘linh hồn’ của các hệ thống mạng.

    Mỗi phần mềm mạng là một hệ thống bao gồm nhiều chương trình chạy trên các máy tính khác nhau và chia sẻ thông tin qua mạng. Ví dụ, hệ thống phần mềm web bao gồm một chương trình gọi là trình duyệt (browser hay web client, như Chrome, Edge, Firefox) và một chương trình gọi là máy chủ web (web server, như Apache, IIS, Nginx). Trình duyệt và máy chủ web trao đổi thông tin qua mạng. Máy chủ cung cấp cho trình duyệt các tài liệu, bao gồm html document, ảnh, mã nguồn javascript, css. Trình duyệt hiển thị các tài liệu trên và thực thi mã javascript.

    Đối với các ứng dụng như vậy, mạng máy tính đóng vai trò là một trường trung gian giúp các thành phần của ứng dụng có thể trao đổi và chia sẻ thông tin. Các mạng máy tính được tạo ra với mục tiêu cuối cùng là phục vụ các ứng dụng.

    Để thực hiện công việc của mình, mạng máy tính chứa đựng nhiều thành phần phức tạp.

    Các thành phần của mạng máy tính

    Mạng máy tính là một hệ thống bao gồm nhiều thành phần cùng phối hợp hoạt động nhằm mục đích truyền thông tin từ máy tính này tới máy tính khác, từ ứng dụng này tới ứng dụng khác. Các thành phần phần chủ yếu nhất bao gồm các thiết bị đầu cuối, thiết bị mạng, môi trường truyền dẫn, và giao thức.

    Thiết bị đầu cuối

    Các thiết bị đầu cuối (end systems, end devices, host) là các thiết bị của người dùng nơi chạy các ứng dụng mạng. Máy tính bàn, máy tính xách tay, điện thoại di động, máy tính bảng, v.v. đều là các thiết bị đầu cuối. Các hệ thống máy chủ cũng được coi là những thiết bị đầu cuối. Hiện nay xuất hiện thêm nhiều loại thiết bị đầu cuối “phi truyền thống” như các thiết bị gia dụng thông minh.

    Các thuật ngữ host, end-system, end-device được sử dụng tương đương nhau trong các tài liệu.

    Các thiết bị đầu cuối là nơi xuất phát và đích đến cuối cùng của dữ liệu trong mạng máy tính. Một cách chi tiết hơn nữa, các phần mềm mạng chạy trên các thiết bị đầu cuối mới thực sự là điểm xuất phát và đích đến của của dữ liệu truyền trên mạng. Mạng máy tính đóng vai trò cung cấp các dịch vụ truyền dữ liệu cho ứng dụng.

    Thiết bị đầu cuối cũng thường được phân vào hai nhóm: client và server. Client thường dùng để chỉ những thiết bị sử dụng cho người dùng cá nhân như máy tính bàn, máy tính xách tay, điện thoại di động thông may hay máy tính bảng. Server thường dùng để chỉ những máy tính đặc biệt mạnh chứa chương trình hoặc dữ liệu để cung cấp cho client.

    Các thiết bị đầu cuối sử dụng các hệ điều hành hỗ trợ mạng. Ở những giai đoạn đầu của mạng máy tính và Internet, nhiều hệ điều hành không trực tiếp hỗ trợ mạng mà phải sử dụng các gói phần mềm/ phần cứng của các hãng thứ ba. Đến nay, tất cả các hệ điều hành thông dụng chạy trên thiết bị đầu cuối như họ Windows, Linux, Mac OS, Android, IOS đều hỗ trợ mạng trực tiếp bằng cách cung cấp các API hệ thống để ứng dụng có thể giao tiếp với mạng.

    Nói một cách tóm lược, những thiết bị có thể cài đặt và chạy các chương trình ứng dụng khi kết nối vào mạng sẽ được gọi là thiết bị đầu cuối.

    Thiết bị mạng và môi trường truyền dẫn

    Các thiết bị mạng là các thiết bị trung gian nằm giữa các thiết bị đầu cuối để hỗ trợ quá trình truyền dữ liệu tới đích cần thiết. Các thiết bị mạng cơ bản nhất bao gồm switch (thiết bị trung tâm của LAN) và router (ghép nối các LAN và các WAN).

    Về bản chất, các thiết bị mạng cũng là các máy tính chuyên dụng. Tuy nhiên, thay vì chạy các ứng dụng người dùng, thiết bị mạng lõi chạy các chương trình đặc biệt giúp chúng đọc, hiểu và chuyển tiếp các gói tin hướng tới đích (là một mạng khác hoặc thiết bị đầu cuối).

    Các phần mềm ứng dụng mạng không hoạt động trên các thiết bị mạng. Chúng ta cũng không thể áp dụng kỹ thuật lập trình mạng thông thường trên các loại thiết bị này.

    Môi trường truyền dẫn là các loại dây dẫn tín hiệu như cáp quang, cáp đồng hoặc sóng vô tuyến. Môi trường truyền dẫn có nhiệm vụ kết nối các loại thiết bị về mặt vật lý. Môi trường truyền dẫn là nơi tín hiệu thực sự được truyền đi.

    Kết nối các thành phần của mạng máy tính
    Kết nối các thành phần của mạng máy tính

    Giao thức truyền thông

    Các giao thức truyền thông là các quy tắc mà các thiết bị phải tuân theo khi tham gia vào quá trình truyền thông. Các quy tắc này bao gồm định dạng và thứ tự của các thông tin được trao đổi giữa các thiết bị trong mạng, cũng như các hoạt động phải thực hiện khi gửi/nhận thông tin. Giao thức truyền thông đóng vai trò hạt nhân gắn kết hoạt động của các thiết bị về mặt logic (để phân biệt với môi trường truyền gắn kết thiết bị về mặt vật lý).

    Do có nhiều thành phần khác nhau trong mạng, mỗi thành phần có vai trò riêng, giao thức là bắt buộc để các thiết bị riêng biệt này có được “tiếng nói chung” để cùng thực hiện nhiệm vụ. Ứng với mỗi loại nhiệm vụ truyền thông sẽ phải có một/một số giao thức truyền thông tương ứng. Nói theo cách khác, giao thức truyền thông đóng vai trò là một ngôn ngữ chung để các thiết bị có thể “nói chuyện” và hợp tác với nhau trong một hệ thống mạng.

    Trong một hệ thống mạng đồng thời có rất nhiều giao thức hoạt động để đảm bảo cho việc truyền dữ liệu giữa các thành phần. Ví dụ, một số giao thức dùng để truyền thông tin trực tiếp giữa các ứng dụng, giao thức truyền thông tin giữa các thiết bị đầu cuối (và có thể được sử dụng bởi phần mềm ứng dụng).

    Ngoài giao thức được sử dụng trực tiếp bởi ứng dụng còn có rất nhiều giao thức khác nhau được sử dụng bởi các thành phần khác của mạng. Ví dụ các router sử dụng các giao thức định tuyến để tìm ra đường đi phù hợp cho các gói tin xuyên qua các mạng khác nhau. Các switch cũng phải sử dụng giao thức riêng để học địa MAC của các thiết bị kết nối vào các cổng của nó. Một thiết bị thu phát wifi (Access Point) sử dụng giao thức riêng để truyền tín hiệu với máy tính xách tay sử dụng mạng không dây.

    Qua phần này chúng ta xác định, việc phát triển ứng dụng mạng chính là phát triển ứng dụng chạy trên thiết bị đầu cuối. Một ứng dụng mạng bao gồm nhiều thành phần chạy trên các thiết bị đầu cuối khác nhau và sử dụng mạng để truyền thông tin giữa các thành phần. Mạng máy tính đóng vai trò môi trường trung gian giúp truyền thông tin.

    Giao thức và dịch vụ truyền thông

    Chương trình ứng dụng hoạt động trên các thiết bị đầu cuối. Nói cách khác, thiết bị đầu cuối đóng vai trò là môi trường hoạt động cho ứng dụng. Các ứng dụng sử dụng dịch vụ truyền thông của hệ điều hành trên thiết bị đầu cuối để truyền thông tin giữa các thành phần.

    Các dịch vụ truyền thông mạng do các giao thức cung cấp và được xây dựng như một bộ phận của hệ điều hành trên các thiết bị đầu cuối. Các giao thức truyền thông này được thực thi ở dạng phần mềm, cụ thể hơn là ở dạng các hàm của hệ thống, mà ứng dụng có thể gọi để sử dụng. Việc truy cập này thường thực hiện thông qua gọi các hàm của hệ thống.

    Mỗi giao thức cung cấp một/một số dịch vụ truyền thông nhất định cho ứng dụng. Có hai loại dịch vụ truyền thông cơ bản cung cấp cho ứng dụng: truyền thông end-to-end và truyền thông host-to-host.

    Truyền thông end-to-end

    Các dịch vụ truyền thông mà ứng dụng sử dụng để truyền dữ liệu của mình tới một ứng dụng chạy trên một thiết bị đầu cuối khác gọi là dịch vụ truyền thông đầu cuối – đầu cuối (end-to-end communications). Nói đơn giản, đây là loại truyền thông giữa các ứng dụng chạy trên các thiết bị đầu cuối khác nhau.

    Đây là loại dịch vụ truyền thông phổ biến nhất mà phần mềm mạng sử dụng. Gần như tất cả các loại ứng dụng mạng đều phải sử dụng đến loại truyền thông này.

    Loại dịch vụ truyền thông này thường do hệ điều hành cung cấp dưới dạng các hàm hệ thống. Chương trình ứng dụng gọi tới các hàm này để yêu cầu mang dữ liệu của mình tới chương trình đối tác.

    Do ứng dụng mạng có nhiều thành phần, để các thành phần này có thể “nói chuyện” với nhau, chúng phải đưa ra các thỏa thuận về cấu trúc dữ liệu, trình tự gửi nhận dữ liệu, và các thao tác phải thực hiện khi gửi/nhận dữ liệu. Nói cách khác, tự bản thân chương trình ứng dụng phải đưa ra giao thức của riêng mình và sử dụng dịch vụ truyền thông end-to-end để thực hiện giao thức đó.

    Truyền thông host-to-host

    Việc truyền dữ liệu từ thiết bị đầu cuối này tới thiết bị đầu cuối khác thông qua router được gọi là truyền thông host-to-host. Truyền thông host-to-host không phân phối dữ liệu đến cho ứng dụng cụ thể nào, cũng không phục vụ cho ứng dụng cụ thể nào. Loại truyền thông này chỉ giúp dữ liệu (của nhiều ứng dụng khác nhau) trên host này đi tới host kia.

    Dịch vụ truyền thông end-to-end phải sử dụng tới dịch vụ truyền host-to-host. Nói cách khác, dịch vụ truyền host-to-host là nền tảng hoạt động cho dịch vụ end-to-end. Ví dụ, khi gửi thư đến một căn hộ trong một tòa chung cư lớn, dịch vụ bưu chính chỉ chịu trách nhiệm đưa thư đến tòa chung cư (host-to-host); bản thân chung cư sẽ có dịch vụ phân phối thư đến từng căn hộ (end-to-end).

    Để thực hiện nhiệm vụ truyền host-to-host, trên cả thiết bị đầu cuối và router đều phải cài đặt chung một giao thức (giao thức IP trong mạng TCP/IP mà chúng ta sẽ gặp ở bài sau). Giao thức này được thực thi ở dạng phần mềm hệ thống trên thiết bị đầu cuối (mà chúng ta có thể sử dụng), và là một phần mềm chạy trên hệ điều hành chuyên dụng của router.

    Lập trình mạng với socket mà chúng ta xem xét trong tập bài giảng này chỉ có thể thực hiện được hai loại truyền thông end-to-end và host-to-host.

    Cả truyền thông end-to-end và host-to-host đều là truyền thông ảo (virtual communication channel) với ý nghĩa: các host hoặc các ứng dụng “cảm giác” như đang được “nói chuyện” trực tiếp với nhau, mặc dù giữa chúng là rất nhiều loại môi trường truyền và các thiết bị mạng trung gian.

    Truyền thông vật lý và truyền thông ảo
    Truyền thông vật lý và truyền thông ảo: hai chương trình hoặc hai thiết bị cảm giác như đang trao đổi thông tin trực tiếp với nhau, trong khi thực tế thông tin phải đi qua nhiều kênh truyền thông và thiết bị vật lý trung gian

    Đặc tả và thực thi giao thức

    Trong phần nội dung trên chúng ta có nhắc lại nhiều lần thuật ngữ “thực thi của giao thức”. Khi tiếp xúc với mạng từ khía cạnh lập trình, chúng ta cần phân biệt đặc tả của giao thức (protocol specification) và thực thi của giao thức (protocol implementation).

    Mỗi giao thức, nhìn giản lược, là một bộ quy tắc quy định 3 yếu tố chính: cấu trúc của các gói tin trao đổi, trình tự trao đổi gói tin, các hành động cần thực hiện khi gửi/nhận gói tin. Giao thức, theo ý nghĩa đó,  đơn thuần chỉ là một bản đặc tả các quy tắc.

    Các nhà phát triển thiết bị, hệ thống và ứng dụng sử dụng bản đặc tả này cùng với công cụ lập trình để chuyển đặc tả giao thức thành chương trình và cài đặt lên các thiết bị. Loại chương trình như vậy được gọi là thực thi của giao thức. Chỉ khi được thực thi và cài đặt, giao thức mới có thể thực sự hoạt động trong hệ thống mạng.

    Như vậy, đặc tả của giao thức có thể xem như một dạng bản thiết kế, còn thực thi của giao thức chính là một chương trình được làm ra từ bản thiết kế.

    Bình thường khi nói về mạng chúng ta không cần phân biệt rạch ròi giữa đặc tả và thực thi của giao thức. Tuy nhiên, tùy tình huống cụ thể chúng ta sẽ phải hiểu và phân biệt hai khái niệm trên.

    Với sự phân biệt như vậy chúng ta có thể hình dung, thực thi của một giao thức thực chất là một chương trình. Chương trình thực thi của giao thức có thể cài đặt trên hệ thống, tích hợp trong phần mềm ứng dụng hoặc cài đặt trực tiếp trên phần cứng (như card mạng). Thông thường nhất các chương trình thực thi của giao thức trong hệ thống được cài đặt dưới dạng các thư viện hàm mà chương trình ứng dụng có thể gọi tới.

    Bình luận

    avatar
      Đăng ký theo dõi  
    Thông báo về