?? ppp中使用hdlc幀.htm
字號(hào):
<P align=justify> </P>
<P
align=justify>在FCS計(jì)算后,傳送方檢查整個(gè)幀,如果碰到連續(xù)五個(gè)1就要插入一個(gè)零,以免幀內(nèi)的數(shù)據(jù)和標(biāo)記序列混淆。在接收方,在進(jìn)行FCS計(jì)算前,連接五個(gè)一后面的0將被拋棄,以保證數(shù)據(jù)的正確性。</P>
<P align=justify> </P>
<P align=justify>5.3. 無(wú)效幀</P>
<P align=justify> </P>
<P
align=justify>幀過(guò)短(在16位FCS時(shí)少于4個(gè)字節(jié)),或者幀以一個(gè)多于六個(gè)1的序列結(jié)束時(shí),幀將被無(wú)響應(yīng)拋棄,而不被記為FCS錯(cuò)誤。</P>
<P align=justify> </P>
<P align=justify>5.4. 時(shí)間空隙</P>
<P align=justify> </P>
<P align=justify>不支持字節(jié)內(nèi)時(shí)間空隙。</P>
<P
align=justify>標(biāo)記序列應(yīng)該在幀內(nèi)時(shí)間空隙傳送。然而,特定類型的線路交換連接要求使用空閑標(biāo)記(連續(xù)的1)。當(dāng)在位同步連接使用空閑標(biāo)記時(shí),系統(tǒng)必須唯在標(biāo)記序列間的空閑時(shí)間中至少有15個(gè)連接的1出現(xiàn),標(biāo)記序列通常在一個(gè)幀的開始處和空閑時(shí)間的結(jié)束處產(chǎn)生。這與在ISO
3309中的情況不同,它允許7到14位的空閑標(biāo)記。</P>
<P align=justify> </P>
<P align=justify>5.5. 傳輸</P>
<P align=justify> </P>
<P
align=justify>所有字節(jié)以最低位優(yōu)先的方式發(fā)送。不同的編碼由DTE/DCD負(fù)責(zé),這不在本文的討論范圍之內(nèi)。PPP可以不關(guān)心下層的二進(jìn)制流表示,缺少傳送的標(biāo)準(zhǔn)將會(huì)象缺少數(shù)據(jù)鏈路標(biāo)準(zhǔn)一樣妨礙上下兩層的協(xié)同工作。在速度范圍在56
Kbps到2.0 Mbps中,NRZ是當(dāng)前最廣泛使用的,它的標(biāo)準(zhǔn)也被推薦于默認(rèn)值。</P>
<P
align=justify>當(dāng)允許編碼配置時(shí),NRZI也被推薦為默認(rèn)值,相對(duì)起來(lái),它能夠避免信號(hào)轉(zhuǎn)換配置錯(cuò)誤。它的連接也不需要昂貴的DSU/CSU設(shè)置。但是,NRZI編碼使16位FCS中X1分量的缺少的問(wèn)題變得有出錯(cuò)的可能,這樣2**15中(而不是2**16)的錯(cuò)誤就無(wú)法查覺(jué),三位錯(cuò)誤也無(wú)法檢查。因此,在使用NRZI時(shí),應(yīng)該使用32位FCS,其中包括X1分量。</P>
<P align=justify>當(dāng)速度大于45
Mbps時(shí),一些設(shè)計(jì)者會(huì)選擇ANSI高速同步接口。而這樣的經(jīng)驗(yàn)現(xiàn)在還不成熟,設(shè)計(jì)者應(yīng)該在選擇傳輸編碼時(shí)注意協(xié)同使用。</P>
<P align=justify> </P>
<P align=justify>6. <A name=異步到同步的轉(zhuǎn)換>異步到同步的轉(zhuǎn)換</A></P>
<P align=justify> </P>
<P
align=justify>一些系統(tǒng)會(huì)遇到異步到同步的轉(zhuǎn)換,這是由于系統(tǒng)鏈路的一端可能連接著一個(gè)同步子系統(tǒng)而另一端連接著一個(gè)異步子系統(tǒng)。而所有操作中的轉(zhuǎn)換工作都應(yīng)該由轉(zhuǎn)換裝置完成。</P>
<P
align=justify>要啟用此功能,同步PPP系統(tǒng)必須以LCP配置確認(rèn)響應(yīng)異步控制字符映射配置選項(xiàng)。然而,接受配置選項(xiàng)并不意味著同步系統(tǒng)將所所有的ACCM映射,相反,所有類似的字節(jié)映射將由異步到同步轉(zhuǎn)換裝置完成。</P>
<P align=justify> </P>
<P align=justify>7. <A name=附加LCP配置選項(xiàng)>附加LCP配置選項(xiàng)</A></P>
<P align=justify> </P>
<P align=justify>配置選項(xiàng)格式和基本選項(xiàng)已經(jīng)由LCP定義了。具體的數(shù)據(jù)請(qǐng)查詢相應(yīng)的文獻(xiàn),這里只討論異步控制字符映射。</P>
<P align=justify> </P>
<P align=justify>7.1. 異步控制字符映射(ACCM)</P>
<P align=justify> </P>
<P align=justify>描述</P>
<P align=justify> </P>
<P
align=justify>此配置選項(xiàng)提供了一種在異步鏈路上使用控制字符透明的方法。異步鏈路的兩每一端支持兩個(gè)異步控制字符映射。接收ACCM是32位的,而發(fā)送ACCM可以多達(dá)256位,也就是說(shuō),鏈路兩端有四個(gè)不同的ACCM,每端兩個(gè)。</P>
<P
align=justify>對(duì)于異步鏈路,默認(rèn)的接收ACCM是0xffffffff。默認(rèn)的發(fā)送ACCM是0xffffffff加上控制逃逸字符和標(biāo)記序列本身,再加上將要異步發(fā)出的而被標(biāo)記字符。(因?yàn)楫惒桨l(fā)送,因?yàn)橐殖梢粋€(gè)個(gè)單元,所以需要加上標(biāo)記。)</P>
<P
align=justify>對(duì)于其它類型的連接,默認(rèn)值是0,因?yàn)閷?duì)其它類型的連接而言,沒(méi)有必要進(jìn)行映射。默認(rèn)的字符(除了0x20外)都能夠在所有已知的通信設(shè)備上透明傳送。</P>
<P
align=justify>發(fā)送方也可能用控制逃逸的格式發(fā)送除0x5e外的從0x40到0xff的所有字符,但是這并沒(méi)有解決發(fā)送者不能處理所有非控制字符的問(wèn)題。同樣,現(xiàn)有的技術(shù)也不能影響第八位,這也沒(méi)有解決只能傳送7位字節(jié)的通信鏈路問(wèn)題。</P>
<P
align=justify>然而,通常不需要映射所有的控制字符,甚至不需要映射任何控制字符。配置選項(xiàng)用來(lái)通知雙方哪些控制字符在發(fā)送時(shí)需要映射。一方可能仍然在映射的格式中傳送其它字符。此時(shí)發(fā)送方應(yīng)該采取措施使接收方在接收時(shí)忽略這些字符。下面所示為異步控制字符映射配置選項(xiàng)格式。傳送順序?yàn)閺淖笾劣摇?lt;/P>
<P align=justify><IMG height=135 alt="ppp2.jpg (9461 bytes)"
src="PPP中使用HDLC幀.files/ppp2.jpg" width=490></P>
<P align=justify> </P>
<P align=justify>類型</P>
<P align=justify> </P>
<P align=justify>2</P>
<P align=justify> </P>
<P align=justify>長(zhǎng)度</P>
<P align=justify> </P>
<P align=justify>6</P>
<P align=justify> </P>
<P align=justify>ACCM</P>
<P align=justify> </P>
<P
align=justify>ACCM域有四個(gè)字節(jié),說(shuō)明需要映射的控制字符集。每個(gè)被標(biāo)記的位與相同位置的字節(jié)對(duì)應(yīng)。如果位被設(shè)置為零,此字節(jié)不需要映射。如果此位為1,此字節(jié)必須被映射。注意:最低字節(jié)的最低位如果是0,對(duì)應(yīng)的映射字符是ASCII控制字符NUL。</P>
<P align=justify> </P>
<P align=justify>A. 推薦的LCP選項(xiàng)</P>
<P align=justify> </P>
<P align=justify>下面的配置選項(xiàng)是推薦使用的:</P>
<P align=justify> </P>
<P align=justify>高速連接時(shí):</P>
<P align=justify> </P>
<P align=justify>魔術(shù)數(shù);</P>
<P align=justify>連接質(zhì)量監(jiān)視</P>
<P align=justify>不使用地址和控制域壓縮</P>
<P align=justify>不使用協(xié)議域壓縮</P>
<P align=justify> </P>
<P align=justify>低速或異步連接時(shí):</P>
<P align=justify> </P>
<P align=justify>異步控制字符映射</P>
<P align=justify>魔術(shù)數(shù)</P>
<P align=justify>使用地址和控制域壓縮</P>
<P align=justify>使用協(xié)議域壓縮</P>
<P align=justify> </P>
<P align=justify>B. PPP幀的自動(dòng)識(shí)別</P>
<P align=justify> </P>
<P align=justify>有時(shí)可能需要檢測(cè)PPP幀。以下面字節(jié)開始的就是一個(gè)有效的PPP LCP幀:</P>
<P align=justify> </P>
<P align=justify>7e ff 03 c0 21</P>
<P align=justify>7e ff 7d 23 c0 21</P>
<P align=justify>7e 7d df 7d 23 c0 21</P>
<P align=justify> </P>
<P align=justify>注意:前兩種形式對(duì)UNIX而言不是有效的用戶名。然而,只有第三種格式產(chǎn)生正確的PPP
幀奇偶校驗(yàn)碼,此時(shí)03(EXT)和FF(DEL)作為控制符,與奇偶校驗(yàn)無(wú)關(guān)而被拋棄。</P>
<P
align=justify>當(dāng)上面三種模式之一在登錄時(shí)出現(xiàn),接口進(jìn)入包模式時(shí),系統(tǒng)就會(huì)如上所述處理。初始到達(dá)的PPP幀將被拋棄,而立即發(fā)送要求配置幀。</P>
<P align=justify> </P>
<P align=justify>C. 快速幀檢查序列的實(shí)現(xiàn)</P>
<P align=justify> </P>
<P
align=justify>FCS原來(lái)設(shè)計(jì)時(shí)考慮到了硬件的實(shí)現(xiàn)。串行二進(jìn)制流在線路上傳輸,F(xiàn)CS可以在串行數(shù)據(jù)送出時(shí)計(jì)算得到,而附加在串行數(shù)據(jù)流上,這些數(shù)據(jù)以標(biāo)記序列結(jié)束,而完成一幀。</P>
<P
align=justify>接收方在接收到標(biāo)記序列前不清楚是否完成計(jì)算接收到的FCS。因此,應(yīng)該設(shè)計(jì)一種幀格式使FCS通過(guò)時(shí)就產(chǎn)生特定的信息。這樣設(shè)計(jì)的幀就是“好的FCS”。</P>
<P align=justify> </P>
<P align=justify>C.1. FCS表產(chǎn)生程序</P>
<P align=justify> </P>
<P align=justify>下面的程序用于創(chuàng)建查找表計(jì)算FCS-16。</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>* 產(chǎn)生FCS-16表</P>
<P align=justify>*/</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>*FCS-16產(chǎn)生多項(xiàng)式:x**0 + x**5 + x**12 + x**16.</P>
<P align=justify>*/</P>
<P align=justify>#define P 0x8408</P>
<P align=justify> </P>
<P align=justify>main()</P>
<P align=justify>{</P>
<P align=justify>register unsigned int b, v;</P>
<P align=justify>register int i;</P>
<P align=justify> </P>
<P align=justify>printf("typedef unsigned short u16;\n");</P>
<P align=justify>printf("static u16 fcstab[256] = {");</P>
<P align=justify>for (b = 0; ; ) {</P>
<P align=justify>if (b % 8 == 0)</P>
<P align=justify>printf("\n");</P>
<P align=justify> </P>
<P align=justify>v = b;</P>
<P align=justify>for (i = 8; i--; )</P>
<P align=justify>v = v & 1 ? (v >> 1) ^ P : v >> 1;</P>
<P align=justify> </P>
<P align=justify>printf("\t0x%04x", v & 0xFFFF);</P>
<P align=justify>if (++b == 256)</P>
<P align=justify>break;</P>
<P align=justify>printf(",");</P>
<P align=justify>}</P>
<P align=justify>printf("\n};\n");</P>
<P align=justify>}</P>
<P align=justify> </P>
<P align=justify>C.2. 16位FCS計(jì)算方法</P>
<P align=justify> </P>
<P align=justify>下面例子的功能:當(dāng)數(shù)據(jù)到達(dá)接口時(shí),由一個(gè)查找表計(jì)算32位的幀檢查序列。</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>* u16代表16位無(wú)符號(hào)數(shù)</P>
<P align=justify>*/</P>
<P align=justify>typedef unsigned short u16;</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>* 由表生成子計(jì)算而來(lái)的FCS查找表</P>
<P align=justify>*/</P>
<P align=justify>static u16 fcstab[256] = {</P>
<P align=justify>0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536,
0x74bf,</P>
<P align=justify>0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e,
0xf8f7,</P>
<P align=justify>0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7,
0x643e,</P>
<P align=justify>0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff,
0xe876,</P>
<P align=justify>0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434,
0x55bd,</P>
<P align=justify>0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c,
0xd9f5,</P>
<P align=justify>0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5,
0x453c,</P>
<P align=justify>0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd,
0xc974,</P>
<P align=justify>0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732,
0x36bb,</P>
<P align=justify>0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a,
0xbaf3,</P>
<P align=justify>0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3,
0x263a,</P>
<P align=justify>0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb,
0xaa72,</P>
<P align=justify>0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630,
0x17b9,</P>
<P align=justify>0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78,
0x9bf1,</P>
<P align=justify>0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1,
0x0738,</P>
<P align=justify>0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9,
0x8b70,</P>
<P align=justify>0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e,
0xf0b7,</P>
<P align=justify>0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76,
0x7cff,</P>
<P align=justify>0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf,
0xe036,</P>
<P align=justify>0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7,
0x6c7e,</P>
<P align=justify>0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c,
0xd1b5,</P>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -