banner-news

Trong bài này

    Socket là gì? Khái niệm nền tảng về giao thức TCP/IP và UDP

    14/07/2023

    Socket là một trong các khái niệm quan thuộc với lập trình viên, có cách thức hoạt động tương tự như một tập tin descriptor cấp thấp. Vậy, Socket là gì? Có những loại Socket nào và chúng hoạt động như thế nào? Giữa Socket và giao thức TCP/IP có mối liên hệ ra sao? Cùng tìm hiểu qua bài viết bên dưới để giải đáp những câu hỏi này.

    Socket là gì?

    Socket là điểm cuối (endpoint) trong cách thức liên kết giao tiếp 2 chiều (two-way communication). Chúng thường dùng để biểu diễn cách thức kết nối giữa Server và Client. Hiện nay, Socket được liên kết với 1 cổng Port cụ thể, cho phép các tầng lớp TCP có thể định danh dữ liệu được gửi đến từ ứng dụng.

    Có thể nói, Socket là một giao diện lập trình ứng dụng mạng, cho phép chúng ta gửi và nhận dữ liệu trong môi trường Internet. Giữa 2 chương trình trong Internet cần có sự kết nối 2 chiều để trò chuyện và giao tiếp với nhau. Điểm cuối của sự kết nối này có thể gọi là Socket.

    Trong kiến trúc của một máy tính có bao gồm bộ Unix Adapter. Một hệ thống cơ sở dữ liệu có vai trò đáp ứng yêu cầu gửi đến từ khách hàng. Socket được sử dụng bởi đa số các bộ router xác thực đầu vào, ví dụ như FTP (File Transfer Protocol), POP3 hoặc là SMTP (Simple Mail Transfer Protocol), nhằm mục đích tạo ra sự kết nối giữa người gửi và người nhận, phục vụ mục đích trao đổi thông tin.

    Cách hoạt động của Socket 

    Như đã trình bày ở phần Socket là gì trên, Socket có chức năng kết nối các Server và Client dựa trên giao thức TCP/IP và UDP, nhằm mục đích gửi và nhận dữ liệu trên Internet. Socket có thể hoạt động khi có thông số IP và tên Port của 2 ứng dụng đang cần gửi / nhận dữ liệu với nhau.

    Dưới đây là điều kiện cần đó để Socket hoạt động:

    • 2 ứng dụng trao đổi dữ liệu có thể nằm trên cùng một máy hoặc 2 máy riêng biệt.
    • Nếu 2 ứng dụng nằm trên cùng một máy, tên Port không được trùng nhau.

    Phân loại Socket

    Socket được chia thành 4 loại phổ biến, bao gồm:

    Websocket là gì

    Websocket giúp hỗ trợ việc kết nối qua lại giữa Server và Client trên Internet được hiệu quả và nhanh chóng hơn. Chúng hoạt động thông qua giao thức TCP Socket. Websocket có thể được sử dụng trong Web hoặc bất kỳ các ứng dụng nào cần sự trao đổi dữ liệu trong môi trường Internet.

    Ưu điểm của Websocket:

    • Tăng tốc độ gửi và nhận dữ liệu 2 chiều.
    • Dễ phát hiện lỗi và xử lý khi cần.
    • Thao tác sử dụng đơn giản, không cần cài các phần mềm bổ sung.
    • Không cần dùng những phương pháp kết nối khác.

    Nhược điểm của Websocket:

    • Chưa hỗ trợ trên tất cả các trình duyệt hiện nay.
    • Nếu các dịch vụ có phạm vi yêu cầu, Websocket chưa hỗ trợ tất cả.

    Stream Socket là gì

    Stream Socket có thể được hiểu là Socket hướng kết nối. Chúng hoạt động dựa trên giao thức TCP và chúng chỉ hoạt động khi máy chủ và máy khách đã kết nối với nhau.

    Ưu điểm của Stream Socket:

    • Đảm bảo dữ liệu truyền và gửi đi đến đúng người nhận, theo đúng thứ tự và có tốc độ truyền đi nhanh chóng.
    • Mỗi thông điệp sau khi truyền đi, sẽ có xác nhận gửi về để thông báo về trạng thái truyền tải là thành công hay không.

    Nhược điểm của Stream Socket:

    • Giữa Server và Client chỉ có 1 IP, do đó, trong quá trình kết nối cần phải có sự chấp nhận kết nối từ cả 2 máy.

    Datagram Socket là gì

    Datagram Socket là Socket không hướng kết nối, được hoạt động thông qua giao thức UDP (User Datagram Socket). Loại hình Socket có thể hoạt động ngay cả khi máy chủ và máy khách chưa kết nối với nhau.

    Ưu điểm của Datagram Socket:

    • Quá trình kết nối và trao đổi dữ liệu đơn giản, chỉ cần một vài thao tác.
    • Thời gian gửi dữ liệu nhanh chóng.

    Nhược điểm của Datagram Socket:

    • Quá trình gửi thông tin không đủ tin cậy, thứ tự gửi thông tin có thể không đúng hoặc xảy ra tình trạng bị lặp thông tin.

    Unix Socket là gì

    Unix Socket giúp cho việc trao đổi dữ liệu giữa các ứng dụng khác nhau trên cùng một máy tính được nhanh chóng và nhẹ hơn. Tất cả các hoạt động của Unix Socket đều diễn ra bên trong hệ điều hành, mang lại hiệu quả cao hơn. Quá trình truyền dữ liệu trên Unix Socket cũng được đảm bảo, vì chúng tránh được routing hoặc các lớp kiểm tra khác.

    Ưu điểm của Unix Socket:

    • Tăng tốc độ MySQL lên đến 60%.
    • Giảm thời gian latency từ 60ms xuống còn khoảng 5ms.
    • Tăng Redis lên đến 50%.
    • PostgreSQL tăng lên hơn 30%.

    Nhược điểm của Unix Socket:

    • Các ứng dụng nằm trên những máy tính riêng biệt không thể kết nối với nhau thông qua Unix Socket.
    • Đôi khi xảy ra việc phân quyền các file trong Unix Socket, ảnh hưởng đến quá trình thao tác và sử dụng của người dùng.

    Tìm hiểu về giao thức TCP/IP và UDP

    Có thể thấy, TCP/IP và UDP có vai trò cực kỳ quan trọng trong việc hỗ trợ Socket hoạt động. Cùng tìm hiểu kỹ hơn về TCP/IP và UDP:

    Giao thức TCP/IP

    package org.o7planning.tutorial.socket;
    
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class SimpleServerProgram {
        public static void main(String args[]) {
            ServerSocket listener = null;
            String line;
            BufferedReader is;
            BufferedWriter os;
            Socket socketOfServer = null;
    
    
            // Mở ServerSocket tại cổng 9999.
            // Chú ý bạn không thể chọn cổng nhỏ hơn 1023 nếu không là người dùng
            // đặc quyền (privileged users (root)).
            try {
                listener = new ServerSocket(9999);
            } catch (IOException e) {
                System.out.println(e);
                System.exit(1);
            }
    
    
            try {
                System.out.println("Server is waiting to accept user...");

    UDP

    package org.o7planning.tutorial.socket;
    
    
    import java.io.*;
    import java.net.*;
    
    
    public class SimpleClientDemo {
    
    
        public static void main(String[] args) {
            // Địa chỉ máy chủ.
            final String serverHost = "localhost";
    
    
            Socket socketOfClient = null;
            BufferedWriter os = null;
            BufferedReader is = null;
    
    
            try {
                // Yêu cầu kết nối với Server nhận dữ liệu 
                // trên máy 'localhost' cổng 9999.
                socketOfClient = new Socket(serverHost, 9999);
    
    
                // Tạo luồng để gửi dữ liệu từ Client đến Server
                os = new BufferedWriter(new OutputStreamWriter(socketOfClient.getOutputStream()));
    
    
                // Tạo luồng để nhận dữ liệu từ Server
                is = new BufferedReader(new InputStreamReader(socketOfClient.getInputStream()));
    
    
            } catch (UnknownHostException e) {
                System.err.println("Don't know about host " + serverHost);
                return;
            } catch (IOException e) {
                System.err.println("Couldn't get I/O for the connection to " + serverHost);
                return;

    Trên đây là các thông tin chi tiết về Socket là gì, cách hoạt động cũng như phân loại các Socket phổ biến nhất. Nhìn chung, Socket là một trong các ứng dụng quan trọng mà chúng ta cần dùng, đặc biệt là các nhà phát triển Website. Mời bạn tiếp tục theo dõi blog tại CMC Cloud để cập nhật thêm các bài viết công nghệ liên quan khác.

    CMC Cloud - Giải pháp Điện toán đám mây Toàn diện & Linh hoạt nhất. Cho phép tùy biến sử dụng và quản trị 25+ dịch vụ

    content-banner
    News Detail - Footer Email MKT

    Đăng ký nhận thông tin

    Bạn muốn cập nhật thông tin mới nhất từ CMC Cloud?! Hãy để lại địa chỉ email của bạn ngay để nhận những bản tin bổ ích

    back to top

    logo

    © 2023, CMC Cloud. All rights reserved.

    Business Registration Certificate

    Giấy ĐKKD: 0102900049. Nơi cấp: Sở Kế hoạch & Đầu tư Thành phố Hà Nội

    Chịu trách nhiệm nội dung: Đặng Tùng Sơn