乙太網是資料鏈路層的一種通用協議,乙太網包的標頭里包含傳送方和接受方的mac位址。資料報裡存放ip(網路層)的東西。
網路層的標頭里存放傳送方和接受方的ip位址,資料長度,資料報裡存放tcp/udp(傳輸層)的東西
udp的表頭里存放傳送方和接受方的埠,tcp的話除此之外還會放置保證傳輸的各種屬性。傳輸層的資料報裡存放http,smtp,ftp等應用層的訊息。
當一台機器連線上乙個lan後,要和其他節點通訊,首先必須要獲得ip,有兩種方式,
還有一種方式是通過dhcp獲得,首先該lan中已經配置了一台dhcp伺服器,dhcp協議為應用層協議。主機首先傳送乙個資料報,資料報的乙太網標頭中的傳送方mac位址填寫本機mac位址,接受方mac位址填寫ff-ff-ff-ff-ff-ff表達這是乙個廣播位址。資料報的網路層標頭髮出發ip填寫0.0.0.0,接受方填寫255.255.255.255,這個格式只有dhcp伺服器看得懂。最後在傳輸層(udp)標頭里填寫傳送方和接受方的埠,按照慣例是68:67。
接下來該lan的所有節點都會接收到這個訊息,因為mac接受方位址填的是ff-ff-ff-ff-ff-ff,然後每台機器都會嘗試處理該包,發現ip的傳送和接受的位址比較奇怪,這時候只有dhcp伺服器能理解這個格式,他就來繼續處理了。將為傳送方分配乙個ip,然後把其他網路設定,如閘道器位址等全部打包在乙個dhcp包中進行響應。該響應包裡的傳送方mac位址為dhcp伺服器的mac位址,接受方為傳送方的mac位址,因此接受起來完全沒問題。
有了ip位址和mac位址,接下來就可以給同乙個網路的其他節點發訊息了。但是lan內發訊息實際上用的是mac位址,而不是用ip位址,這個一直是乙個誤區啊。每台機器其實都有乙個當前內部網路的arp表,用來記錄ip->mac位址的對映,該對映一開始是空的。
獲得arp對映的過程其實是通過ip為key,來尋找對方mac位址的過程。
比如當前節點的ip位址為192.168.0.2,要給0.3發訊息。但是0.3的mac位址不知道。這時候需要發乙個arp請求,arp請求的乙太網標頭里填寫傳送方mac位址,接受方mac位址為ff:ff:ff:ff:ff:ff,在網路層標頭里填寫傳送方ip位址和接受方ip位址。由於該請求是乙個廣播,當前lan中所有節點都會handle這個請求,比較自己的ip是否和包裡的一致,如果一致的話,向傳送發報告自己的mac位址,不然就丟棄包。傳送方收到響應後,在自己的arp快取表裡記錄這個新entry。
接下來每一次內部lan中的網路傳送基本上可以忽略ip了,都使用mac位址直接傳送。
xmlhttp是如何完成非同步操作的
ajax第乙個字母就是asynchronous 非同步,那麼到底xmlhttp為何能支援非同步操作呢?大家在使用ajaxpro的時候,經常這麼呼叫伺服器端方法 function dosomething function callback res 這樣在呼叫dosomething方法的時候,會很快返回...
xmlhttp是如何完成非同步操作的
ajax第乙個字母就是asynchronous 非同步,那麼到底xmlhttp為何能支援非同步操作呢?大家在使用ajaxpro的時候,經常這麼呼叫伺服器端方法 function dosomething function callback res 這樣在呼叫dosomething方法的時候,會很快返回...
解剖KVM的內部是如何運作的?
1.kvm架構 kvm基本結構有2個部分構成 kvm 驅動,現在已經是linux kernel的乙個模組了。其主要負責虛擬機器的建立,虛擬記憶體的分配,vcpu暫存器的讀寫以及vcpu的執行。另個組成是qemu,用於模擬虛擬機器的使用者空間元件,提供i o裝置模型,訪問外設的途徑。圖1 kvm基本結...