Socket là gì?

Article ID: 798
Cập nhật gần nhất: 24 Th10, 2021

Socket là gì?

Socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ liệu trên internet. Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều, hay còn gọi là two-way communication để kết nối 2 process trò chuyện với nhau được ràng buộc bằng một cổng. Điểm cuối (endpoint) của liên kết này được gọi là socket.

Vì sao cần sử dụng Socket?

Thường thì với một trang web tin tức hay bán hàng, blog v.v... người dùng chỉ cần yêu cầu máy chủ tải đúng trang mình cần để hiển thị lên và đọc sau đó lại chuyển sang trang khác, nhưng bây giờ ta cần một thứ gì đó cần được cập nhật liên tục thì sao? ví dụ như hiển thị kết quả sổ số, cập nhật tỉ số bóng đá, server game, hoặc thông dụng hơn là chat theo thời gian thực. Khi này ta sẽ cần dùng đến Socket, nó sẽ lắng nghe trên một cổng được định sẵn và bất kỳ khi nào có dữ liệu nó sẽ ngay lập tức xử lý và đưa ra kết quả, giúp người dùng cập nhật thông tin nhanh chóng với độ trễ cực thấp.

Tất nhiên là một server web bình thường cũng có thể làm được tuy nhiên chúng phải request liên tục vào server điều này sẽ nhanh chóng làm đuối server và sẽ không thể mang lại hiệu suất cao được.

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

Nếu như một webserver thông thường thì người dùng phải gọi đến server rồi chờ server trả lời, thì socket sẽ lắng nghe từ 2 phía(cả server và client) từ đó mang lại cho nó được khả năng real-time.

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 mở hay không, nếu có thì nó sẽ gửi thông báo về cho client.

Làm sao để client và server có thể duy trì được kết nối ?

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.

Phân loại Socket

Stream Socket: Dựa trên giao thức TCP( Tranmission Control Protocol), việc truyền dữ liệu chỉ thực hiện giữa 2 quá trình đã thiết lập kết nối. Do đó, hình thức này được gọi là socket hướng kết nối.

  • Ưu điểm: Có thể dùng để liên lạc theo mô hình client và sever. Nếu là mô hình client /sever thì sever lắng nghe và chấp nhận từ client. Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận một cách đáng tin cậy, đúng thứ tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và cơ chế chống tắc nghẽn. Đồng thời, mỗi thông điệp gửi phải có xác nhận trả về và các gói tin chuyển đi tuần tự.
  • Hạn chế: Có một đường kết nối (địa chỉ IP) giữa 2 tiến trình nên 1 trong 2 tiến trình kia phải đợi tiến trình kia yêu cầu kết nối.

Datagram Socket: Dựa trên giao thức UDP( User Datagram Protocol) việc truyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa 2 quá trình. Do đó, hình thức này được gọi là socket không hướng kết nối.

  • Ưu điểm: Do không yêu cầu thiết lập kết nối, không phải có những cơ chế phức tạp nên tốc độ giao thức khá nhanh, thuận tiện cho các ứng dụng truyền dữ liệu nhanh như chat, game…..
  • Hạn chế: Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức UDP không được tin cậy, có thế không đúng trình tự và lặp lại.

Trên đây là những thông tin cơ bản về Socket hy vọng đem lại một số kiển thức bổ ích cho các bạn về Socket.

Article ID: 798
Cập nhật gần nhất: 24 Th10, 2021
Lần sửa đổi: 1
Lượt xem: 0
Tags

Also read