Tại sao lại có AF_NETLINK? Là AF_UNIX không đủ?


8

Theo tôi hiểu, giao thức ổ cắm AF_NETLINK dành cho giao tiếp giữa kernel và không gian người dùng và AF_UNIX dành cho giao tiếp giữa hai quá trình không gian người dùng.

Tại sao Linux cần một AF_NETLINK riêng? Tại sao các socket UNIX không thể được sử dụng để liên lạc giữa kernel và người dùng?

Câu trả lời:


3

Nguồn gốc và tính năng thiết kế là khác nhau. Nói chung, đó là một ý tưởng tốt hơn để thiết kế một giao thức từ đầu bởi vì sau đó bạn có thể làm cho nó đặc biệt phù hợp với những gì bạn cần, mà không gặp vấn đề với các giao thức cũ.

Tôi tin rằng sự lựa chọn này là do việc triển khai trong kernel của các socket miền UNIX quá khác nhau để cho phép chuyển sane sang giao tiếp kernel-kernel. Danh sách các giao thức cho AF_NETLINK được thiết kế đặc biệt để cung cấp điều khiển giống như ioctl. AF_UNIX thậm chí không sử dụng đối số "giao thức" cho sockethàm. Và nếu họ bằng cách nào đó mở rộng định nghĩa để cho phép các giao thức bổ sung, nó có thể sẽ phá vỡ các ứng dụng hiện có và sẽ rất khó xử khi chuyển hướng các giao thức mới sang mã điều khiển kernel. Nó cũng có thể là một rủi ro bảo mật khi chồng chéo hai chức năng này (đặc biệt là vì AF_UNIX ban đầu không được thiết kế với mục đích này).

Và cuối cùng ... các socket miền UNIX sử dụng hệ thống tập tin như một không gian tên (mặc dù có một hack cho phép các socket "nặc danh"). Như vậy, chúng có sẵn ngay lập tức cho tất cả người dùng có quyền đối với ổ cắm này - để liên lạc với kernel, cần phải có một "tệp" luôn mở ở đâu đó trong hệ thống tệp (có thể là sys?) Mà người dùng sẽ sử dụng để kết nối với kernel.

Nói tóm lại, chúng chỉ đơn giản là được sử dụng cho những thứ khác nhau. Ngay cả khi bạn có thể sử dụng lại AF_NETLINK cho hai quy trình không gian người dùng (nó được thực hiện khác với trong AF_UNIX) thì điều ngược lại sẽ không thực sự hiệu quả.


1
convey the information about the PID of the calling process-> SO_PEERCRED, SCM_CREDENTIALS?
Vi.

1
Có dễ dàng "đặt người trung gian" giữa máy khách và máy chủ AF_NETLINK (như với AF_UNIX) để theo dõi hoặc tăng cường (ví dụ cung cấp khả năng tương thích) giao tiếp không?
Vi.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.