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