?? ppp協(xié)議規(guī)范.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0043)http://www.longen.org/L-R/detaill~r/ppp.htm -->
<HTML><HEAD><TITLE>PPP協(xié)議規(guī)范</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%">PPP協(xié)議規(guī)范
<P>1 介紹</P>
<P>PPP是為在同等單元之間傳輸數(shù)據(jù)包這樣的簡單的鏈路而設(shè)計(jì)的。這種鏈路提供全雙工操作,并按照順序傳遞數(shù)據(jù)包。(人們)有意讓PPP為基于各種主機(jī)、網(wǎng)橋和路由器的簡單連接提供一種共通的解決方案。</P>
<P>封裝: </P>
<P>PPP封裝提供了不同網(wǎng)絡(luò)層協(xié)議同時(shí)通過統(tǒng)一鏈路的多路技術(shù)。精心的設(shè)計(jì)PPP封裝,使其保有對常用支持硬件的兼容性。當(dāng)使用默認(rèn)的類HDLC幀(HDLC-like
framing)時(shí),僅需要8個(gè)額外的字節(jié),就可以形成封裝。在帶寬需要付費(fèi)時(shí),封裝和幀可以減少到2或4個(gè)字節(jié)。為了支持高速的執(zhí)行,默認(rèn)的封裝只使用簡單的字段,多路分解只需要對其中的一個(gè)字段進(jìn)行檢驗(yàn)。默認(rèn)的頭和信息字段落在32-bit邊界上,尾字節(jié)可以被填補(bǔ)到任意的邊界。</P>
<P align=center><IMG height=63 alt="PPP-1.bmp (1826 bytes)"
src="PPP協(xié)議規(guī)范.files/ppp-1.gif" width=219></P>
<P>鏈路控制協(xié)議(LCP):</P>
<P>為了在一個(gè)很寬廣的環(huán)境內(nèi)能足夠方便的使用,PPP提供了LCP。LCP用于就封裝格式選項(xiàng)自動(dòng)的達(dá)成一致,處理數(shù)據(jù)包大小的變化,探測looped-back鏈路和其他普通的配置錯(cuò)誤,以及終止鏈路。提供的其他可選設(shè)備有:對鏈路中同等單元標(biāo)識的認(rèn)證,和當(dāng)鏈路功能正常或鏈路失敗時(shí)的決定。</P>
<P>網(wǎng)絡(luò)控制協(xié)議:</P>
<P>點(diǎn)對點(diǎn)連接可能和當(dāng)前的一族網(wǎng)絡(luò)協(xié)議產(chǎn)生許多問題。例如,基于電路交換的點(diǎn)對點(diǎn)連接(比如撥號模式服務(wù)),分配和管理IP地址,即使在LAN環(huán)境中,也非常困難。這些問題由一族網(wǎng)絡(luò)控制協(xié)議(NCP)來處理,每一個(gè)協(xié)議管理著各自的網(wǎng)絡(luò)層協(xié)議的特殊需求。</P>
<P>配置:</P>
<P>有意使PPP鏈路很容易配置。通過設(shè)計(jì),標(biāo)準(zhǔn)的默認(rèn)值處理全部的配置。執(zhí)行者可以對默認(rèn)配置進(jìn)行改進(jìn),它被自動(dòng)的通知給其同等單元而無需操作員的干涉。最終,操作員可以明確的為鏈路設(shè)定選項(xiàng),以便其正常工作。</P>
<P>2 PPP封裝</P>
<P>PPP封裝用于消除多協(xié)議datagrams的歧義。封裝需要幀同步以確定封裝的開始和結(jié)束。提供幀同步的方法在參考文檔中。</P>
<P>PPP封裝的概要如下所示。字段的傳輸從左到右。</P>
<P>協(xié)議字段:</P>
<P>協(xié)議字段由一個(gè)或兩個(gè)字節(jié)組成。它的值標(biāo)識著壓縮在packet的信息字段里的datagram。字段中最有意義位(最高位)被首先傳輸。該字段結(jié)構(gòu)與ISO
3309地址字段擴(kuò)充機(jī)制相一致。該字段必須是奇數(shù):最輕意義字
<BR>節(jié)的最輕意義位(最低位)必須等于1。另外,字段必須被賦值,以便最有意義字節(jié)的最輕意義位為0。收到的不符合這些規(guī)則的frames,必須被視為帶有不被承認(rèn)的協(xié)議。</P>
<P>在范圍"0***"到"3***"內(nèi)的協(xié)議字段,標(biāo)識著特殊packets的網(wǎng)絡(luò)層協(xié)議。在范圍"8***"
到"b***"內(nèi)的協(xié)議字段,標(biāo)識著packets屬于聯(lián)合的(相關(guān)的)網(wǎng)絡(luò)控制協(xié)議(NCP)。在范圍"4***"到"7***"內(nèi)的協(xié)議字段,用于沒有相關(guān)NCP的低通信量協(xié)議。在范圍"c***"到"f***"內(nèi)的協(xié)議字段,標(biāo)識著使用鏈路層控制協(xié)議(例如LCP)的packets。到目前為止,協(xié)議字段的值在最近的"Assigned
Numbers" RFC [2]里有詳細(xì)的說明。本說明書保留以下的值:</P>
<P> Value (in hex) Protocol Name <BR> 0001 Padding
Protocol填料協(xié)議 <BR> 0003 to 001f reserved (transparency
inefficient)保留(透明度效率低的) <BR> 007d reserved (Control
Escape)保留(控制逃逸) <BR> 00cf reserved (PPP NLPID)保留(PPP NLPID)
<BR> 00ff reserved (compression inefficient)保留(壓縮效率低的)
<BR> 8001 to 801f unused(未使用)<BR> 807d
unused(未使用)<BR> 80cf unused(未使用)<BR> 80ff
unused(未使用)<BR> c021 Link Control Protocol鏈路控制協(xié)議
<BR> c023 Password Authentication Protocol密碼認(rèn)證協(xié)議 <BR> c025
Link Quality Report鏈路品質(zhì)報(bào)告 <BR> c223 Challenge Handshake
Authentication Protocol挑戰(zhàn)-認(rèn)證握手協(xié)議</P>
<P>新的協(xié)議的開發(fā)者必須從the Internet Assigned Numbers Authority
(IANA),atIANA@isi.edu.處獲得號碼。</P>
<P>信息字段:</P>
<P>信息字段是0或更多的字節(jié)。對于在協(xié)議字段里指定的協(xié)議,信息字段包含datagram。信息字段的最大長度,包含填料但不包含協(xié)議字段,術(shù)語叫做最大接收單元(MRU),默認(rèn)值是1500字節(jié)。若經(jīng)過協(xié)商同意,也可以使用其它的值作為MRU。</P>
<P>填料:</P>
<P>在傳輸?shù)臅r(shí)候,信息字段會(huì)被填充若干字節(jié)以達(dá)到MRU。每個(gè)協(xié)議負(fù)責(zé)根據(jù)實(shí)際信息的大小確定填料的字節(jié)數(shù)。</P>
<P>3 PPP鏈路操作</P>
<P>3-1 概述</P>
<P>為了通過點(diǎn)對點(diǎn)鏈路建立通信,PPP鏈路的每一端,必須首先發(fā)送LCP
packets以便設(shè)定和測試數(shù)據(jù)鏈路。在鏈路建立之后,peer才可以被認(rèn)證。然后,PPP必須發(fā)送NCP
packets以便選擇和設(shè)定一個(gè)或更多的網(wǎng)絡(luò)層協(xié)議。一旦每個(gè)被選擇的網(wǎng)絡(luò)層協(xié)議都被設(shè)定好了,來自每個(gè)網(wǎng)絡(luò)層協(xié)議的datagrams就能在連路上發(fā)送了。鏈路將保持通信設(shè)定不變,直到外在的LCP和NCP關(guān)閉鏈路,或者是發(fā)生一些外部事件的時(shí)候(休止?fàn)顟B(tài)的定時(shí)器期滿或者網(wǎng)絡(luò)管理員干涉)。</P>
<P>3-2 階段劃分框圖</P>
<P>在設(shè)定、維持和終止點(diǎn)對點(diǎn)鏈路的過程里,PPP鏈路經(jīng)過幾個(gè)清楚的階段,如框圖所示。這張圖并沒有給出所有的狀態(tài)轉(zhuǎn)換。</P>
<P align=center><IMG height=237 alt="PPP-2.bmp (12386 bytes)"
src="PPP協(xié)議規(guī)范.files/ppp-2.gif" width=413></P>
<P>3-3 鏈路死亡(物理連接不存在)</P>
<P>鏈路一定開始并結(jié)束于這個(gè)階段。當(dāng)一個(gè)外部事件(例如載波偵聽或網(wǎng)絡(luò)管理員設(shè)定)指出物理層已經(jīng)準(zhǔn)備就緒時(shí),PPP將進(jìn)入鏈路建立階段。在這個(gè)階段,LCP自動(dòng)機(jī)器將處于初始狀態(tài),向鏈路建立階段的轉(zhuǎn)換將給LCP自動(dòng)機(jī)器一個(gè)UP事件信號。</P>
<P>執(zhí)行記錄:</P>
<P>典型的,在與調(diào)制解調(diào)器斷開之后,鏈路將自動(dòng)返回這一階段。在用硬件實(shí)現(xiàn)的鏈路里,這一階段相當(dāng)?shù)亩?-僅夠偵測設(shè)備的存在。</P>
<P>3-4 鏈路建立階段</P>
<P>LCP用于交換配置信息包(Configure packets),建立連接。一旦一個(gè)配置成功信息包(Configure-Ack
packet)被發(fā)送且被接收,就完成了交換,進(jìn)入了LCP開啟狀態(tài)。所有的配置選項(xiàng)都假定使用默認(rèn)值,除非被配置交換所改變。有一點(diǎn)要注意:只有不依賴于特別的網(wǎng)絡(luò)層協(xié)議的配置選項(xiàng)才倍LCP配置。在網(wǎng)絡(luò)層協(xié)議階段,個(gè)別的網(wǎng)絡(luò)層協(xié)議的配置由個(gè)別的網(wǎng)絡(luò)控制協(xié)議(NCP)來處理。在這個(gè)階段接收的任何非LCP
packets必須被silently discarded(靜靜的丟棄)。收到LCP
Configure-Request(LCP配置要求)能使鏈路從網(wǎng)絡(luò)層協(xié)議階段或者認(rèn)證階段返回到鏈路建立階段。</P>
<P>3-5 認(rèn)證階段</P>
<P>在一些鏈路上,在允許網(wǎng)絡(luò)層協(xié)議packets交換之前,鏈路的一端可能需要peer去認(rèn)證它。默認(rèn)的,認(rèn)證是不需要強(qiáng)制執(zhí)行的。如果一次執(zhí)行希望peer根據(jù)某一特定的認(rèn)證協(xié)議來認(rèn)證,那么它必須在鏈路建立階段要求使用那個(gè)認(rèn)證協(xié)議。應(yīng)該盡可能在鏈路建立后立即進(jìn)行認(rèn)證。而,鏈路質(zhì)量檢查可以同時(shí)發(fā)生。在一次執(zhí)行中,禁止因?yàn)榻粨Q鏈路質(zhì)量檢查packets而不確定地將認(rèn)證向后推遲這一做法。在認(rèn)證完成之前,禁止從認(rèn)證階段前進(jìn)到網(wǎng)絡(luò)層協(xié)議階段。如果認(rèn)證失敗,認(rèn)證者應(yīng)該躍遷到鏈路終止階段。</P>
<P>在這一階段里,只有鏈路控制協(xié)議、認(rèn)證協(xié)議,和鏈路質(zhì)量監(jiān)視協(xié)議的packets是被允許的。在該階段里接收到的其他的packets必須被靜靜的丟棄。</P>
<P>執(zhí)行記錄:</P>
<P>一次執(zhí)行中,僅僅是因?yàn)槌瑫r(shí)或者沒有應(yīng)答就造成認(rèn)證的失敗是不應(yīng)該的。認(rèn)證應(yīng)該允許某種再傳輸,只有在若干次的認(rèn)證嘗試失敗以后,不得已的時(shí)候,才進(jìn)入鏈路終止階段。在執(zhí)行中,哪一方拒絕了另一方的認(rèn)證,哪一方就要負(fù)責(zé)開始鏈路終止階段。</P>
<P>3-6 網(wǎng)絡(luò)層協(xié)議階段</P>
<P>一旦PPP完成了前面的階段,每一個(gè)網(wǎng)絡(luò)層協(xié)議(例如IP,IPX,或AppleTalk)必須被適當(dāng)?shù)木W(wǎng)絡(luò)控制協(xié)議(NCP)分別設(shè)定。每個(gè)NCP可以隨時(shí)被打開和關(guān)閉。</P>
<P>執(zhí)行記錄:</P>
<P>因?yàn)橐淮螆?zhí)行最初可能需要大力浪的時(shí)間用于鏈路質(zhì)量檢測,所以當(dāng)?shù)却齪eer設(shè)定NCP的時(shí)候,執(zhí)行應(yīng)該避免使用固定的timeouts。當(dāng)一個(gè)NCP處于Opened狀態(tài)時(shí),PPP將攜帶相應(yīng)的網(wǎng)絡(luò)層協(xié)議packets。當(dāng)相應(yīng)的NCP不處于Opened狀態(tài)時(shí),任何接收到的被支持的網(wǎng)絡(luò)層協(xié)議packets都將被靜靜的丟棄。</P>
<P>執(zhí)行記錄:</P>
<P>當(dāng)LCP處于Opened狀態(tài)時(shí),任何不被該執(zhí)行所支持的協(xié)議packets必須在Protocol-Reject里返回。只有支持的協(xié)議才被靜靜的丟棄。在這個(gè)階段,鏈路通信量由LCP,NCP,和網(wǎng)絡(luò)層協(xié)議packets的任意可能的聯(lián)合組成。</P>
<P>3-7 鏈路終止階段</P>
<P>PPP可以在任意時(shí)間終止鏈路。引起鏈路終止的原因很多:載波丟失、認(rèn)證失敗、鏈路質(zhì)量失敗、空閑周期定時(shí)器期滿、或者管理員關(guān)閉鏈路。LCP用交換Terminate(終止)packets的方法終止鏈路。當(dāng)鏈路正被關(guān)閉時(shí),PPP通知網(wǎng)絡(luò)層協(xié)議,以便他們可以采取正確的行動(dòng)。交換Terminate(終止)packets之后,執(zhí)行應(yīng)該通知物理層斷開,以便強(qiáng)制鏈路終止,尤其當(dāng)認(rèn)證失敗時(shí)。 Terminate-Request(終止-要求)的發(fā)送者,在收到Terminate-Ack(終止-允許)后,或者在重啟計(jì)數(shù)器期滿后,應(yīng)該斷開連接。收到Terminate-Request的一方,應(yīng)該等待peer去切斷,在發(fā)出Terminate-Request后,至少也要經(jīng)過一個(gè)Restart
time(重啟時(shí)間),才允許斷開。PPP應(yīng)該前進(jìn)到鏈路死亡階段。 在該階段收到的任何非LCP packets,必須被靜靜的丟棄。</P>
<P>執(zhí)行記錄:</P>
<P>LCP關(guān)閉鏈路就足夠了,不需要每一個(gè)NCP發(fā)送一個(gè)Terminate
packets。相反,一個(gè)NCP關(guān)閉卻不足以引起PPP鏈路的終止,即使那個(gè)NCP是當(dāng)前唯一一個(gè)處于Opened狀態(tài)的NCP。</P>
<P>4 自動(dòng)機(jī)協(xié)商選項(xiàng)</P>
<P>finite-state automaton(有限態(tài)自動(dòng)機(jī))由事件、動(dòng)作和狀態(tài)轉(zhuǎn)換定義。事件包括接收外部命令,例如Open and
Close(打開和關(guān)閉)、重啟定時(shí)器期滿、和接收從peer來的packets。動(dòng)作包括啟動(dòng)重啟定時(shí)器和向peer傳輸packets。一些packets類型--Configure-Naks(設(shè)定-成功)和Configure-Rejects(設(shè)定-拒絕),或Code-Rejects(編碼-拒絕)和Protocol-Rejects(協(xié)議-拒絕),或Echo-Requests(回波-要求),Echo-Replies(回波-應(yīng)答)和Discard-Requests(丟棄-要求)--在自動(dòng)機(jī)描述中不加以區(qū)分。從后面的描述可知,這些packets確實(shí)有著不同的功能。然而他們總是引起相同的轉(zhuǎn)換。</P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=1>
<TBODY>
<TR>
<TD width="50%">
<P align=center>事件</P></TD>
<TD width="50%">
<P align=center>操作</P></TD></TR>
<TR>
<TD width="50%">Up = lower layer is Up</TD>
<TD width="50%">tlu = This-Layer-Up</TD></TR>
<TR>
<TD width="50%">Down = lower layer is Down</TD>
<TD width="50%">tld = This-Layer-Down</TD></TR>
<TR>
<TD width="50%">Open = administrative Open</TD>
<TD width="50%">tls = This-Layer-Started</TD></TR>
<TR>
<TD width="50%">Close= administrative Close</TD>
<TD width="50%">tlf = This-Layer-Finished</TD></TR>
<TR>
<TD width="50%">TO+ = Timeout with counter > 0</TD>
<TD width="50%">irc = Initialize-Restart-Count</TD></TR>
<TR>
<TD width="50%">TO- = Timeout with counter expired</TD>
<TD width="50%">zrc = Zero-Restart-Count</TD></TR>
<TR>
<TD width="50%">RCR+ = Receive-Configure-Request (Good)</TD>
<TD width="50%">scr = Send-Configure-Request</TD></TR>
<TR>
<TD width="50%">RCR- = Receive-Configure-Request (Bad)</TD>
<TD width="50%"> </TD></TR>
<TR>
<TD width="50%">RCA = Receive-Configure-Ack</TD>
<TD width="50%">sca = Send-Configure-Ack</TD></TR>
<TR>
<TD width="50%">RCN = Receive-Configure-Nak/Rej</TD>
<TD width="50%">scn = Send-Configure-Nak/Rej</TD></TR>
<TR>
<TD width="50%">RTR = Receive-Terminate-Request</TD>
<TD width="50%">str = Send-Terminate-Request</TD></TR>
<TR>
<TD width="50%">RTA = Receive-Terminate-Ack</TD>
<TD width="50%">sta = Send-Terminate-Ack</TD></TR>
<TR>
<TD width="50%">RUC = Receive-Unknown-Code<BR>RXJ+ =
Receive-Code-Reject (permitted) <BR>or Receive-Protocol-Reject
<BR>RXJ- = Receive-Code-Reject (catastrophic) <BR>or
Receive-Protocol-Reject </TD>
<TD width="50%">scj = Send-Code-Reject</TD></TR>
<TR>
<TD width="50%">RXR = Receive-Echo-Request <BR>or
Receive-Echo-Reply <BR>or Receive-Discard-Request </TD>
<TD width="50%">ser = Send-Echo-Reply</TD></TR></TBODY></TABLE>
<P>4-1 狀態(tài)遷移圖</P>
<P>全部的狀態(tài)轉(zhuǎn)換如下表。狀態(tài)在水平軸,事件在垂直軸。狀態(tài)轉(zhuǎn)換和動(dòng)作備表示成:動(dòng)作/新狀態(tài)的形式。多個(gè)動(dòng)作用逗號分隔,無先后順序。狀態(tài)后面跟的那個(gè)字母是說明性的腳注。短劃線('-')代表無效的轉(zhuǎn)換。</P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=1>
<TBODY>
<TR>
<TD vAlign=top width="6%" rowSpan=2> </TD>
<TD vAlign=top width="94%" bgColor=#ffff00 colSpan=10><FONT face=宋體
size=3>
<P align=center><STRONG>狀態(tài)</STRONG></FONT></P></TD></TR>
<TR>
<TD vAlign=top width="6%"><FONT face=宋體 size=3>
<P align=justify>0</FONT></P></TD>
<TD vAlign=top width="7%">
<BLOCKQUOTE><FONT face=宋體 size=3>
<P align=justify>1</FONT></P></BLOCKQUOTE></TD>
<TD vAlign=top width="8%">
<BLOCKQUOTE><FONT face=宋體 size=3>
<P align=justify>2</FONT></P></BLOCKQUOTE></TD>
<TD vAlign=top width="11%">
<BLOCKQUOTE><FONT face=宋體 size=3>
<P align=justify>3</FONT></P></BLOCKQUOTE></TD>
<TD vAlign=top width="7%"><FONT face=宋體 size=3>
<P align=justify>4</FONT></P></TD>
<TD vAlign=top width="10%"><FONT face=宋體 size=3>
<P align=justify>5</FONT></P></TD>
<TD vAlign=top width="12%">
<BLOCKQUOTE><FONT face=宋體 size=3>
<P align=justify>6</FONT></P></BLOCKQUOTE></TD>
<TD vAlign=top width="12%">
<BLOCKQUOTE><FONT face=宋體 size=3>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -