Socket là gì? – 4 loại socket thường sử dụng

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 vi I / O được thực thi bằng cách write hoặc read một File descriptor. File descriptor chỉ là một số nguyên được link với một file đang mở. Và nó hoàn toàn có thể là liên kết 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 tính năng khác của socket là giúp những tầng TCP hoặc TCP Layer định danh ứng dụng mà tài liệu sẽ được gửi tới trải qua sự ràng buộc với một cổng port ( biểu lộ là một số lượng đơn cử ), từ đó sẽ thực thi liên kết giữa client và server .
banner khuyen mai combo
Chương trình khuyễn mãi thêm cuối năm tại Vietnix

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 giải trí ở tầng 4 của quy mô OSI ( Transport layer )

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

Như tất cả chúng ta đã biết thì có những port được server service lao lý dùng cho những dịch vụ pháp luật ( 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 thắc mắc lớn vẫn là làm thế nào để client và server hoàn toàn có thể duy trì được liên kết ?
Đến đây mình hoàn toàn 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 những application protocol như FTP, SMTP và POP3 sử dụng những socket để thiết lập liên kết giữa client và server, sau đó triển khai trao đổi tài 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ỉ tiếp xúc giữa những socket cùng loại. Nhưng không có hạn chế nào ngăn cản tiếp xúc giữa những loại socket khác nhau .

Stream Sockets

Truyền tải tài liệu trong một môi trường tự nhiên mạng được bảo vệ. 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 tài liệu. Nếu không hề gửi, người gửi sẽ nhận được một chỉ báo lỗi .

Socket Datagram

Truyền tải tài liệu trong thiên nhiên và môi trường mạng không được bảo vệ. 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ì liên kết 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 chăm sóc 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 ứng cho người dùng quyền truy vấn vào những giao thức truyền thông online cấp thấp. Hỗ trợ trừu tượng hóa socket. Raw socket không dành cho người dùng đại trà phổ thông ; chúng đã được phân phối hầu hết cho những người chăm sóc đến việc tăng trưởng những giao thức truyền thông online mới hoặc để có quyền truy vấn những đặc thù cấp thấp rất nâng cao của những giao thức .

Sequenced Packet Sockets

Loại socket này được phân phối như một phần của Network System ( NS ) socket abstraction, và nó cực kỳ quan trọng với những NS applications. Sequenced-packet sockets được cho phép người dùng kiểm soát và đ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 những data được gửi ra, và được cho phép người dùng nhận headers trong những incoming packets để hiểu được cấu trúc .
banner khuyen mai tich luy

Chương trình ưu đãi cuối năm tại Vietnix

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

Web socket

Websocket là công nghệ tiên tiến tương hỗ tiếp xúc hai chiều trải qua việc sử dụng TCP socket, để tạo ra một liên kết hiệu suất cao ít tốn kém giữa client và server. Websocket những không riêng gì được sử dụng cho những ứng dụng web, mà người dùng hoàn toàn 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 năng lực tiếp xúc 2 chiều can đảm và mạnh mẽ, vận tốc nhanh và dễ giải quyết và xử lý lỗi. Tuy nhiên web socket phần đông chưa được những trình duyệt tương hỗ, nên khá khó để sử dụng thông dụng .

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!