Nếu bạn là một lập trình viên, chắc hẳn bạn nên biếtsocket 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.
Đang xem: Lập trình socket cơ bản với tcp socket là gì, hiểu về socket là gì trong mạng máy tính
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.
Web Socket là gì
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.
Nội dung
Socket hoạt động như thế nào?Phân loại socketMột số thuật ngữ liên quan đến socket
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:
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)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.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?
tcp_keepalive_time: Khoảng thời gian không có tín hiệu. Mặc định là 7200s.tcp_keepalive_intvl: Khoảng thời gian chờ chiều bên kia hồi đáp. Mặc định là 75s.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.
Xem thêm: Windows Oem Là Gì ? Nó Có Khác Gì Với Các Bản Windows 10 Thường ?
Quá trình Keep-Alive sẽ diễn ra như sau:
Client mở kết nối TCP.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.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:Nếu hồi đáp đúng => reset lại các thuộc tính rồi quay về bước 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.
Xem thêm: Thẻ Nfc Là Gì ? Kết Nối Nfc Trên Điện Thoại Là Gì
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
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. gocnhintangphat.com xin chân thành cảm ơn bạn!