vsock記錄
可是我看虛擬機的reboot_p_srv中沒去檢測vsock送來的cid,reboot_hyper_an通過什么實現(xiàn)發(fā)送到特定虛擬機呢?誰去處理cid了?
A:
vsock 的通信機制是這樣的:
- 客戶端(reboot_hyper_an.c)在 connect 時,指定了目標虛擬機的 cid 和端口號。
- 這一步由 vsock 驅(qū)動和內(nèi)核來處理,內(nèi)核會把連接請求路由到對應 cid 的虛擬機、并交給那臺虛擬機上監(jiān)聽對應端口(12345)的服務端進程(reboot_p_srv)。
- 服務端只需要監(jiān)聽端口,不需要關(guān)心是誰連過來的(不需要關(guān)心 cid),只要有連接就處理。
所以:
- “發(fā)送到特定虛擬機”這件事,是 vsock 協(xié)議和內(nèi)核幫你做的,服務端不需要寫代碼去區(qū)分。
- 你在客戶端指定了 cid,內(nèi)核就會把數(shù)據(jù)送到那臺虛擬機的服務端進程。
- 服務端只管處理收到的連接和消息,不需要知道對方的 cid。
總結(jié):
vsock 的“目標虛擬機選擇”完全由客戶端 connect 時指定的 cid 決定,內(nèi)核自動路由,服務端無需關(guān)心。

浙公網(wǎng)安備 33010602011771號