俞木發(fā)
RPC是“Remote ProcedureCall”的簡稱,直譯為“遠(yuǎn)程過程調(diào)用”,它是Windows為一個(gè)節(jié)點(diǎn)請(qǐng)求另一個(gè)節(jié)點(diǎn)提供的系統(tǒng)服務(wù)。比如在局域網(wǎng)中,客戶端(以下簡稱為電腦A)要訪問部署在服務(wù)端(以下簡稱為電腦B)的共享打印機(jī)。由于打印機(jī)沒有安裝在電腦A上,因此電腦A對(duì)打印機(jī)的訪問就需要通過網(wǎng)絡(luò)調(diào)用,RPC的作用就是用來表達(dá)調(diào)用的語義和傳達(dá)調(diào)用的數(shù)據(jù)。如果系統(tǒng)提示RPC服務(wù)不可用,那么電腦A就無法成功訪問打印機(jī)了。RPC的連接流程如圖所示(圖2),可以看到在整個(gè)連接過程中,最容易導(dǎo)致RPC故障的主要就是系統(tǒng)服務(wù)、通信協(xié)議、防火墻、遠(yuǎn)程服務(wù)端以及電腦A、B本地網(wǎng)絡(luò)狀態(tài)這五個(gè)環(huán)節(jié)。
如上所述,我們知道了產(chǎn)生RPC連接問題的五個(gè)主要環(huán)節(jié)。下面我們就主要針對(duì)這些環(huán)節(jié)介紹相應(yīng)的解決方案。
1系統(tǒng)服務(wù)狀態(tài)檢測
Windows中的RPC連接是通過“Remote Procedure Call(RPC)”服務(wù)提供的,該服務(wù)又和“RPC Endpoint Mapper”、“DCOM Server Process Launcher”等服務(wù)相關(guān)聯(lián)。因此,在遇到RPC服務(wù)不可用時(shí),我們需要先對(duì)電腦A和電腦B中的上述三個(gè)服務(wù)的狀態(tài)進(jìn)行檢測。在任務(wù)欄的搜索框中輸入“services.msc”啟動(dòng)服務(wù)組件,找到上述三個(gè)服務(wù)(需要同時(shí)檢測電腦A和B),然后將它們的啟動(dòng)狀態(tài)均設(shè)置為“自動(dòng)”,并啟動(dòng)這些服務(wù)(圖3)。
2通信協(xié)議狀態(tài)檢測
RPC服務(wù)使用的網(wǎng)絡(luò)通信協(xié)議主要是本機(jī)以太網(wǎng)的“Microsoft網(wǎng)絡(luò)的文件和打印機(jī)共享”和“Internet協(xié)議版本6(TCP/IPv6)”。如果服務(wù)狀態(tài)檢測沒有問題,那么可以在任務(wù)欄的搜索框中輸入“以太網(wǎng)設(shè)置”(需要檢測電腦A和B),然后依次執(zhí)行“更改適配器選項(xiàng)→選中本機(jī)網(wǎng)卡→右擊選擇屬性”,在打開的窗口中確保上述兩個(gè)項(xiàng)目前的復(fù)選框均已勾選,最后點(diǎn)擊“確定”保存并退出(圖4)。
3防火墻狀態(tài)檢測
如圖2的流程所示,RPC服務(wù)在電腦A發(fā)起遠(yuǎn)程連接,以及電腦B返回連接請(qǐng)求的時(shí)候都要通過防火墻。如果電腦的防火墻對(duì)一些端口進(jìn)行了限制,那么也會(huì)導(dǎo)致RPC服務(wù)不可用。比如常規(guī)的RPC服務(wù)需要用到TCP/135端口連接,端口連接狀態(tài)可以使用PowerShell命令進(jìn)行檢測。以管理員身份啟動(dòng)PowerShell后輸入并執(zhí)行“ipconfig”命令,在窗口中記住本機(jī)的IP地址,假設(shè)電腦A的地址是“192.168.1.5”。繼續(xù)執(zhí)行“Test-NetConnection 192.168.1.5-port 135”命令進(jìn)行檢測,這里確?!癟cpTestSucceeded”狀態(tài)顯示為“True”(表示可以成功連接135端口)(圖5)。
如果上述狀態(tài)顯示為“False”(表示135端口不可用),那么我們就需要對(duì)電腦A(主要檢測出站規(guī)則)和電腦B(主要檢查入站規(guī)則)的防火墻規(guī)則進(jìn)行檢查。以檢查電腦B的入站規(guī)則為例,在桌面任務(wù)欄的搜索框中輸入“高級(jí)安全”,啟動(dòng)“高級(jí)安全Windows Defender防火墻”,在左側(cè)的窗格中切換到“入站規(guī)則”,然后在右側(cè)的窗格中檢查“操作”狀態(tài)為“阻止”的規(guī)則,打開相應(yīng)的規(guī)則后切換到“協(xié)議和端口”,查看是否有阻止TCP/135端口的設(shè)置,如有則將該規(guī)則刪除即可(圖6)。電腦A的出站規(guī)則的檢測類似。
4遠(yuǎn)程電腦狀態(tài)檢測
如圖2的流程所示,電腦A在進(jìn)行RPC連接時(shí)需要得到遠(yuǎn)程電腦B的響應(yīng),如果電腦B的網(wǎng)絡(luò)出現(xiàn)問題也會(huì)導(dǎo)致RPC不可用。電腦A、B之間網(wǎng)絡(luò)互通可以通過Ping命令來測試,比如已經(jīng)知道之前連接的電腦B的IP地址是192.168.1.6,在電腦A上啟動(dòng)命令提示符后輸入并執(zhí)行“ping 192.168.1.6”,如果顯示“無法訪問目標(biāo)主機(jī)”,那么說明電腦A與B的網(wǎng)絡(luò)打印機(jī)之間線路不通(圖7)。此時(shí)就需要對(duì)電腦A、B的網(wǎng)絡(luò)設(shè)置進(jìn)行檢測。比如可以用電腦A、B分別Ping電腦C,以確定電腦A、B和其他局域網(wǎng)電腦的網(wǎng)絡(luò)是否有問題,然后再進(jìn)行對(duì)應(yīng)的檢測;檢查電腦A、B的IP是否處在同一網(wǎng)段,還有子網(wǎng)掩碼是否相同,如果不一致,進(jìn)行對(duì)應(yīng)的設(shè)置;檢查電腦A、B防火墻的設(shè)置,必要時(shí)關(guān)閉防火墻再連接測試;檢查電腦B是否已經(jīng)開機(jī)等。
5電腦本地網(wǎng)絡(luò)狀態(tài)檢測
如上所述,RPC是為節(jié)點(diǎn)之間的網(wǎng)絡(luò)訪問提供服務(wù),如果本地電腦的網(wǎng)絡(luò)狀況出現(xiàn)問題,也會(huì)導(dǎo)致RPC服務(wù)不可用。如果使用上述介紹的方法進(jìn)行檢測均沒有問題,比如電腦A可以Ping通電腦B,但是問題依舊,那么可能是電腦A本地DNS緩存的問題。可以在命令提示符窗口中繼續(xù)執(zhí)行“ipconfig/flushdns”命令(清空本地DNS緩存)。如果RPC服務(wù)器上運(yùn)行的電腦B的名稱最近做過更改,那么可以在電腦B上執(zhí)行“ipconfig/registerdns”命令,將其重新注冊(cè)到活動(dòng)目錄DNS中,這樣一般可以解決問題(圖8)。