Hotline : 07 088 44444
Thích
Chia sẻ

Socket là gì? Socket thường được sử dụng ở đâu?

13/03/2021

Nếu bạn là một lập trình viên, chắc hẳn bạn nên biết socket là gì? Một socket trông và hoạt động giống như một file descriptor 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 file và pipe.

Socket là gì?

Socket là một điểm cuối (end-point) trong liên kết giao tiếp hai chiều (two-way communication) giữa hai chương trình chạy trên mạng. Socket cho phép giao tiếp giữa hai process khác nhau trên cùng một máy hoặc hai máy khác nhau. Nói chính xác hơn, đó là một cách để nói chuyện với các máy tính khác bằng cách sử dụng các file descriptor Unix tiêu chuẩn.

socket là gì
Socket là gì?

Trong Unix. Mọi hành động I/O được thực hiện bằng cách write hoặc read một File descriptor. File descriptor chỉ là một số nguyên được liên kết với một file đang mở. Và nó có thể là kết nối mạng, file văn bản, thiết bị đầu cuối hoặc một cái gì đó khác.

Các socket được giới thiệu lần đầu tiên trong 2.1BSD. Và sau đó được tinh chỉnh thành dạng hiện tại 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.

web socket là gì
Web Socket là gì

Xem thêm: Websocket là gì? Cách tạo Websocket

Một trong những chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là một con số cụ thể), từ đó sẽ tiến hành kết nối giữa client và server.

Socket hoạt động như thế nào?

Socket hoạt động trên cả 2 giao thức TCP và UDP. Như đã nói ở trên thì có thể xem Socket = Địa chỉ IP + Số Port, port ở đây chính là port logic của máy tính(16 bits = 65535 ports).

Socket hoạt động ở tầng 4 của mô hình OSI (Transport layer)

Quá trình khởi tạo socket connection từ client tới server.

Như chúng ta đã biết thì có những port được server service quy định dùng cho các dịch vụ quy định (Assigned Numbers Authority). (Port 80 dùng cho giao thức HTTP, 20 dùng cho FTP, 22 dùng cho SSH, 25 dùng cho SMTP, …ect).

Quá trình khởi tạo kết nối tới Gmail sẽ diễn ra như sau:

  1. Client có địa chỉ IP1 đang có port 5000 rảnh dỗi và quyết định sử dụng cặp (IP, Port) = (IP1, 5000) để kết nối tới web server có địa chỉ IP2 và port 80 (để chạy giao thức HTTP => lấy về giao diện trang web)
  2. Sau khi client được server xác thực thành công và đã có đủ thông tin cần thiết, nó sẽ mở cổng số 25 cho địa chỉ IP2. Lưu ý là client không hề gửi request đi mà chỉ mở port 25 cho web server.
  3. Khi có email mới, server sẽ kiểm tra xem kết nối tới (IP1, 25) có còn sống hay không, nếu có thì nó sẽ gửi thông báo về cho client.

Lúc này một câu hỏi lớn vẫn là làm sao để client và server có thể duy trì được kết nối ?

Đến đây mình có thể hiểu tại sao cặp (IP, port) lại được gọi là socket vì nó đi theo cặp như 2 đầu của một ổ cắm vậy.

Sở dĩ 2 máy có thể duy trì được kết nối là do port đã được mở và sẽ không đóng cho đến khi chiều bên kia gửi tín hiệu muốn chấm dứt bằng cách gửi gói tin RST. Trong trường hợp chiều bên kia ngắt kết nối mà không gửi RST thì kết nỗi vẫn sẽ được đóng sau một khoảng timeout nào đó được quy định ở quá trình Keep-Alive.

Quá trình Keep-Alive có 3 thuộc tính để quyết định có đóng kết nối hay không?

  1. tcp_keepalive_time: Khoảng thời gian không có tín hiệu. Mặc định là 7200s.
  2. tcp_keepalive_intvl: Khoảng thời gian chờ chiều bên kia hồi đáp. Mặc định là 75s.
  3. tcp_keppalive_probles: Số lần sẽ thử lại nếu việc giao tiếp gặp lỗi. Mặc định là 9.

Quá trình Keep-Alive sẽ diễn ra như sau:

  1. Client mở kết nối TCP.
  2. Sau một khoảng thời gian tcp_keepalive_time, nếu như server kia im lặng không có tín hiệu gì. Client sẽ gửi đi cờ ACK (kích thước rất nhỏ, có thể không được xem là một package) đến server và chờ hồi đáp.
  3. Server có hồi đáp ACK hay không ?
  • (3.1) Nếu không hồi đáp: Kiểm tra xem số lần thử lại đã vượt quá tcp_keppalive_probles hay chưa ? Nếu chưa thì tiến hành đợi sau khoảng tcp_keepalive_intvl rồi gửi lại ACK và quay lại bước 3. Nếu đã vượt quá tcp_keepalive_probes thì gửi RST đến server (không quan tâm đến kết quả trả về) rồi đóng kết nối.
  • (3.2) Nếu server hồi đáp:
    1. Nếu hồi đáp đúng => reset lại các thuộc tính rồi quay về bước 2.
    2. Nếu hồi đáp sai => chuyển sang 3.1

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

Một socket Unix được sử dụng trong framework client-server. Hầu hết các application protocol như FTP, SMTP và POP3 sử dụng các socket để thiết lập kết nối giữa client và server, sau đó thực hiện trao đổi dữ liệu.

