Trang chủ Thủ Thuật Unix Sockets là gì và chúng hoạt động như thế nào?

Unix Sockets là gì và chúng hoạt động như thế nào?

0
35
Fiber optic cable connections.

Unix Sockets là gì và chúng hoạt động như thế nào?

Fiber optic cable connections.
Shutterstock/asharkyu

Unix ổ cắm là một hình thức giao tiếp giữa hai quá trình xuất hiện dưới dạng một tập tin trên đĩa. Tệp này có thể được sử dụng bởi các chương trình khác để thiết lập các kết nối rất nhanh giữa hai hoặc nhiều quy trình mà không có bất kỳ chi phí mạng nào.

Sockets là gì?

Ổ cắm là kết nối trực tiếp giữa hai quy trình. Hãy tưởng tượng nếu bạn muốn gọi bạn mình xuống đường; bạn có thể thực hiện một cuộc gọi đã định tuyến nó thông qua công ty điện thoại của bạn và quay trở lại nhà của họ, hoặc bạn có thể chạy một dây trực tiếp đến nhà của họ và cắt bỏ người trung gian. Điều thứ hai rõ ràng là không thực tế trong cuộc sống thực, nhưng trong thế giới unix, rất phổ biến để thiết lập các kết nối trực tiếp này giữa các chương trình.

Tên riêng cho unix sockets là Unix Domain Sockets, bởi vì tất cả chúng đều nằm trong một máy tính. Theo một nghĩa nào đó, ổ cắm là một mạng hoàn toàn chứa trong hạt nhân; thay vì sử dụng giao diện mạng để gửi dữ liệu, dữ liệu đó có thể được gửi trực tiếp giữa các chương trình.

Mặc dù tạo tệp trên đĩa, ổ cắm Unix không thực sự ghi dữ liệu chúng gửi vào đĩa, vì điều đó sẽ quá chậm. Thay vào đó, tất cả dữ liệu được giữ lại trong bộ nhớ hạt nhân; điểm duy nhất của tệp socket là duy trì tham chiếu đến ổ cắm và cấp cho nó quyền hệ thống tệp để kiểm soát quyền truy cập. Ví dụ: ổ cắm của MySQL thường ở:

/var/lib/mysql/mysql.sock

Tệp này không chứa bất kỳ nội dung nào và bạn không nên sửa đổi trực tiếp tệp đó, ngoại trừ các quyền nếu có. Chỉ là một cái tên.

Ổ cắm hoạt động như thế nào?

Ổ cắm chỉ đơn giản là cung cấp phần cứng thực tế để di chuyển dữ liệu xung quanh. Ổ cắm dựa trên TCP được gọi là ổ cắm luồng, nơi tất cả dữ liệu sẽ đến theo thứ tự. Ổ cắm dựa trên UDP là ổ cắm biểu đồ dữ liệu, trong đó đơn hàng (hoặc thậm chí giao hàng) không được đảm bảo. Ngoài ra còn có các ổ cắm thô, không có bất kỳ hạn chế nào và được sử dụng để thực hiện các giao thức và tiện ích khác nhau cần kiểm tra lưu lượng mạng cấp thấp, như Wireshark.

quảng cáo

Ổ cắm thường vẫn sử dụng TCP hoặc UDP, vì chúng không phải là bất cứ điều gì đặc biệt ngoài một đường ống ưa thích trong hạt nhân. TCP và UDP là các giao thức truyền tải xác định cách dữ liệu đi từ nơi này sang nơi khác nhưng không thực sự quan tâm đến dữ liệu là gì. TCP và UDP cung cấp nền tảng cho hầu hết các giao thức khác như FTP, SMTP và RDP, hoạt động ở cấp độ cao hơn.

Một ứng dụng có thể sử dụng một triển khai TCP hơi khác; ổ cắm luồng sử dụng giao thức, đó là những gì TCP cũng sử dụng để vận chuyển hầu như mọi lúc và trong khi về cơ bản SOCK_STREAM chúng có thể hoán đổi cho nhau, về mặt kỹ thuật, chúng hơi khác nhau. Mặc dù đây là nội dung cấp thấp và không thực sự là điều bạn sẽ phải lo lắng, nhưng chỉ cần biết rằng hầu hết lưu lượng truy cập được gửi qua các ổ cắm miền UNIX là dựa trên TCP hoặc UDP hoặc ít nhất là khá giống với nó và TCP được gửi qua các ổ cắm miền UNIX nhanh hơn TCP qua các giao diện mạng như cổng.

Sử dụng ổ cắm trong thực tế

Ổ cắm Unix thường được sử dụng thay thế cho kết nối TCP dựa trên mạng khi các quy trình đang chạy trên cùng một máy. Dữ liệu thường vẫn được gửi qua các giao thức tương tự; nó chỉ ở trong cùng một máy và biết nó đang chạy trong cùng một miền (do đó, tên UNIX ổ cắm miền), vì vậy nó không bao giờ phải làm phiền một giao diện mạng loopback để kết nối với chính nó.

Ví dụ lớn nhất về điều này là Redis, một cửa hàng giá trị khóa cực kỳ nhanh hoạt động hoàn toàn trong bộ nhớ. Redis thường được sử dụng trên cùng một máy chủ đang truy cập nó, vì vậy bạn thường sẽ có thể sử dụng ổ cắm. Ở mức thấp như vậy và với redis nhanh như thế nào, ổ cắm cung cấp một tăng 25% hiệu suất trong một số điểm chuẩn tổng hợp.

Nếu bạn đang kết nối với cơ sở dữ liệu MySQL, bạn cũng có thể sử dụng ổ cắm. Thông thường bạn sẽ kết nối từ host:port một hệ thống từ xa, nhưng nếu bạn đang kết nối với cơ sở dữ liệu trên cùng một máy chủ (ví dụ: API REST truy cập cơ sở dữ liệu), bạn có thể sử dụng ổ cắm để tăng tốc. Điều này sẽ không ảnh hưởng đến việc sử dụng bình thường, nhưng rất đáng lưu ý khi tải, hơn 20% trên lõi 24 cao cấp với 128 người dùng đồng thời và một triệu truy vấn mỗi giây. Cho dù bạn có thấy lợi ích từ ổ cắm hay không là một câu chuyện khác, nhưng tại thời điểm đó, bạn có thể sẽ muốn xem xét sao chép và cân bằng tải.

quảng cáo

Nếu bạn muốn làm việc với ổ cắm theo cách thủ công, bạn có thể sử dụng socat tiện ích để hiển thị chúng qua các cổng mạng:

socat TCP-LISTEN:12345 UNIX-CONNECT:/var/lib/socket.sock

Điều này về mặt kỹ thuật đánh bại mục đích của các ổ cắm miền Unix nhưng có thể được sử dụng để gỡ lỗi ở lớp truyền tải.

How to Fix, Edit, or Undo Git Commits (Changing Git History)

Cách khắc phục, chỉnh sửa hoặc hoàn tác cam kết Git (Thay đổi lịch sử Git)

What Does It Mean to “Shift Security Left?”

“Shift Security Left có nghĩa là gì?”

How to Lint Your Kubernetes Manifests With Kube-Score

Làm thế nào để Lint Kubernetes của bạn hiển thị với Kube-Score

What Is SQLite and Why Is It So Popular?

SQLite là gì và tại sao nó lại phổ biến như vậy?

Is Rocky Linux the new CentOS?

Rocky Linux có phải là CentOS mới không?

How to Use Readonly Properties in PHP 8.1

Cách sử dụng thuộc tính Readonly trong PHP 8.1

Dịch từ: https://www.cloudsavvyit.com/1263/what-are-unix-sockets-and-how-do-they-work/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây