通訊語義 為保證rpc語義的實現,我們必須在良種可能中進行選擇。一方面,為盡量使遠端過程呼叫的行為像乙個本地過程呼叫,rpc應該使用一種像tcp這樣可靠的運輸,而且應該對程式設計師保證可靠性。另一方面,為允許程式設計師使用高效率的、無連線的運輸協議,遠端過程呼叫機制應當支援用udp這樣的資料報協議進行通訊。因為udp傳輸的不可靠性,在傳輸過程中可能因為報文的丟失,使得呼叫者無法做出應答,而導致遠端過程被多次呼叫。因此,選擇udp作為prc應用傳輸協議的程式設計師,他們所構建的程式必須要能容忍零或多次執行語義。
在我們下一章的linux源**分析中,我們將看到,linux對於rpc遠端過程呼叫的實現是採用udp作為它的傳輸層應用協議來進行的。目前的linux系統中,並沒有採用tcp協議來實現網路檔案系統的傳輸層應用。linux設計者在這方面的考慮應該是基於實現nfs系統傳輸的高效性,對於tcp協議的支援相信linux將會在以後實現。
通訊語義
在使用tcp或udp協議進行遠端資料傳輸的時候,需要指定乙個伺服器的通訊埠號。但是,sun rpc引出了乙個有趣的問題:因為它使用32位位元數來標識遠端程式,而udp和tcp運輸協議使用16位元數的協議埠號來標識通訊端點,這就有可能超出協議埠的範圍。因此,不可能將rpc程式號直接對映到協議埠號,因此rpc不能象其他通訊協議一樣使用分配知名埠的協議。但是儘管rpc程式的潛在數量超過了分配知名埠的能力,但rpc和其他服務沒有什麼不同。在任意給定時間內,單個計算機僅僅執行少量的遠端程式。因此,只要埠分配是臨時的,每個rpc程式可以獲得乙個協議埠號,並且使用這個埠號進行通訊。
prc對於協議埠的獲得是通過乙個稱之為埠對映器的機制來實現的。因為伺服器埠對映是臨時的,每個 rpc程式在資料傳輸前可以獲得乙個協議埠號,並且使用這個傳輸埠進行通訊。
然而,作為發起遠端過程呼叫的客戶機程式,除了知道它所希望與之聯絡的機器位址以及rpc程式號以外,它還必須在開始執行之後獲得乙個協議埠,否則不能直接聯絡遠端程式。這種埠對映必須是動態的,因為如果機器重啟動或者rpc程式再次開始執行,埠可能會改變。
onc rpc機制包含了乙個動態對映服務。提供rpc程式的每台機器維護著乙個埠對映資料庫,而且提供了一種允許呼叫者將rpc埠號對映為協議埠的機制。它在每台機器中用乙個伺服器維護這乙個小資料庫,這個伺服器被稱為rpc埠對映器。乙個rpc程式一旦註冊了自己,其他機器上的呼叫者就可以通過向埠對映器傳送乙個請求來找到它的協議埠。
一次rpc遠端呼叫的具體流程
通過以上兩小節的討論,我們對rpc體系的實現從上到下有了乙個概念上的認識。這一小節中,將具體說明一次遠端過程呼叫的具體實現,從而加深對這部分實現機制的認識。
乙個rpc遠端過程呼叫的流程如下:
1. 需要執行乙個遠端程式時,本地機器向埠對映器發出註冊請求,將乙個三元組加到資料庫: (rpc程式號,協議埠號,版本號) 並分配給該遠端程式乙個通訊協議埠。
2. 呼叫方傳送rpc查詢請求,呼叫tcp或udp協議,將請求報文傳送到伺服器埠對映器的知名埠,在給定一rpc程式號和版本號時查詢其協議埠。
3. 埠對映器返回這個指定程式當前正在使用的協議埠號。
4. 呼叫者在得到了該目標程式正在使用的埠號後,可以直接聯絡遠端程式了。此後,呼叫方將呼叫的遠端過程的名稱、型別、版本號、一些傳輸的xdr資料結構,進行引數的序列化,構成rpc報文。在呼叫方和伺服器之間實現通訊傳輸。
傳輸層的基本理論和基本機制
多路復用和多路分用 從主機3來的p4程序要正確傳輸到主機2的p2程序,從主機1老的p3程序要正確傳輸到主機2的p1程序,socket是應用層和傳輸層之間的乙個門。奪路分用如何工作 主機接收到ip資料報 1.每個資料報攜帶源ip位址和目的ip位址 2.每個資料報攜帶乙個傳輸層的段 segment 3....
傳輸層的詳解
傳輸層作用 提供端到端的服務,傳送端和接收端 負責軟體傳輸過程資料的效率和可靠性 埠號作用 唯一標識上層協議 傳輸層埠分類 熟知埠號 0 1023 伺服器端使用 註冊埠號 1024 49151 伺服器端使用 隨機埠號 49152 65535 伺服器端和客戶端使用 傳輸層常用協議tcp 傳輸控制協議,...
傳輸層 TCP協議的可靠傳輸
tcp可靠傳輸的實現主要依靠滑動視窗和超時重傳機制。滑動視窗與超時重傳,保證了資料段傳輸不重複,不丟失,不差錯,按序到達。tcp對待傳送的資料按位元組進行編序,比如0號位元組,1號位元組,2號位元組 tcp每傳送乙個報文段,就對這個報文段設定一次計時器,如果超時,重傳該報文。tcp基於滑動視窗協議實...