Phân loại socket

Sau khi hiểu được khái niệm Socket là gì? Mình cùng tìm hiểu các loại socket gồm có những gì? Socket có bốn loại socket, hai cái đầu tiên được sử dụng phổ biến nhất và hai cái cuối cùng hiếm khi được sử dụng.

Các process đượ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 loại socket khác nhau.

Stream Sockets

Truyền tải dữ liệu trong một môi trường mạng được đảm bảo. Nếu bạn gửi qua socket 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 để truyền dữ liệu. Nếu không thể gửi, người gửi sẽ nhận được một chỉ báo lỗi.

Socket Datagram

Truyền tải dữ liệu trong môi trường mạng không được đảm bảo. Chúng sử dụng giao thức UDP, do đó, bạn không cần phải thiết lập và duy trì kết nối như TCP. Bạn build một packet với thông tin địa chỉ đích và gửi nó đi, vậy là hoàn tất, bạn cũng không cần phải quan tâm thứ tự gói tin hoặc tính toàn vẹn của chúng ở phía người nhận.

Raw Sockets là  gì?

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ấp thấp. Hỗ trợ trừu tượng hóa socket. Raw socket không dành cho người dùng phổ 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 những đặc điểm cấp thấp rất chuyên sâu của các giao thức.

Sequenced Packet Sockets

Loại socket này được cung cấp như một phần của Network System (NS) socket abstraction, và nó cực kỳ quan trọng với các NS applications. Sequenced-packet sockets cho phép người dùng điều chỉnh Sequence Packet Protocol (SPP) hoặc Internet Datagram Protocol (IDP) headers của gói tin bằng cách viết prototype header kèm theo data cần gửi, hoặc sử dụng header mặc định cho các data được gửi ra, và cho phép người dùng nhận headers trong những incoming packets để hiểu được cấu trúc.

Một số thuật ngữ liên quan đến socket

Web socket

Websocket là công nghệ hỗ trợ giao tiếp hai chiều thông qua việc sử dụng TCP socket, để tạo ra một kết nối hiệu quả ít tốn kém giữa client và server. Websocket các không chỉ được sử dụng cho các ứng dụng web, mà người dùng có thể sử dụng chúng trong bất kì loại ứng dụng nào. Websocket thường rất nhiều người tin dùng bởi khả năng giao tiếp 2 chiều mạnh mẽ, tốc độ nhanh và dễ xử lý lỗi. Tuy nhiên web socket hầu như chưa được các trình duyệt hỗ trợ, nên khá khó để sử dụng phổ biến.

Unix socket

Unix socket dùng để trao đổi dữ liệu giữa các ứng dụng trên cùng máy tính. Unix socket có khả năng tránh được các bước kiểm tra hoặc routing, do đó trong đầu kết nối rất nhanh và nhẹ nhàng hơn so với giao thức TCP. Tuy nhiên Unix socket có nhược điểm đó là không thể kết nối hai ứng dụng được với nhau. Việc phân quyền có thể gây đến nhiều rắc rối cho bạn, do bản chất của unix socket chỉ là một tập tin trên máy chủ.
Socket rất hữu ích trong quá trình nhận và truyền tải dữ liệu giữa hai tiến trình. Súc két được hỗ trợ trên nhiều giao thức khác nhau như TCP hay UDP,… Hi vọng bài viết này đã đem đến cho bạn những kiến thức bổ ích về socket. Hãy like và share bài viết này nếu bạn thấy hay nhé!!!
Xem thêm: SQL là gì? Cấu trúc sử dụng một số câu lệnh trong SQL

Lời kết

Trên đây là một số thông tin cũng như khái niệm để bạn năm rõ được Socket là gì? Cũng như nó được sử dụng ở đâu? Và các loại socket thường được sử dụng. Nếu có thắc mắc hay đóng góp ý kiến, mời bạn để lại bình luận phía dưới bài viết này. Vietnix xin chân thành cảm ơn bạn!

Nếu bạn có thắc mắc hay có vấn đề cần hỗ trợ, bạn có thể liên hệ trực tiếp với Vietnix thông qua các kênh sau:
  • Hotline: 1800 1093 - 07 088 44444
  • Email: support@vietnix.vn
  • Hoặc chat trực tiếp với Vietnix thông qua biểu tượng Livechat ở góc phải màn hình. Đội ngũ chuyên viên của chúng tôi luôn sẵn sàng tư vấn và hỗ trợ bạn 24/7.
Vietnix hiện đang có chương trình khuyến mãi lớn nhất trong năm, giảm giá TRỌN ĐỜI: Đăng ký dùng thử ngay và Vietnix sẽ hoàn tiền 100% nếu quý khách không hài lòng với chất lượng sản phẩm, dịch vụ!
Mình là Bo - admin của Quản Trị Linux. Mình đã có 10 năm làm việc trong mảng System, Network, Security và đã trải nghiệm qua các chứng chỉ như CCNP, CISSP, CISA, đặc biệt là chống tấn công DDoS. Gần đây mình trải nghiệm thêm Digital Marketing và đã hòan thành chứng chỉ CDMP của PersonVUE. Mình rất thích được chia sẻ và hỗ trợ cho mọi người, nhất là các bạn sinh viên. Hãy kết nối với mình nhé!
Bài viết liên quan
Không có bài viết liên quan
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments