Từ A-Z về Socket: định nghĩa, phân loại & hướng dẫn sử dụng Socket

Từ A-Z về Socket: định nghĩa, phân loại & hướng dẫn sử dụng Socket

15/03/2023 Blog, Tin tức

Socket được coi là một cổng giao tiếp giữa các ứng dụng trên mạng. Nó cho phép các thiết bị trao đổi thông tin với nhau thông qua một kết nối định sẵn. Socket thường được sử dụng trong các ứng dụng như trò chuyện trực tuyến, chia sẻ tệp tin, chia sẻ dữ liệu giữa các máy tính trên mạng.

Việc hiểu về socket là một bước quan trọng trong việc xây dựng các ứng dụng mạng đáng tin cậy và hiệu quả. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về socket, phân loại socket, cách sử dụng và ứng dụng của nó nhé.

Socket là gì?

Socket cho phép giao tiếp giữa hai quy trình khác nhau trên cùng một máy hoặc các máy khác nhau. Nói chính xác hơn, đó là một cách để giao tiếp với các máy tính bằng cách sử dụng các mô tả tệp Unix tiêu chuẩn. Trong Unix, mọi hành động I / O được thực hiện bằng cách viết hoặc đọc một mô tả tệp. Mô tả tệp chỉ là một số nguyên được liên kết với một tệp đang mở và nó có thể là kết nối mạng, tệp văn bản, thiết bị đầu cuối hoặc thứ gì khác.

Đối với một lập trình viên, một socket hoạt động giống như một bộ mô tả tệp cấp thấp. Điều này là do các lệnh như read() và write() hoạt động với các socket giống như cách chúng làm với các tập tin và đường dẫn.

Socket lần đầu tiên được giới thiệu trong 2.1BSD và sau đó được tinh chỉnh thành dạng hiện tại của chúng với 4.2BSD. Tính năng Socket hiện có sẵn với hầu hết các bản phát hành hệ thống UNIX hiện tại.

Từ A-Z về Socket: định nghĩa, phân loại & hướng dẫn sử dụng Socket 2

Socket được sử dụng ở đâu?

Unix Socket được sử dụng trong framwork ứng dụng client-server. Mỗi server là một quá trình thực hiện một số chức năng theo yêu cầu từ client. Hầu hết các giao thức cấp ứng dụng như FTP, SMTP và POP3 sử dụng các Socket để thiết lập kết nối giữa client và server và sau đó để trao đổi dữ liệu.

Phân loại Socket

Hiện nay có bốn loại Socket: Stream Sockets và Datagram Sockets được sử dụng phổ biến nhất, trong khi Raw Sockets và Sequenced Packet Sockets hiếm khi được sử dụng.

Các quy trình được cho là chỉ giao tiếp giữa các Socket cùng loại nhưng không có hạn chế nào ngăn cản giao tiếp giữa các Socket thuộc các loại khác nhau.

  • Stream Sockets  - Phân phối trong môi trường mạng được đảm bảo. Nếu bạn gửi qua Stream Sockets ba mục "A, B, C", chúng sẽ đến theo cùng một thứ tự - "A, B, C". Các Socket này sử dụng TCP (Giao thức điều khiển truyền) để truyền dữ liệu. Nếu không thể giao hàng, người gửi sẽ nhận được chỉ báo lỗi. Bản ghi dữ liệu không có bất kỳ ranh giới nào.
  • Datagram Sockets  - Phân phối trong môi trường mạng không được đảm bảo. Chúng không có kết nối vì bạn không cần phải có kết nối mở như trong Stream Sockets - bạn xây dựng một packet với thông tin đích và gửi nó đi. Họ sử dụng UDP (Giao thức gói dữ liệu người dùng).
  • Raw Sockets - Chúng cung cấp cho người dùng quyền truy cập vào các giao thức truyền thông cơ bản, hỗ trợ trừu tượng hóa Socket. Các socket này thường được định hướng datagram, mặc dù các đặc điểm chính xác của chúng phụ thuộc vào giao diện được cung cấp bởi giao thức. Raw Sockets không dành cho người dùng thông thường; Chúng được cung cấp chủ yếu cho những người quan tâm đến việc phát triển các giao thức truyền thông mới hoặc để có quyền truy cập vào một số cơ sở khó hiểu hơn của một giao thức hiện có.
  • Sequenced Packet Sockets - Chúng tương tự như Stream Sockets, ngoại trừ ranh giới bản ghi được giữ nguyên. Giao diện này chỉ được cung cấp như một phần của trừu tượng hóa Socket Hệ thống mạng (NS) và rất quan trọng trong hầu hết các ứng dụng NS nghiêm trọng. Socket gói được sắp xếp theo trình tự cho phép người dùng thao tác với các tiêu đề Giao thức gói trình tự (SPP) hoặc Giao thức gói dữ liệu Internet (IDP) trên một gói hoặc một nhóm gói, bằng cách viết tiêu đề nguyên mẫu cùng với bất kỳ dữ liệu nào sẽ được gửi hoặc bằng cách chỉ định tiêu đề mặc định được sử dụng với tất cả dữ liệu gửi đi và cho phép người dùng nhận tiêu đề trên các gói tin đến.

Từ A-Z về Socket: định nghĩa, phân loại & hướng dẫn sử dụng Socket 4

Dòng Socket UNIX z / OS

Trong z / OS® UNIX, các dòng Socket sau được hỗ trợ:

  • UNIX Domain Sockets, được gọi là Socket cục bộ, là một phần của họ địa chỉ UNIX (AF_UNIX)
  • Socket giao thức Internet, là một phần của Dòng địa chỉ Internet (AF_INET cho IPv4 và AF_INET6 cho IPv6)

Socket AF_UNIX cung cấp giao tiếp giữa các quy trình trên một hệ thống duy nhất. Dòng Socket này hỗ trợ hai loại Socket — Stream Sockets và datagram. Các loại Socket này được mô tả trong phần tiếp theo.

Socket AF_INET và AF_INET6 cung cấp phương tiện giao tiếp giữa các chương trình ứng dụng trên các hệ thống khác nhau bằng Giao thức điều khiển truyền tải do sản phẩm TCP/IP cung cấp. Dòng socket này hỗ trợ cả Stream Sockets và datagram. Mỗi loại Socket này được mô tả trong phần tiếp theo.

Hướng dẫn sử dụng các loại Socket

Phần này mô tả các tiêu chí để giúp bạn chọn loại socket thích hợp cho một chương trình ứng dụng.

Nếu bạn đang giao tiếp với một chương trình ứng dụng hiện có, bạn phải sử dụng các giao thức tương tự như chương trình ứng dụng hiện có. Ví dụ: nếu bạn giao tiếp với một ứng dụng sử dụng TCP, bạn phải sử dụng Stream Sockets. Đối với các chương trình ứng dụng khác, bạn nên xem xét các yếu tố sau:

  • Độ tin cậy. Stream Sockets cung cấp kết nối đáng tin cậy nhất. Socket Datagram không đáng tin cậy, vì các gói tin có thể bị loại bỏ, bị hỏng hoặc trùng lặp trong quá trình truyền. Điều này có thể được chấp nhận nếu chương trình ứng dụng không yêu cầu độ tin cậy hoặc nếu chương trình ứng dụng thực hiện độ tin cậy trên giao diện Socket. Sự đánh đổi là hiệu suất tăng lên có sẵn với các Socket datagram.
  • Hiệu suất. Chi phí liên quan đến độ tin cậy, kiểm soát luồng, lắp ráp lại gói và bảo trì kết nối làm giảm hiệu suất của Stream Sockets so với Socket gói dữ liệu.
  • Truyền dữ liệu. Socket Datagram áp đặt giới hạn về lượng dữ liệu được truyền trong một giao dịch. Nếu bạn gửi ít hơn 2048 byte cùng một lúc, hãy sử dụng Socket gói dữ liệu. Khi lượng dữ liệu trong một giao dịch tăng lên, hãy sử dụng Stream Sockets.

Ứng dụng của Socket

