有关RPC的笔记18.1.3RPC服务对数据的处理•RPC服务对数据的处理与jsp、asp等是不同的。在RPC服务中数据的处理是分为客户端处理和服务器端处理,而其他的Web应用环境中数据通常都是由服务端来处理。这正是是RIA强调客户端处理能力,改善用户体验的体现。Windows的最经典漏洞---SMBSMB(servermessageblock)服务器消息块,是文件和打印机共享服务的基础。TCP139运行在NetBIOS协议上的SMB服务TCP445运行在TCP协议上的SMB服务TCP135RPC监听端点映射服务UDP137NetBIOS域名/机器名与IP地址的解析服务预备:RPC(RemoteProcedureCall)RPCClientandRPCServer可以在TCP、UDP上实现RPC是分布式应用的基础,过程如下:–客户准备:三元组(远程机器、server、函数)–在RPCServer上需要运行一个RPC端口管理服务,每个RPCServer向它登记注册–RPCclient与远程机的RPC端口管理服务联系,请求RPCServer的端口号–然后RPCclient与RPCserver直接联系其他远程调用途径,如HTTP、SOAP511-1RPC簡介(二)遠端程序呼叫(RemoteProcedureCall,RPC)遠端電腦程序呼叫資料庫伺服器(DatabaseServer)Dataqueryupdateinsertdelete程式A程式B伺服器端主機A客戶端主機B客戶端主機RPCcallRPCcall網路設備611-2RPC協定架構應用層:Client/Server資料庫伺服系統表現層:外部資料表示法(eXternalDataRepresentation,XDR)抽象語意表示(ASN.1)交談層:實現RPC系統傳輸層:TCP或UDP協定網路層:IP協定鏈路層與實體層:一般網路,如Ethernet網路應用程式XDR/ANS.1RPCTCPUDPIP網路硬體介面網路實體連線7.應用層6.表現層5.交談層4.傳輸層3.網路層1,2.鏈路層,實體層711-3RPC運作方式(一)RPC連線方式1.當伺服程式(RPCServer)啟動時,便向Portmap註冊本身的傳輸埠口。2.客戶端如欲呼叫遠端程式,首先向Portmap查詢傳輸埠口位置。3.客戶端得到埠口位址後,便可直接連結伺服程式。PortmapServerProgramClientProgram_2portAportBportC(1)(2)(3)伺服器客戶端ClientProgram_1811-3RPC運作方式(二)RPC程序呼叫方式ServerStubClientStubRPCClientclnt_call()RPCServerremoteprocedureClientStubXDRServerStubXDR低層協定(傳輸層)遠端程序呼叫(RPC,RemoteProcedureCalls)開發網路應用程式常用的方法,主要是因為使用Socket介面撰寫網路應用程式時常須考慮各種通訊的細節,例如資料型式與結構的轉換、連線的管理等假如我們能將這些細節簡化,則程式設計者可以把時間轉移到應用系統的需求上,這才是使用者最關心的遠端程序呼叫的基本原理遠端程序呼叫的基本原理,是把網路的通訊看成是程式中的程序(procedure)當程式需要遠端程序提供某種服務或接受訊息時,直接呼叫一個程序,而這個程序有相對應的遠端程序,可以在呼叫後於遠端的電腦上被執行11分散式系統的訊息傳遞主從式架構暫停式/非暫停式緩衝式/非緩衝式可靠式/不可靠式遠端程序呼叫當A電腦的行程呼叫B電腦的行程時,首先A電腦的呼叫行程會被暫停執行,改在B電腦上執行被呼叫的行程,所運算所需要的資訊將會以參數的方式由A電腦送往B電腦,運算得知的結果也會送回12主從架構的訊息溝通與等待13遠端服務遠端服務的模式是本地端的行程呼叫使用遠端電腦所提供的服務,遠端電腦收到這些訊息後,就開始執行所提供的服務,並將結果回傳執行遠端服務也可以像呼叫函式一樣,也就是有一套機制幫忙處理底層的訊息傳遞,就可以簡化遠端服務系統的開發,這樣的機制稱為遠端程序呼叫14遠端程序呼叫模型RPC的設計理念基本上是想要讓執行遠端服務也像呼叫內部函式一樣簡單stub分成客戶端stub與伺服端stub,是用來處理RPC模式中參數傳遞、訊息交換、與錯誤處理等工作的函式stub將參數包裝成適合傳送的封包型態,稱為整碼(marshal)stub從接收的封包中將回傳值解開,稱為反整碼(unmarshal)Skeleton負責將訊息解開,還負責將回傳的資料也包裝成封包並傳回客戶端15RPC機制示意圖核心核心呼叫函式函式回傳整碼整碼反整碼反整碼遠端服務客戶端stub(stub)伺服端stub(skeleton)客戶端電腦伺服端電腦16透過RPC傳遞參數17RPC所遭遇到的問題最困難的地方在於參數傳遞的問題不同電腦因硬體設計的理念南轅北轍,有時連最基本的位元組排列方式都不一樣記憶體0x010x02bigendianPowerPC0x010x02littleendianx86CPU0x020x01指標也無法傳遞18如何找到對方電腦-動態連結當客戶端要使用某個伺服端中的服務時,必須要先知道伺服端的位址才能與伺服端溝通,這個過程稱為連結透過註冊的手法,讓伺服器提供的行程清單動態連結讓客戶端不必事先知道伺服端的位置,在要使用RPC前,再詢問伺服端目前的位址優點客戶端不用事先知道伺服端的位址缺點客戶端向連結器詢問與向連結器註冊的額外負擔19動態連結當客戶端要使用某個伺服端中的服務時,必須要先知道伺服端的位址才能與伺服端溝通,這個過程稱為連結動態連結讓客戶端不必事先知道伺服端的位置,在要使用RPC前,再詢問伺服端目前的位址優點客戶端不用事先知道伺服端的位址缺點客戶端向連結器詢問與向連結器註冊的額外負擔20動態聯結Silberschatz,GalvinandGagne20023.21OperatingSystemConceptsClient-ServerCommunicationSocketsRemoteProcedureCallsRemoteMethodInvocation(Java)Silberschatz,GalvinandGagne20023.22OperatingSystemConceptsSocketsAsocketisdefinedasanendpointforcommunication.ConcatenationofIPaddressandportThesocket161.25.19.8:1625referstoport1625onhost161.25.19.8Communicationconsistsbetweenapairofsockets.Silberschatz,GalvinandGagne20023.23OperatingSystemConceptsSocketCommunicationSilberschatz,GalvinandGagne20023.24OperatingSystemConcepts遠端程序呼叫RemoteProcedureCalls遠端呼叫(RPC)是行程間的程序呼叫抽象觀念移植到網路系統上.Stubs–為伺服器端(server)的真正程序執行時在客戶端(client)所建立的代理程式.客戶端的stub程式可以找到伺服器而且配置保護(marshall)對應的參數.伺服器端的stub程式收到這個訊息後,拆解被保護的參數,然後執行在伺服器端對應的程序.Silberschatz,GalvinandGagne20023.25OperatingSystemConceptsExecutionofRPCSilberschatz,GalvinandGagne20023.26OperatingSystemConceptsRemoteMethodInvocationRemoteMethodInvocation(RMI)isaJavamechanismsimilartoRPCs.RMIallowsaJavaprogramononemachinetoinvokeamethodonaremoteobject.小知识:Netstat命令用法命令格式:Netstat-a-e-n-o-s-a表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。-e表示显示以太网发送和接收的字节数、数据包数等。-n表示只以数字形式显示所有活动的TCP连接的地址和端口号。-o表示显示活动的TCP连接并包括每个连接的进程ID(PID)。-s表示按协议显示各种连接的统计信息,包括端口号。28netstat(3)TCP137.222.14.166:1160137.222.12.110:143ESTABLISHEDTCP137.222.14.166:1171137.222.12.110:143ESTABLISHEDTCP137.222.14.166:1401137.222.12.110:22ESTABLISHEDTCP137.222.14.166:14390.0.0.0:0LISTENINGTCP137.222.14.166:1439137.222.136.39:139ESTABLISHEDTCP137.222.14.166:14820.0.0.0:0LISTENINGTCP137.222.14.166:1482137.222.125.240:139ESTABLISHEDTCP137.222.14.166:1526137.222.10.55:143ESTABLISHEDTCP137.222.14.166:1527137.222.10.55:143ESTABLISHEDTCP137.222.14.166:1750137.222.10.68:389CLOSE_WAITTCP137.222.14.166:1755137.222.10.68:389CLOSE_WAIT•Established:aconnectionthatisinuse•Listening:aportwaitingforanincomingconnection•Close_wait:aconnectionintheprocessofclosing•Syn_sent:aconnectionintheprocessofbeingsetup•Thereareothers,too.29netstat(4)•Wearelookingmainlyforportswaitingforincomingconnections–i.e.thoseinstate“listening”.Easywaytofindtheseistopipetheoutputof“netstat”to“find”–i.e.netstat–an|findLISTEN30netstat(4)•Wearelookingmainlyforportswaitingforincomingconnections–i.e.thoseinstate“listening”.Easywaytofindtheseistopipetheoutputof“netstat”to“find”–i.e.netstat–an|findLISTEN31netstat(5)•netstat-ano|find/i3389•-aDisplaysallconnectionsandlisteningports.•-nDisplaysaddressesandportnumbersinnumericalform.•-oDisplaystheowningprocessIDassociatedwitheachconnection.