當dhcp伺服器故障,或者dhcp超時,不致於裝置沒有ip而造成連線不上。
lla在rfc3927中有詳細的描述,它分為三個階段,先probing,探測網路中某個ip有沒有被占用,如果有,則換乙個ip重新探測,如果沒有則announcing,即繫結該ip,向網路中發arp,公告該ip被我繫結了,如果此時沒有衝突,則進入bound,表示ip繫結成功。
下面給出一幅流程圖,這樣就更清楚了:
圖1:主流程圖
圖2:arp回應流程圖
流程圖中有一些時間的定義,在rfc3927中是這樣描述的:
l probe_wait :表示初次探測的延時,規定的值為1秒;
l probe_min: 重複探測的最小延時 ,規定的值為1秒;
l probe_max : 重複探測的最大延時 ,規定的值為2秒;在連續發arp探測包的時候,相隔的時間要在這個最大和最小的範圍。
l probe_num:傳送探測資料報的數量,這裡規定的值是3;
l announce_wait :三個探測包發出去後,要有足夠的時間等arp的回應,然後再進入公告階段,這個時間規定為2秒;
l announce_num:傳送公告包的數量,規定值為2;
l announce_interval:連續發公告包的延遲 ,規定值為2秒;
l max_conflicts:有一種情況,就是連續探測多次後,還是沒有成功繫結到ip,這需要將首次傳送探測包的間隔時間拉長一點,以避開其它裝置也在探測同樣的ip,這個引數是最大衝突的次數,規定值為10;
l rate_limit_interval:這個是超過max_conflicts後,設定的間隔時間,規定值為60s;
l defend_interval:ip探測時沒有發現衝突,而繫結後發現了衝突,這裡會重**乙個arp包確定一次,只要是在defend_interval時間內不重複出現衝突,則忽略該衝突。否則重新配製。規定值為10s。
下面我們來看一下詳細的工作過程:
首先,在開始local link時,需要將自已的ip和掩碼閘道器都設為0,並隨機生成乙個ip,網段在169.254.1.0 to 169.254.254.255這個範圍,rfc3927中建議使用mac來生成ip位址,這樣可以使每個裝置生成的ip都不一樣,將裝置同時探測同乙個ip的可能性降到了最低。
探測包發完了,並且在規定的時間內沒有收到來自源ip為a的主機回應,則認為該ip沒有被占用,於是設定本機ip為a,rfc3927 2.5節中描述,位址衝突的檢測並不侷限於位址選擇階段,在任何時候,如果裝置收到乙個arp,其中源ip位址和本機ip一致,但mac不一致,都將認為這是乙個衝突。於是就有了圖2中的階段2。
結語:
rfc3927 中的ip衝突檢測機制還是很完善的,考慮了多個裝置在同時local link時的情況;考慮到每到主機都必須要有乙個ip位址,169.254.x.x跟ipv6的fe80開頭的位址是作用是一樣的。
3 2 7 位址翻譯
有乙個tlb與乙個data cache 儲存器以位元組為編址單位 虛擬位址14位 實體地址12位 頁面大小為64位元組 tlb為四路相連,共有16個條目 data cache是物理定址,直接對映的,行大小為4個位元組,總共有16個組 寫出訪問位址0x03d4,0x00f1和0x0229的過程 因為本...
5 4 位址算數運算
define allocsize 10000 可用空間大小 static char allocbuf allocsize alloc使用的儲存區 static char allocp allocbuf 下乙個空閒位置 char alloc int n 返回指向n個字元的指標 else 空閒空間不夠 ...
6 位址,Block,SEL,多型
int maxvalue int a,int b int main int argc,const char argv block 暴風雨來了 block自己不會執行,必須呼叫才會執行block大括號裡面的 段 2.有引數無返回值 void maxblock int,int int a,int b m...