Socket được sử dụng rộng rãi trong lập trình mạng và có nhiều ứng dụng khác nhau, bao gồm:

  • Truyền tin nhắn trực tuyến: Socket là công cụ cần thiết để tạo ra các ứng dụng trò chuyện trực tuyến như các ứng dụng nhắn tin hoặc trò chuyện video trên các nền tảng trực tuyến.
  • Chia sẻ tệp tin: Socket cho phép các thiết bị trên mạng chia sẻ dữ liệu và tệp tin với nhau. Các ứng dụng chia sẻ tệp tin như Dropbox hoặc Google Drive sử dụng socket để truyền tải dữ liệu.
  • Trò chơi trực tuyến: Socket là công cụ cần thiết để tạo ra các ứng dụng trò chơi trực tuyến như các ứng dụng chơi game đa người chơi trên mạng.
  • Quản lý máy chủ: Socket được sử dụng để tạo ra các ứng dụng quản lý máy chủ, cho phép quản trị viên máy chủ thực hiện các hoạt động quản lý máy chủ từ xa.
  • Truyền thông giữa các ứng dụng: Socket cho phép các ứng dụng trao đổi thông tin và dữ liệu với nhau trên mạng. Các ứng dụng như email, trình duyệt web và các ứng dụng truyền thông xã hội sử dụng socket để truyền tải dữ liệu giữa các thiết bị trên mạng.

Từ A-Z về Socket: định nghĩa, phân loại & hướng dẫn sử dụng Socket 3

Web Socket là gì

WebSocket là một giao thức truyền tải dữ liệu hai chiều (full-duplex) trên mạng, cho phép các ứng dụng web truyền tải dữ liệu và trao đổi thông tin với máy chủ một cách liên tục và hiệu quả hơn. WebSocket giúp cho việc trao đổi dữ liệu giữa các ứng dụng web và máy chủ trở nên đơn giản và hiệu quả hơn, giảm thiểu lưu lượng truyền tải và giảm độ trễ (latency).

Trong truyền thống HTTP, mỗi lần ứng dụng web cần cập nhật thông tin từ máy chủ, nó phải gửi một yêu cầu (request) đến máy chủ và đợi máy chủ trả về phản hồi (response). Tuy nhiên, với WebSocket, một kết nối hai chiều được thiết lập giữa ứng dụng web và máy chủ, cho phép ứng dụng web và máy chủ gửi và nhận dữ liệu một cách liên tục mà không cần phải thiết lập lại kết nối.

WebSocket được hỗ trợ bởi hầu hết các trình duyệt hiện đại và cũng có sẵn các thư viện WebSocket để sử dụng trong các ngôn ngữ lập trình khác nhau. WebSocket đã trở thành một công nghệ quan trọng trong lập trình web, cho phép xây dựng các ứng dụng web thời gian thực như các trò chơi trực tuyến, truyền thông trực tuyến, các ứng dụng chat và nhiều ứng dụng web khác.

Địa chỉ trong Socket

Address families

Các họ địa chỉ xác định các kiểu xưng hô khác nhau. Tất cả các host trong cùng một dòng địa chỉ đều sử dụng cùng một lược đồ để giải quyết các điểm cuối Socket. z / OS® UNIX hỗ trợ ba họ địa chỉ — AF_INET, AF_INET6 và AF_UNIX. Các họ địa chỉ AF_INET và AF_INET6 xác định địa chỉ trong miền IP. Họ địa chỉ AF_UNIX xác định địa chỉ trong miền UNIX z / OS. Trong UNIX z / OS, không gian địa chỉ có thể sử dụng giao diện socket để giao tiếp với các không gian địa chỉ khác trên cùng một server.

Lưu ý: Trong trường hợp này, domain UNIX z / OS được sử dụng theo cách tương tự như domain UNIX trên các hệ thống loại UNIX khác.

Socket address

Một địa chỉ socket được định nghĩa bởi cấu trúc sockaddr trong sys/socket.h include file. Cấu trúc có ba trường, như được hiển thị trong ví dụ sau:

struct sockaddr {

    unsigned char sa_len;

    unsigned char sa_family;

    char          sa_data[14];    /* variable length data */

};

Trường sa_len chứa độ dài của  trường sa_data. Trường sa_family chứa họ địa chỉ. Nó là AF_INET hoặc AF_INET6 cho tên miền Internet và AF_UNIX cho tên miền UNIX. Trường sa_data khác nhau đối với mỗi họ địa chỉ. Mỗi họ địa chỉ xác định cấu trúc riêng của nó, có thể được phủ lên trên cấu trúc sockaddr. Xem  Địa chỉ trong miền AF_INET và Địa chỉ trong miền AF_INET6 để biết thêm thông tin về miền Internet  và Địa chỉ trong miền AF_UNIX để biết thêm thông tin về miền UNIX.

Internet addresses

Địa chỉ Internet đại diện cho một giao diện mạng. Mỗi địa chỉ Internet trong một miền AF_INET được quản lý phải là duy nhất. Mặt khác, không nhất thiết mỗi server phải có một địa chỉ Internet duy nhất; trên thực tế, một server lưu trữ có nhiều địa chỉ Internet như nó có giao diện mạng.

Ports

Một cổng được sử dụng để phân biệt giữa các chương trình ứng dụng khác nhau sử dụng cùng một giao diện mạng. Đây là một vòng loại bổ sung được sử dụng bởi phần mềm hệ thống để lấy dữ liệu vào đúng chương trình ứng dụng. Về mặt vật lý, một cổng là một số nguyên 16 bit. Một số cổng được dành riêng cho các chương trình hoặc giao thức ứng dụng cụ thể và được gọi là các cổng well-known.

Network byte order

Các cổng và địa chỉ thường được chỉ định cho các cuộc gọi sử dụng quy ước sắp xếp thứ tự byte mạng. Quy ước này là một phương pháp sắp xếp byte theo kiến trúc máy cụ thể. Có hai phương pháp phổ biến:

  • Thứ tự byte big-endian đặt byte quan trọng nhất lên hàng đầu. Phương pháp này được sử dụng trong bộ xử lý máy tính lớn của IBM.
  • Sắp xếp thứ tự byte little-endian đặt byte ít quan trọng nhất lên hàng đầu. Phương pháp này được sử dụng trong bộ vi xử lý Intel.

Sử dụng sắp xếp thứ tự byte mạng cho dữ liệu được trao đổi giữa các server cho phép các server sử dụng các kiến trúc khác nhau để trao đổi thông tin địa chỉ.

Lưu ý: Giao diện socket không xử lý sự khác biệt về thứ tự byte dữ liệu của chương trình ứng dụng. Người viết chương trình ứng dụng phải tự xử lý sự khác biệt thứ tự byte.

Địa chỉ trong domain AF_INET

Địa chỉ Socket trong dòng địa chỉ Internet bao gồm các trường sau: họ địa chỉ (AF_INET), địa chỉ Internet, độ dài của địa chỉ Internet đó, cổng và mảng ký tự. Cấu trúc của địa chỉ Socket Internet được xác định bởi cấu trúc sockaddr_in sau, được tìm thấy trong netinet / in.h bao gồm tệp:

struct in_addr {

     ip_addr_t s_addr;

 

 struct sockaddr_in {

     unsigned char  sin_len;

     unsigned char  sin_family;

     unsigned short sin_port;

     struct in_addr sin_addr;

     unsigned char  sin_zero[8];

};

sin_len

được đặt theo chiều dài của  cấu trúc sockaddr_in

sin_family

được đặt thành AF_INET T

sin_port

cổng được sử dụng bởi chương trình ứng dụng, theo thứ tự byte mạng

sin_zero

trường nên được đặt thành tất cả các số không

Từ A-Z về Socket: định nghĩa, phân loại & hướng dẫn sử dụng Socket 5

Địa chỉ trong domain AF_INET6

Địa chỉ Socket trong dòng địa chỉ Internet bao gồm các trường sau: họ địa chỉ (AF_INET6), địa chỉ Internet, độ dài của địa chỉ Internet đó, cổng, thông tin luồng và thông tin phạm vi. Cấu trúc của địa chỉ Socket Internet được xác định bởi cấu trúc sockaddr_in6 sau, được tìm thấy trong netinet / in.h bao gồm tệp:

struct in6_addr {

   union {

   uint8_t _S6_u8[16];

   uint32_t _S6_u32[4];

   } _S6_un;

   };

   #define s6_addr _S6_un._S6_u8

 

struct sockaddr_in6 {

   uint8_t                                                              sin6_len;

   sa_family_t                      sin6_family;

   in_port_t                                          sin6_port;

   uint32_t                                            sin6_flowinfo;

   struct in6_addr              sin6_addr;

   uint32_t                                            sin6_scope_id;

   };

sin6_len

Đặt theo chiều dài của  cấu trúc sockaddr_in6

sin6_family

Đặt thành AF_INET

sin6_port

Cổng được sử dụng bởi chương trình ứng dụng, theo thứ tự byte mạng

sin6_flowinfo

Trường 32 bit chứa lớp lưu lượng truy cập và nhãn luồng

sin6_addr

một cấu trúc in6_addr duy nhất  , chứa một địa chỉ IPv6 128-bit được lưu trữ theo thứ tự byte mạng

sin6_scope_id

Một số nguyên 32 bit xác định một tập hợp các giao diện phù hợp với phạm vi của địa chỉ được thực hiện trong trường sin6_addr.

Lưu ý: Cấu trúc IPv6 được hiển thị bằng cách xác định macro kiểm tra tính năng _OPEN_SYS_SOCK_IPV6.

Địa chỉ trong domain AF_UNIX

Địa chỉ Socket trong họ địa chỉ AF_UNIX bao gồm ba trường: độ dài của tên đường dẫn sau, họ địa chỉ (AF_UNIX) và chính tên đường dẫn. Cấu trúc của một địa chỉ Socket AF_UNIX được định nghĩa như sau:

struct sockaddr_un {

    unsigned char  sun_len;

    unsigned char  sun_family;

                     char  sun_path[108];        /* pathname */

};

Cấu trúc này được định nghĩa trong cấu trúc sockaddr_un được tìm thấy trong sys/un.h include file. sun_len chứa độ dài của tên đường dẫn trong sun_path;  sun_family trường được đặt thành AF_UNIX; và sun_path chứa tên đường dẫn chấm dứt bằng null.

Kết luận

Socket là một khái niệm cơ bản trong lập trình mạng, giúp các thiết bị trên mạng có thể kết nối và truyền dữ liệu với nhau. Sử dụng socket, lập trình viên có thể tạo các ứng dụng truyền thông giữa các thiết bị trên mạng, đảm bảo tính đáng tin cậy và hiệu quả cho các hoạt động trao đổi thông tin giữa các thiết bị trên mạng. Việc hiểu và sử dụng socket là rất quan trọng trong lập trình mạng và đóng góp vào sự phát triển của các ứng dụng trực tuyến hiện nay.

Tặng miễn phí bộ Plugin 359$ giúp khách hàng tối ưu SEO website

Bộ 3 plugin TENTEN tặng hoàn toàn miễn phí cho tất cả các khách hàng gồm:

  • Rank Math Pro - Tối ưu SEO
  • WP rocket - Tăng tốc độ tải trang
  • Imagify - Nén dung lượng ảnh

Áp dụng khi Đăng ký mới Hosting/ Email Server!

Sở hữu ngay bộ 3 công cụ giúp website của bạn ONTOP GOOGLE!

NHẬN BỘ PLUGIN SEO MIỄN PHÍ TẠI ĐÂY

Các tìm kiếm liên quan đến chủ đề “socket là gì”

Socket CPU là gì
Socket điện thoại là gì Socket Tiếng Anh là gì Web socket la gì
Socket C# Unix socket là gì Tcp Socket la gì socket api dùng cơ chế gì?

Bài liên quan

Tin tức hưu ích với bạn

  • com mien phi

    Có nên mua tên miền .com miễn phí? Nơi đăng ký tên miền uy tín

    Blog, Tin tức 25/04/2024
  • Chứng thư số đấu thầu là gì? Các bước đăng ký từ A-Z

    Chứng thư số đấu thầu là gì? Các bước đăng ký từ A-Z

    Blog, Tin tức 25/04/2024

Bạn có bỏ lỡ tin tức nào không?

  • com mien phi

    Có nên mua tên miền .com miễn phí? Nơi đăng ký tên miền uy tín

    Blog, Tin tức 25/04/2024
  • Chứng thư số đấu thầu là gì? Các bước đăng ký từ A-Z

    Chứng thư số đấu thầu là gì? Các bước đăng ký từ A-Z

    Blog, Tin tức 25/04/2024
  • 3 cách cài đặt và sử dụng plugin Really Simple SSL cho WordPress

    Blog, Tin tức 24/04/2024
  • SQL Injection Attack là gì? 8 bước phát hiện và phòng chống

    SQL Injection Attack là gì? 8 bước phát hiện và phòng chống

    Blog, Tin tức 24/04/2024