?? ppp協議規范.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協議規范</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協議規范
<P>1 介紹</P>
<P>PPP是為在同等單元之間傳輸數據包這樣的簡單的鏈路而設計的。這種鏈路提供全雙工操作,并按照順序傳遞數據包。(人們)有意讓PPP為基于各種主機、網橋和路由器的簡單連接提供一種共通的解決方案。</P>
<P>封裝: </P>
<P>PPP封裝提供了不同網絡層協議同時通過統一鏈路的多路技術。精心的設計PPP封裝,使其保有對常用支持硬件的兼容性。當使用默認的類HDLC幀(HDLC-like
framing)時,僅需要8個額外的字節,就可以形成封裝。在帶寬需要付費時,封裝和幀可以減少到2或4個字節。為了支持高速的執行,默認的封裝只使用簡單的字段,多路分解只需要對其中的一個字段進行檢驗。默認的頭和信息字段落在32-bit邊界上,尾字節可以被填補到任意的邊界。</P>
<P align=center><IMG height=63 alt="PPP-1.bmp (1826 bytes)"
src="PPP協議規范.files/ppp-1.gif" width=219></P>
<P>鏈路控制協議(LCP):</P>
<P>為了在一個很寬廣的環境內能足夠方便的使用,PPP提供了LCP。LCP用于就封裝格式選項自動的達成一致,處理數據包大小的變化,探測looped-back鏈路和其他普通的配置錯誤,以及終止鏈路。提供的其他可選設備有:對鏈路中同等單元標識的認證,和當鏈路功能正?;蜴溌肥r的決定。</P>
<P>網絡控制協議:</P>
<P>點對點連接可能和當前的一族網絡協議產生許多問題。例如,基于電路交換的點對點連接(比如撥號模式服務),分配和管理IP地址,即使在LAN環境中,也非常困難。這些問題由一族網絡控制協議(NCP)來處理,每一個協議管理著各自的網絡層協議的特殊需求。</P>
<P>配置:</P>
<P>有意使PPP鏈路很容易配置。通過設計,標準的默認值處理全部的配置。執行者可以對默認配置進行改進,它被自動的通知給其同等單元而無需操作員的干涉。最終,操作員可以明確的為鏈路設定選項,以便其正常工作。</P>
<P>2 PPP封裝</P>
<P>PPP封裝用于消除多協議datagrams的歧義。封裝需要幀同步以確定封裝的開始和結束。提供幀同步的方法在參考文檔中。</P>
<P>PPP封裝的概要如下所示。字段的傳輸從左到右。</P>
<P>協議字段:</P>
<P>協議字段由一個或兩個字節組成。它的值標識著壓縮在packet的信息字段里的datagram。字段中最有意義位(最高位)被首先傳輸。該字段結構與ISO
3309地址字段擴充機制相一致。該字段必須是奇數:最輕意義字
<BR>節的最輕意義位(最低位)必須等于1。另外,字段必須被賦值,以便最有意義字節的最輕意義位為0。收到的不符合這些規則的frames,必須被視為帶有不被承認的協議。</P>
<P>在范圍"0***"到"3***"內的協議字段,標識著特殊packets的網絡層協議。在范圍"8***"
到"b***"內的協議字段,標識著packets屬于聯合的(相關的)網絡控制協議(NCP)。在范圍"4***"到"7***"內的協議字段,用于沒有相關NCP的低通信量協議。在范圍"c***"到"f***"內的協議字段,標識著使用鏈路層控制協議(例如LCP)的packets。到目前為止,協議字段的值在最近的"Assigned
Numbers" RFC [2]里有詳細的說明。本說明書保留以下的值:</P>
<P> Value (in hex) Protocol Name <BR> 0001 Padding
Protocol填料協議 <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鏈路控制協議
<BR> c023 Password Authentication Protocol密碼認證協議 <BR> c025
Link Quality Report鏈路品質報告 <BR> c223 Challenge Handshake
Authentication Protocol挑戰-認證握手協議</P>
<P>新的協議的開發者必須從the Internet Assigned Numbers Authority
(IANA),atIANA@isi.edu.處獲得號碼。</P>
<P>信息字段:</P>
<P>信息字段是0或更多的字節。對于在協議字段里指定的協議,信息字段包含datagram。信息字段的最大長度,包含填料但不包含協議字段,術語叫做最大接收單元(MRU),默認值是1500字節。若經過協商同意,也可以使用其它的值作為MRU。</P>
<P>填料:</P>
<P>在傳輸的時候,信息字段會被填充若干字節以達到MRU。每個協議負責根據實際信息的大小確定填料的字節數。</P>
<P>3 PPP鏈路操作</P>
<P>3-1 概述</P>
<P>為了通過點對點鏈路建立通信,PPP鏈路的每一端,必須首先發送LCP
packets以便設定和測試數據鏈路。在鏈路建立之后,peer才可以被認證。然后,PPP必須發送NCP
packets以便選擇和設定一個或更多的網絡層協議。一旦每個被選擇的網絡層協議都被設定好了,來自每個網絡層協議的datagrams就能在連路上發送了。鏈路將保持通信設定不變,直到外在的LCP和NCP關閉鏈路,或者是發生一些外部事件的時候(休止狀態的定時器期滿或者網絡管理員干涉)。</P>
<P>3-2 階段劃分框圖</P>
<P>在設定、維持和終止點對點鏈路的過程里,PPP鏈路經過幾個清楚的階段,如框圖所示。這張圖并沒有給出所有的狀態轉換。</P>
<P align=center><IMG height=237 alt="PPP-2.bmp (12386 bytes)"
src="PPP協議規范.files/ppp-2.gif" width=413></P>
<P>3-3 鏈路死亡(物理連接不存在)</P>
<P>鏈路一定開始并結束于這個階段。當一個外部事件(例如載波偵聽或網絡管理員設定)指出物理層已經準備就緒時,PPP將進入鏈路建立階段。在這個階段,LCP自動機器將處于初始狀態,向鏈路建立階段的轉換將給LCP自動機器一個UP事件信號。</P>
<P>執行記錄:</P>
<P>典型的,在與調制解調器斷開之后,鏈路將自動返回這一階段。在用硬件實現的鏈路里,這一階段相當的短--僅夠偵測設備的存在。</P>
<P>3-4 鏈路建立階段</P>
<P>LCP用于交換配置信息包(Configure packets),建立連接。一旦一個配置成功信息包(Configure-Ack
packet)被發送且被接收,就完成了交換,進入了LCP開啟狀態。所有的配置選項都假定使用默認值,除非被配置交換所改變。有一點要注意:只有不依賴于特別的網絡層協議的配置選項才倍LCP配置。在網絡層協議階段,個別的網絡層協議的配置由個別的網絡控制協議(NCP)來處理。在這個階段接收的任何非LCP
packets必須被silently discarded(靜靜的丟棄)。收到LCP
Configure-Request(LCP配置要求)能使鏈路從網絡層協議階段或者認證階段返回到鏈路建立階段。</P>
<P>3-5 認證階段</P>
<P>在一些鏈路上,在允許網絡層協議packets交換之前,鏈路的一端可能需要peer去認證它。默認的,認證是不需要強制執行的。如果一次執行希望peer根據某一特定的認證協議來認證,那么它必須在鏈路建立階段要求使用那個認證協議。應該盡可能在鏈路建立后立即進行認證。而,鏈路質量檢查可以同時發生。在一次執行中,禁止因為交換鏈路質量檢查packets而不確定地將認證向后推遲這一做法。在認證完成之前,禁止從認證階段前進到網絡層協議階段。如果認證失敗,認證者應該躍遷到鏈路終止階段。</P>
<P>在這一階段里,只有鏈路控制協議、認證協議,和鏈路質量監視協議的packets是被允許的。在該階段里接收到的其他的packets必須被靜靜的丟棄。</P>
<P>執行記錄:</P>
<P>一次執行中,僅僅是因為超時或者沒有應答就造成認證的失敗是不應該的。認證應該允許某種再傳輸,只有在若干次的認證嘗試失敗以后,不得已的時候,才進入鏈路終止階段。在執行中,哪一方拒絕了另一方的認證,哪一方就要負責開始鏈路終止階段。</P>
<P>3-6 網絡層協議階段</P>
<P>一旦PPP完成了前面的階段,每一個網絡層協議(例如IP,IPX,或AppleTalk)必須被適當的網絡控制協議(NCP)分別設定。每個NCP可以隨時被打開和關閉。</P>
<P>執行記錄:</P>
<P>因為一次執行最初可能需要大力浪的時間用于鏈路質量檢測,所以當等待peer設定NCP的時候,執行應該避免使用固定的timeouts。當一個NCP處于Opened狀態時,PPP將攜帶相應的網絡層協議packets。當相應的NCP不處于Opened狀態時,任何接收到的被支持的網絡層協議packets都將被靜靜的丟棄。</P>
<P>執行記錄:</P>
<P>當LCP處于Opened狀態時,任何不被該執行所支持的協議packets必須在Protocol-Reject里返回。只有支持的協議才被靜靜的丟棄。在這個階段,鏈路通信量由LCP,NCP,和網絡層協議packets的任意可能的聯合組成。</P>
<P>3-7 鏈路終止階段</P>
<P>PPP可以在任意時間終止鏈路。引起鏈路終止的原因很多:載波丟失、認證失敗、鏈路質量失敗、空閑周期定時器期滿、或者管理員關閉鏈路。LCP用交換Terminate(終止)packets的方法終止鏈路。當鏈路正被關閉時,PPP通知網絡層協議,以便他們可以采取正確的行動。交換Terminate(終止)packets之后,執行應該通知物理層斷開,以便強制鏈路終止,尤其當認證失敗時?! erminate-Request(終止-要求)的發送者,在收到Terminate-Ack(終止-允許)后,或者在重啟計數器期滿后,應該斷開連接。收到Terminate-Request的一方,應該等待peer去切斷,在發出Terminate-Request后,至少也要經過一個Restart
time(重啟時間),才允許斷開。PPP應該前進到鏈路死亡階段。 在該階段收到的任何非LCP packets,必須被靜靜的丟棄。</P>
<P>執行記錄:</P>
<P>LCP關閉鏈路就足夠了,不需要每一個NCP發送一個Terminate
packets。相反,一個NCP關閉卻不足以引起PPP鏈路的終止,即使那個NCP是當前唯一一個處于Opened狀態的NCP。</P>
<P>4 自動機協商選項</P>
<P>finite-state automaton(有限態自動機)由事件、動作和狀態轉換定義。事件包括接收外部命令,例如Open and
Close(打開和關閉)、重啟定時器期滿、和接收從peer來的packets。動作包括啟動重啟定時器和向peer傳輸packets。一些packets類型--Configure-Naks(設定-成功)和Configure-Rejects(設定-拒絕),或Code-Rejects(編碼-拒絕)和Protocol-Rejects(協議-拒絕),或Echo-Requests(回波-要求),Echo-Replies(回波-應答)和Discard-Requests(丟棄-要求)--在自動機描述中不加以區分。從后面的描述可知,這些packets確實有著不同的功能。然而他們總是引起相同的轉換。</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 狀態遷移圖</P>
<P>全部的狀態轉換如下表。狀態在水平軸,事件在垂直軸。狀態轉換和動作備表示成:動作/新狀態的形式。多個動作用逗號分隔,無先后順序。狀態后面跟的那個字母是說明性的腳注。短劃線('-')代表無效的轉換。</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>狀態</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>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -