Chính xác thì rpcbind làm gì?


39

Theo tài liệu:

Tiện ích rpcbind [3] ánh xạ các dịch vụ RPC tới các cổng mà chúng nghe. Các quy trình RPC thông báo cho rpcbind khi chúng bắt đầu, đăng ký các cổng mà chúng đang nghe và số chương trình RPC mà chúng mong đợi sẽ phục vụ. Hệ thống máy khách sau đó liên lạc với rpcbind trên máy chủ với số chương trình RPC cụ thể. Dịch vụ rpcbind chuyển hướng máy khách đến số cổng thích hợp để nó có thể giao tiếp với dịch vụ được yêu cầu

Để kiểm tra điều này, tôi đã thiết lập máy chủ và máy khách NFS và theo dõi lưu lượng giữa chúng. Từ những gì tôi thấy, khách hàng đã biết rằng dịch vụ NFS trên máy chủ đang lắng nghe trên cổng 2049.

Vì vậy, khi nào RCpbind đi vào chơi? Khi tôi làm rpcinfotrên máy chủ, tôi nhận được như sau:

100003    2    udp       0.0.0.0.8.1            nfs        superuser
100003    3    udp       0.0.0.0.8.1            nfs        superuser
100003    2    udp6      ::.8.1                 nfs        superuser
100003    3    udp6      ::.8.1                 nfs        superuser
100003    2    tcp       0.0.0.0.8.1            nfs        superuser
100003    3    tcp       0.0.0.0.8.1            nfs        superuser
100003    2    tcp6      ::.8.1                 nfs        superuser
100003    3    tcp6      ::.8.1                 nfs        superuser

không 0.0.0.0.8.1có nghĩa gì trong trường hợp này? Và làm thế nào để dịch sang cổng 2049?

Câu trả lời:


23

rpcbindlà một dạng tương tự gần giống với BIND, hoặc thực sự, bất kỳ máy chủ DNS nào. Nếu tôi nhớ lại một cách chính xác, bạn chọn hoặc được cung cấp một số giao thức khi bạn biên dịch khai báo giao diện RPC thành mã gốc của máy chủ và máy khách rpcgen.

Khi một khách hàng đăng ký một giao diện nhất định trên một máy chủ cụ thể, thông thường với một clnt_create()cuộc gọi, mã sơ khai sẽ hỏi rpcbindtrên máy chủ đó một câu hỏi, đại loại như "trên cổng UDP hoặc TCP nào là giao thức số X đang nghe?" rpcbind, không giống như hầu hết các dịch vụ ONC khác, lắng nghe trên cổng TCP và UDP 111, do đó, được cung cấp tên máy chủ hoặc địa chỉ IP, một chương trình chỉ có thể hỏi rpcbindvề máy chủ hoặc địa chỉ IP đó. rpcbindđáp ứng với số cổng thích hợp, nếu một máy chủ đã đăng ký với nó trên máy chủ đó. Việc đăng ký đó được thực hiện bởi quy trình máy chủ khi nó gọi svc_create().

Trong ví dụ của bạn, 100003 là số giao thức cho NFS. Một số quy trình đã được đăng ký rpcbind, cung cấp số giao thức của họ (100003) và bất kỳ cổng TCP hoặc UDP nào họ đã mua. Bạn có thể rpcbindđưa ra chính xác số cổng đó vào năm 2049 trong bất kỳ cuộc gọi nào cho "Tôi nên sử dụng cổng nào cho số giao thức 100003".

Bây giờ chúng ta đang đi vào lãnh thổ kỳ lạ. "0.0.0.0.8.1" nằm trong cột "địa chỉ" của rpcinfođầu ra. Vì đó là "địa chỉ chung" của quy trình máy chủ NFS, tôi đặt cược tiền tố "0.0.0.0" là địa chỉ IP (INADDR_ANY trong trường hợp này) mà máy chủ sử dụng trong bind()hệ thống gọi khi nhận được số cổng. Tôi không chắc hậu tố "8.1" là gì, nhưng nhìn vào rpcinfođầu ra, nó phải có một cái gì đó để làm với máy chủ NFS về cơ bản là một luồng nhân.


Vấn đề lớn nhất trong trường hợp của tôi là II không thấy máy khách truy vấn RCpbind trên máy chủ khi tôi đang theo dõi lưu lượng mạng. Bạn có biết khi nào truy vấn này cho số cổng xảy ra?
SivaDotRender

@SivaDotRender - Tôi không chắc chắn 100%, nhưng tôi tin rằng khi mã máy khách gọi clnt_create () để xử lý giao thức và máy chủ lưu trữ. Nó có thể sẽ được thực hiện thông qua UDP, trừ khi bạn thiết lập toàn bộ để sử dụng TCP.
Bruce Ediger

29
"8.1" là hai byte của số cổng. 2049 = (8 * 256) + 1.
Kenster

Vui lòng tuân theo thuật ngữ "chương trình num". Như trang nam làm
炸鱼 炸鱼
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.