ip层的arp协议
Arp(adress resolution protocol—地址解析協議)是在傳輸IP包時,因不知道IP地址對應的MAC地址,無法傳送數據引起的,通過arp,建立目的IP跟MAC地址的映射關系,從而獲得目的IP的MAC地址。
Arp頭部的數據結構如下:
typedefstruct arphdr {
????????????? unsignedshort arp_hrd;/*硬件類型,*/
????????????? unsignedshort arp_pro;/*協議類型*/
????????????? unsignedchar arp_hln;/*硬件地址長度*/
????????????? unsignedchar arp_pln;/*協議地址長度*/
????????????? unsignedshort arp_op;/*ARP操作類型*/
????????????? unsignedchar arp_sha[6];/*發送者的硬件地址*/
????????????? unsignedlong arp_spa;/*發送者的協議地址*/
????????????? unsignedchar arp_tha[6];/*目標的硬件地址*/
????????????? unsignedlong arp_tpa;/*目標的協議地址*/
????????????? }ARPHDR,*PARPHDR;???
我們封裝arp數據包格式如下:
目的地址,我們現在還不知道,需要向本子網廣播,以獲得目的地址(目的MAC),因此這里全填1,源基地即本地的MAC地址,我們從本地網卡的MAC地址即可取得,類型表示的是上層協議的類型,這里是arp,用0x0806表示,到這里就完整的幀封裝。
?
arp頭部數據填充,硬件類型有很多種,即有各種各樣的硬件類型,比如以太網卡,令牌環網卡等,0x0001表示以太網卡,協議類型表示的是上層協議的類型,即需要通過arp獲得對方MAC地址的協議,而不是arp本身協議,0x0800表示IP協議,硬件地址(MAC地址)長度為6,協議地址(IP地址)長度為4,操作類型表示本arp所要操作的動作,1為ARP請求,2為ARP應答,3為RARP請求,4為RARP應答,源主機MAC地址為本地MAC,從網卡驅動從即可獲得,源主機IP地址為本地IP,這個也是從網卡驅動中獲得,當然也是我們人為設置的(或者DHCP),目的主機MAC地址就是我們發送arp需要獲得的數據,此時還不知道,全0待填寫,目的主機IP地址為遠端的IP地址。
由于路由器有攔截廣播的功能,arp廣播只能在本子網中廣播,如果所要獲取的MAC地址不是本子網的,則必須經過路由器網關獲得。由于路由器的默認網關也是本子網的一個設備,因此也會收到本子網的arp廣播,經過子網匹配,發現目的IP的子網,跟路由器的另一個端口的子網一致,于是,把arp請求轉發給路由器的另一個端口,此時,路由器的另一個端口跟目的IP在同一個子網,因此,又可以進行arp廣播,當目的IP獲得了arp廣播信息后,會把本機的MAC地址填充到arp包的目的地址MAC這欄中,同時修改arp的數據包的操作類型為arp應答,接著把數據包發回源IP地址,此時的發送就不是以廣播的形式發送了,因為目的地址MAC,本地地址MAC都知道,是需要單播即可,此時,還需要修改以太網幀的目的MAC,本地MAC,從而得以發送數據包
總結
- 上一篇: Sql Server 得到当月第一天
- 下一篇: 教你一招画素描, 不写程序时陶冶陶冶情操