1. 程式人生 > >QEMU-KVM建立虛擬機器自動指定IP的配置

QEMU-KVM建立虛擬機器自動指定IP的配置

其實是可以的,你完全可以把兩臺電腦的IP 和MAC改成一樣,不但可以上網而且還沒IP衝突。這種方法不但可以突破路由封鎖用在ADSL共享上網,而且還可以用在IEEE802.1X認證上網的環境中,但是前提必須要用相同的帳號來撥號上網(前提認證伺服器沒設驗證帳號的重複性),我的機子是通過學校校園網接入internet的,客戶端採用802.1x認證客戶端軟體“STAR Supplicant撥號軟體”來撥號上網,在我們學校裡可以將兩臺機子的IP和MAC改成一樣然後用相同的一個帳號來達到共享上網的目的,不過在我們學校只可以在同一個宿舍的兩臺機子才可以共享上網,因為我們學校的伺服器不單止驗證帳號,ip,MAC而且還驗證接入伺服器IP(NAS IP),和接入伺服器埠(NAS port),不同的宿舍接在學校交換機不同的埠,所以只限於同一個宿舍用這種法共享上網。

  至於為什麼不會引起IP衝突而且還能上網,這是因為ARP工作的缺陷,系統之所以會發現網上有相的IP的而提示“IP衝突”,是因為系統在啟動時,TCP/IP中的ARP會廣播一個免費ARP(free arp)請求包到網段上,這個ARP(free arp)包包含自己的IP和MAC,如果網段上有機子迴應了這個包,這臺發廣播的機子就會認為區域網有別的機子使用和自己相同的IP,
  例如:PC A和PC B的IP和MAC完全一樣,PC A的系統啟動時會廣播一個包含自己IP和MAC的免費ARP(free arp)請求包到網段上,如果PC B迴應了這個請求,PC A會認為自己的IP和網路上的IP有衝突併發出提示(這就是為什麼IP衝突一般發生系統剛啟動完成時),問題是PC B根本不會迴應這個請求包,這是因為這個請求包的IP和MAC和PC B自己的完全一樣,而PC B會認為是自己發的包,所以不會迴應,既然不會迴應自然不會發生IP衝突了。

  好了,讓我來解釋下一個問題,就是兩臺機子的IP和MAC一樣到底會不會導致不能上網:
既然可以,那麼網路上的硬體裝置是怎樣區份這些資料到底是哪臺機的呢??大家都知道區域網內是用硬體地址來通迅的,區域網的二層裝置(如交換機)維護著一張地址表,地址表記錄著本裝置每個埠所對應的MAC(注:不是埠的MAC,而是埠所連裝置的MAC),裝置要經過地址學習狀態才能知道這些埠所對應的MAC,當一個幀經過裝置的某介埠時,裝置會檢查該幀源地址和目的地址,然後再對照自己的地址表,看地址表中是否存在該源地址的對應項,若不存在則埠會變為“地址學習狀態”,將該地址儲存在地址表中組成一個新的表項,如果PCA和PCB都連在同一個交換機上,則交換機經過“地址學習狀態”後,地址表中存在兩個相同的地址項,不過它們所對應的埠是不同的,當交換機在外部接收到一個目的地址為該地址(PCA和PCB相同的MAC地址)的幀時,則會檢查地址表,檢查地址表後會發現存在兩個相同地址的表項,於是交換機會將該幀轉發到這兩個表項所對應的埠,(至於交換機是用組播的方式還是說用一個幀發兩遍的方式轉發給這兩個埠我就不太清楚了)。

  路由器也一樣,不同是的路由器的地址表是路由表,存放的是IP而不是硬體地址。
  連線這兩個埠的PCA和PCB都會收到同樣的幀,既然會收到同樣的幀,那麼計算機怎樣才知道哪些幀才是自己想要的呢?這取決於工作在TCP/ip上層協議,雖然網絡卡是接收了這個幀,但是上層的協議進行進一步的分用,也可以說成是過濾,當TCP/IP的網路介面層(也叫鏈路層)收到一個幀,會檢查幀頭中的幀型別,如果是ARP型別的就交給ARP協議去處理,如果是RARP型別就會交給RARP協議處理,如果是IP型別會去掉幀頭並把這個幀傳給上一層(即網路層來處理),網路層會根據包頭(去掉幀頭就叫IP包了)中的協議型別來分用,如是TCMP型別就交給ICMP協議處理,如果是IGMP型別就交給IGMP協議處理,如果是TCP或UDP就把包頭去掉並交給上一層(即傳輸層)來片理 ,去掉IP包頭後就叫做報文分段了(傳輸層的單位),同樣傳輸層也會對報文分段的頭部進行檢查從而進行進一步的分用,如果是TCP型別的交給TCP協議處理,如果是UDP型別就交給UDP協議處理,TCP或UDP會根據報文分段的頭部中的“目的埠號”來交給應用層(交給應用層前會把報文分段的頭部去掉),然後應用層的使用者程序會根據該“埠號”來決是否接收這個資料,例如QQ某個程序打開了UDP 1324這個埠,傳輸層的UDP協議會把所有接收到的且“目的埠號”為1324的報文分段交給QQ的這個程序, 這樣就完成接收資料的整個過程。雖然兩臺電腦都會接收到不是屬於自己的資料幀,但是在把幀交給上層協議片理時有可能會被丟充,就如應用層的QQ程序不會接到除“目的埠號”為1324以外的其它資料包,因為這些資料在應用層前已經被丟棄。