📄 ppp中使用hdlc帧.htm
字号:
<P align=justify> </P>
<P
align=justify>在FCS计算后,传送方检查整个帧,如果碰到连续五个1就要插入一个零,以免帧内的数据和标记序列混淆。在接收方,在进行FCS计算前,连接五个一后面的0将被抛弃,以保证数据的正确性。</P>
<P align=justify> </P>
<P align=justify>5.3. 无效帧</P>
<P align=justify> </P>
<P
align=justify>帧过短(在16位FCS时少于4个字节),或者帧以一个多于六个1的序列结束时,帧将被无响应抛弃,而不被记为FCS错误。</P>
<P align=justify> </P>
<P align=justify>5.4. 时间空隙</P>
<P align=justify> </P>
<P align=justify>不支持字节内时间空隙。</P>
<P
align=justify>标记序列应该在帧内时间空隙传送。然而,特定类型的线路交换连接要求使用空闲标记(连续的1)。当在位同步连接使用空闲标记时,系统必须唯在标记序列间的空闲时间中至少有15个连接的1出现,标记序列通常在一个帧的开始处和空闲时间的结束处产生。这与在ISO
3309中的情况不同,它允许7到14位的空闲标记。</P>
<P align=justify> </P>
<P align=justify>5.5. 传输</P>
<P align=justify> </P>
<P
align=justify>所有字节以最低位优先的方式发送。不同的编码由DTE/DCD负责,这不在本文的讨论范围之内。PPP可以不关心下层的二进制流表示,缺少传送的标准将会象缺少数据链路标准一样妨碍上下两层的协同工作。在速度范围在56
Kbps到2.0 Mbps中,NRZ是当前最广泛使用的,它的标准也被推荐于默认值。</P>
<P
align=justify>当允许编码配置时,NRZI也被推荐为默认值,相对起来,它能够避免信号转换配置错误。它的连接也不需要昂贵的DSU/CSU设置。但是,NRZI编码使16位FCS中X1分量的缺少的问题变得有出错的可能,这样2**15中(而不是2**16)的错误就无法查觉,三位错误也无法检查。因此,在使用NRZI时,应该使用32位FCS,其中包括X1分量。</P>
<P align=justify>当速度大于45
Mbps时,一些设计者会选择ANSI高速同步接口。而这样的经验现在还不成熟,设计者应该在选择传输编码时注意协同使用。</P>
<P align=justify> </P>
<P align=justify>6. <A name=异步到同步的转换>异步到同步的转换</A></P>
<P align=justify> </P>
<P
align=justify>一些系统会遇到异步到同步的转换,这是由于系统链路的一端可能连接着一个同步子系统而另一端连接着一个异步子系统。而所有操作中的转换工作都应该由转换装置完成。</P>
<P
align=justify>要启用此功能,同步PPP系统必须以LCP配置确认响应异步控制字符映射配置选项。然而,接受配置选项并不意味着同步系统将所所有的ACCM映射,相反,所有类似的字节映射将由异步到同步转换装置完成。</P>
<P align=justify> </P>
<P align=justify>7. <A name=附加LCP配置选项>附加LCP配置选项</A></P>
<P align=justify> </P>
<P align=justify>配置选项格式和基本选项已经由LCP定义了。具体的数据请查询相应的文献,这里只讨论异步控制字符映射。</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>此配置选项提供了一种在异步链路上使用控制字符透明的方法。异步链路的两每一端支持两个异步控制字符映射。接收ACCM是32位的,而发送ACCM可以多达256位,也就是说,链路两端有四个不同的ACCM,每端两个。</P>
<P
align=justify>对于异步链路,默认的接收ACCM是0xffffffff。默认的发送ACCM是0xffffffff加上控制逃逸字符和标记序列本身,再加上将要异步发出的而被标记字符。(因为异步发送,因为要分成一个个单元,所以需要加上标记。)</P>
<P
align=justify>对于其它类型的连接,默认值是0,因为对其它类型的连接而言,没有必要进行映射。默认的字符(除了0x20外)都能够在所有已知的通信设备上透明传送。</P>
<P
align=justify>发送方也可能用控制逃逸的格式发送除0x5e外的从0x40到0xff的所有字符,但是这并没有解决发送者不能处理所有非控制字符的问题。同样,现有的技术也不能影响第八位,这也没有解决只能传送7位字节的通信链路问题。</P>
<P
align=justify>然而,通常不需要映射所有的控制字符,甚至不需要映射任何控制字符。配置选项用来通知双方哪些控制字符在发送时需要映射。一方可能仍然在映射的格式中传送其它字符。此时发送方应该采取措施使接收方在接收时忽略这些字符。下面所示为异步控制字符映射配置选项格式。传送顺序为从左至右。</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>长度</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域有四个字节,说明需要映射的控制字符集。每个被标记的位与相同位置的字节对应。如果位被设置为零,此字节不需要映射。如果此位为1,此字节必须被映射。注意:最低字节的最低位如果是0,对应的映射字符是ASCII控制字符NUL。</P>
<P align=justify> </P>
<P align=justify>A. 推荐的LCP选项</P>
<P align=justify> </P>
<P align=justify>下面的配置选项是推荐使用的:</P>
<P align=justify> </P>
<P align=justify>高速连接时:</P>
<P align=justify> </P>
<P align=justify>魔术数;</P>
<P align=justify>连接质量监视</P>
<P align=justify>不使用地址和控制域压缩</P>
<P align=justify>不使用协议域压缩</P>
<P align=justify> </P>
<P align=justify>低速或异步连接时:</P>
<P align=justify> </P>
<P align=justify>异步控制字符映射</P>
<P align=justify>魔术数</P>
<P align=justify>使用地址和控制域压缩</P>
<P align=justify>使用协议域压缩</P>
<P align=justify> </P>
<P align=justify>B. PPP帧的自动识别</P>
<P align=justify> </P>
<P align=justify>有时可能需要检测PPP帧。以下面字节开始的就是一个有效的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>注意:前两种形式对UNIX而言不是有效的用户名。然而,只有第三种格式产生正确的PPP
帧奇偶校验码,此时03(EXT)和FF(DEL)作为控制符,与奇偶校验无关而被抛弃。</P>
<P
align=justify>当上面三种模式之一在登录时出现,接口进入包模式时,系统就会如上所述处理。初始到达的PPP帧将被抛弃,而立即发送要求配置帧。</P>
<P align=justify> </P>
<P align=justify>C. 快速帧检查序列的实现</P>
<P align=justify> </P>
<P
align=justify>FCS原来设计时考虑到了硬件的实现。串行二进制流在线路上传输,FCS可以在串行数据送出时计算得到,而附加在串行数据流上,这些数据以标记序列结束,而完成一帧。</P>
<P
align=justify>接收方在接收到标记序列前不清楚是否完成计算接收到的FCS。因此,应该设计一种帧格式使FCS通过时就产生特定的信息。这样设计的帧就是“好的FCS”。</P>
<P align=justify> </P>
<P align=justify>C.1. FCS表产生程序</P>
<P align=justify> </P>
<P align=justify>下面的程序用于创建查找表计算FCS-16。</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>* 产生FCS-16表</P>
<P align=justify>*/</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>*FCS-16产生多项式: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计算方法</P>
<P align=justify> </P>
<P align=justify>下面例子的功能:当数据到达接口时,由一个查找表计算32位的帧检查序列。</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>* u16代表16位无符号数</P>
<P align=justify>*/</P>
<P align=justify>typedef unsigned short u16;</P>
<P align=justify> </P>
<P align=justify>/*</P>
<P align=justify>* 由表生成子计算而来的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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -