日期:2014-05-18  浏览次数:20784 次

PPP协议的LCP链路包中的校验位怎么计算出来的?
如题,协议只说了是循环冗余校验方式
试过了CRC16,CRC32等校验函数
得出的结果都跟截取的报文不一致
报文如下,校验位是除了头尾两个7E和 BE 9B这个算出来的校验位


7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 38 7D 
22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 23 7D 24 C0 
23 7D 25 7D 26 7D 20 7D 20 7D 20 7D 20 7D 27 7D 
22 7D 28 7D 22 BE 9B 7E 

  //7D XX=>**,其中**是XX与0x20异或的结果 
  //特殊地, 
  //7D 5D=>5D, 
  //7D 5E=>5E, 

  //所以上面转换后的结果是: 
  //7E FF 03 C0 21 01 01 00 18 
  //02 06 00 0A 00 00 03 04 C0 
  //23 05 06 00 00 00 00 07 02 
  //08 02 BE 9B 7E 
  //下面说下里面数据的含义: 
  //7E----PPP的帧头,帧尾标志 
  //FF----地址域 
  //03--控制域 
  //C0 21---协议域,0xC021表示LCP协议,再比如0x8021表示ipcp协议 
  //01 01 00 18--第一个01表示LCP包的code为1,即configure_request, 下面那个01表示标识符,00 18表示包的长度 
  //它包括code,identifier,长度,及后面的选项域。 
  //02 06 00 0A 00 00--表示选项的type为2,06为长度,00 0A 00 00表示ACCM选项的数据域,可以参考rfc1662 
  //03 04 C0 23 --选项type为3,表示协议认证,04为长度,CO 23表示采用CHAP认证 
  //05 06 00 00 00 00 ----选项type为5,表示magic number,06为长度,后面的是内容 
  //07 02--选项type为7表示协议域压缩 
  //08 02--选项type为8表示地址控制域压缩 
  //BE 9B--表示FCS,Fast Frame Check Sequecese,可参考rfc1662 

路过的给个计算方式!

------解决方案--------------------
好高深........