⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppp协议规范.htm

📁 关于PPP点对点协议的一些详细资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<!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.1106" 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链路和其他普通的配置错误,以及终止链路。提供的其他可选设备有:对链路中同等单元标识的认证,和当链路功能正常或链路失败时的决定。</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之后,执行应该通知物理层断开,以便强制链路终止,尤其当认证失败时。   Terminate-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 &gt; 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&nbsp; <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 + -