詳談PPP數(shù)據(jù)幀的結(jié)構(gòu)
對(duì)于網(wǎng)絡(luò)協(xié)議的學(xué)習(xí),我們也已經(jīng)持續(xù)一段時(shí)間了,前一陣子我們講解了PPP協(xié)議的一些基礎(chǔ)概念,那么這里,我們?cè)賮磲槍?duì)PPP數(shù)據(jù)幀的格式進(jìn)行一下充分的說明。前面我們也曾說過,可以說現(xiàn)在家里的ADSL都是通過PPP協(xié)議進(jìn)行鏈路的搭建,想要了解PPP,個(gè)人認(rèn)為有3個(gè)關(guān)鍵的知識(shí)點(diǎn)。
1、PPP數(shù)據(jù)幀的格式;
2、PPP的幾種報(bào)文;
3、PPP的狀態(tài)轉(zhuǎn)移
首先說說的PPP數(shù)據(jù)幀的格式,因?yàn)镻PP是鏈路層協(xié)議,所以我們將它的數(shù)據(jù)單位稱為幀
每一個(gè)PPP數(shù)據(jù)幀均是以一個(gè)標(biāo)志字節(jié)起始和結(jié)束的,該字節(jié)為0x7E(這樣很容易區(qū)分出每個(gè)PPP幀)
緊接在起始標(biāo)志字節(jié)后的一個(gè)字節(jié)是地址域,該字節(jié)為0xFF。我們熟知網(wǎng)絡(luò)是分層的,且對(duì)等層之間進(jìn)行相互通信,而下層為上層提供服務(wù)。當(dāng)對(duì)等層進(jìn)行通信時(shí)首先需獲知對(duì)方的地址,而對(duì)不同的網(wǎng)絡(luò),在數(shù)據(jù)鏈路層則表現(xiàn)為需要知道對(duì)方的MAC地址、X.121地址、ATM地址等;在網(wǎng)絡(luò)層則表現(xiàn)為需要知道對(duì)方的IP地址、IPX地址等;而在傳輸層則需要知道對(duì)方的協(xié)議端口號(hào)。例如如果兩個(gè)以太網(wǎng)上的主機(jī)希望能夠通信的話,首先發(fā)送端需獲知對(duì)端的MAC地址。但由于PPP協(xié)議是被運(yùn)用在點(diǎn)對(duì)點(diǎn)的鏈路上的特殊性,它不像廣播或多點(diǎn)訪問的網(wǎng)絡(luò)一樣,因?yàn)辄c(diǎn)對(duì)點(diǎn)的鏈路就可以唯一標(biāo)示對(duì)方,因此使用PPP協(xié)議互連的通信設(shè)備的兩端無須知道對(duì)方的數(shù)據(jù)鏈路層地址,所以該字節(jié)已無任何意義,按照協(xié)議的規(guī)定將該字節(jié)填充為全1的廣播地址。同地址域一樣,PPP數(shù)據(jù)幀的控制域也沒有實(shí)際意義,按照協(xié)議的規(guī)定通信雙方將該字節(jié)的內(nèi)容填充為0x03。(既然無意義,就可以隨便賦值了吧,呵呵,只要大家都遵守一個(gè)標(biāo)準(zhǔn)就行)
就PPP協(xié)議本身而言,我們最關(guān)心的內(nèi)容應(yīng)該是它的協(xié)議域和信息域。協(xié)議域可用來區(qū)分PPP數(shù)據(jù)幀中信息域所承載的數(shù)據(jù)報(bào)文的內(nèi)容。協(xié)議域的內(nèi)容必須依據(jù)ISO 3309的地址擴(kuò)展機(jī)制所給出的規(guī)定。該機(jī)制規(guī)定協(xié)議域所填充的內(nèi)容必須為奇數(shù),也即是要求低字節(jié)的最低位為“1”,高字節(jié)的最低位為“0”。如果當(dāng)發(fā)送端發(fā)送的PPP數(shù)據(jù)幀的協(xié)議域字段不符合上述規(guī)定,則接收端會(huì)認(rèn)為此數(shù)據(jù)幀是不可識(shí)別的,那么接收端會(huì)向發(fā)送端發(fā)送一個(gè)Protocol-Reject報(bào)文,在該報(bào)文尾部將完整地填充被拒絕的報(bào)文。
信息域缺省時(shí)最大長度不能超過1500字節(jié),其中包括填充域的內(nèi)容,1500字節(jié)大小等于PPP協(xié)議中配置參數(shù)選項(xiàng)MRU(Maximum Receive Unit)的缺省值,在實(shí)際應(yīng)用當(dāng)中可根據(jù)實(shí)際需要進(jìn)行信息域最大封裝長度選項(xiàng)的協(xié)商。信息域如果不足1500字節(jié)時(shí)可被填充,但不是必須的,如果填充則需通信雙方的兩端能辨認(rèn)出有用與無用的信息方可正常通信。
協(xié)議域和信息域是需要合在一起看的,目前主要用到的協(xié)議類型有LCP、NCP和普通的IP協(xié)議,而他們相對(duì)應(yīng)的協(xié)議域字段則為0×C021、0×8021和0×0021,可以看到應(yīng)證了這句話:也即是要求低字節(jié)的最低位為“1”,高字節(jié)的最低位為“0”。而后面的信息根據(jù)不同協(xié)議包含了不同的報(bào)文內(nèi)容。
0×C021 LCP數(shù)據(jù)報(bào)文 校驗(yàn)
0×8021 NCP數(shù)據(jù)報(bào)文 校驗(yàn)
0×0021 IP數(shù)據(jù)報(bào)文 校驗(yàn)
其實(shí)這3種不同協(xié)議就對(duì)應(yīng)PPP協(xié)議在運(yùn)行過程中的不同狀態(tài),以后會(huì)在PPP狀態(tài)轉(zhuǎn)移中介紹到,我們可以很容易根據(jù)PPP幀的協(xié)議域就判斷目前處于PPP的哪個(gè)階段。遇到PPP問題,我們通常通過抓包,然后判斷PPP哪個(gè)階段有問題,再進(jìn)行分析和問題定位。注意一點(diǎn)的就是,NCP不是一種協(xié)議,它的全稱是網(wǎng)絡(luò)控制協(xié)議,也就是說最后雙方都遵循的數(shù)據(jù)傳輸協(xié)議,可以是IPCP,也可以是IPXCP。
CRC校驗(yàn)域主要是對(duì)PPP數(shù)據(jù)幀傳輸?shù)恼_性進(jìn)行檢測的,當(dāng)然在數(shù)據(jù)幀中引入了一些傳輸?shù)谋WC機(jī)制是好的,但可以反過來說,同樣我們會(huì)引入更多的開銷,這樣可能會(huì)增加應(yīng)用層交互的延遲。
最后給大家一個(gè)通過Ethereal抓下來的PPP幀,對(duì)應(yīng)上面的說明,看看大家是否可以看懂:
7E FF 03 C021 01 01 00 17 02 06 00 0A 00 00 05 06 00 0B 42 CB 07 02 08 02 0D 03 06 7E
至于信息域里面的東西,還可以再細(xì)分,之后在PPP報(bào)文里面再說。
這是我把書上的東西,進(jìn)行自己的理解,加以通俗化,希望初學(xué)的XDJM能夠看的懂一點(diǎn),估計(jì)大家還在夢(mèng)鄉(xiāng)中吧,呵呵。