基於KVM的qemu中宿主機和虛擬機間的通信


  qga是一個運行在虛擬機內部的普通應用程序(可執行文件名稱默認為qemu-ga,服務名稱默認為qemu-guest-agent),其目的是實現一種宿主機和虛擬機進行交互的方式,這種方式不依賴於網絡,而是依賴於virtio-serial(默認首選方式)或者isa-serial,而QEMU則提供了串口設備的模擬及數據交換的通道,最終呈現出來的是一個串口設備(虛擬機內部)和一個unix socket文件(宿主機上)。

   qga通過讀寫串口設備與宿主機上的socket通道進行交互,宿主機上可以使用普通的unix socket讀寫方式對socket文件進行讀寫,最終實現與qga的交互,交互的協議與qmpQEMU Monitor Protocol)相同(簡單來說就是使用JSON格式進行數據交換),串口設備的速率通常都較低,所以比較適合小數據量的交換。

備注:

  什么是套接字socket?

  Socket 可以被定義描述為兩個應用通信通道的端點。一個 Socket 端點可以用 Socket 地址來描述, Socket 地址結構由 IP 地址,端口和使用協議組成( TCP or UDP )。http協議可以通過socket實現,socket在傳輸層上實現。從這個角度來說,socket介於應用層和傳輸層之間。但是socket作為一 種進程通信機制,操作系統分配唯一一個socket號,是依賴於通信協議的,但是這個通信協議不僅僅是 tcp或udp,也可以是其它協議。

  

 

在同一台服務器上,用tcp socket與unix domain socket有什么區別?
如圖所示,對於進程間通訊的兩個程序,unix domain socket的流程不會走到TCP 那層,直接以文件形式,以stream socket通訊。如果是TCP socket,則需要走到IP層。

對於非同一台服務器上,TCP socket走的就更多了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM