协议整体参考解析:

Q921-Q931协议分析.doc

1 921协议中的计数变量

Q921协议中有vs ,va, ns, nr, vr, 其基本含义如下:

1. 发送序列号NS

只有I帧包含N(S),即本I帧的发送序列号。在指定用于传输的序列I帧时,N(S) = V(S)。

2. 接收序列号NR

所有I帧和supervisory帧都包含N(R),即下一个对端预期接收到的发送序列号。 在指定上述类型的帧用于发送时,N(R)= V(R)。 N(R)表示前面N(R)-1个I帧都已经正确接收到。

3. 接收状态变量VR

当使用I帧命令和supervisory帧命令/响应时,每个点对点数据链路连接端点应具有相关的V(R)。 V(R)表示本端期望接收的下一个顺序I帧的序列号。 V(R)可以取0到n-1的值。 V(R)的值在接收到I 帧时递增1。

4. 发送状态变量VS

在使用I帧命令时,每个点对点数据链路连接端点应该具有一个相关联的V(S)。 V(S)表示本端下一个要发送的I帧的序号。V(S)可以取从0到n - 1的值, 且不应超过V(A),或超过k的最大值(K为允许暂存的I帧个数)。 V(S)的值在本端发送完I帧之后,递增1。 k的值的范围可能在 1≤k≤127。

5. 确认状态变量VA

当使用I帧命令和supervisory帧命令/响应时,每个点对点数据链路连接端点应该具有一个关联的V(A)。 V(A)表示最后被确认的I帧 (V(A)-1 即最后被确认I帧的N(S)值)。 V(A)可以取从0到n - 1的值。V(A)的值根据对端发过来frame的N(R)的值进行更新(见3.5.2.6)。 一个有效的N (R)值是在V (A)≤N (R)≤V (S)。

2 log解析示例

  1. [L2L1(trac) ]@@: IN: itf:0, sapi:0, cmd_resp:0, tei:0, frame:
  2. /******************************************************************************
  3. //=======1. PBX发过来SETUP, ns为8表示本frame的序列号是8;nr为9,表示PBX端希望接收的frame序列号为9
  4. *******************************************************************************/
  5. [L2L1(trac) ]==== I Frame ====, ns:8, nr:9, pf:0
  6. [L2L1(trac) ]0x41688508: 2e 00 04 00 00 01 10 12 08 02 7f 0e 05 a1 04 03
  7. [L2L1(trac) ]0x41688518: 80 90 a3 18 03 a9 83 8e 6c 0d 20 80 31 33 32 38
  8. [L2L1(trac) ]0x41688528: 38 36 31 33 39 30 31 70 09 80 38 38 36 31 33 39
  9. [L2L1(trac) ]0x41688538: 30 32
  10. [L2L1(trac) ][L2L3(trac) ]checkL2Entity, UP 0, TEI 0, admStatus_ enabled, l1Status_ active
  11. [L2L3(trac) ]**UP: LD_DATA_MESSAGE, itf:0, sapi:0, tei:0
  12. ##Q931,cr:32526,itf:0,ie len:37,msg:[L2L3(trac) ]++++ SETUP ++++
  13. [L2L3(trac) ]* SENDING COMPLETE IE
  14. * BEARER CAP IE, length:3, content[0x]:80 90 a3
  15. [L2L3(trac) ]* CHANNEL ID IE, length:3, content[0x]:a9 83 8e
  16. [L2L3(trac) ]* CALLING PARTY NUMBER IE, length:13, content[0x]:20 80 31 33 32 38 38 36 31 33 39 30 31
  17. [L2L3(trac) ]* CALLED PARTY NUMBER IE, length:9, content[0x]:80 38 38 36 31 33 39 30 32
  18. [L2L3(trac) ][L2L3(trac) ]0x598984f4: 3b 34 00 00 00 00 00 00 4a 00 00 07 41 02 00 03
  19. [L2L3(trac) ]0x59898504: 01 01 02 02 01 01 04 00 2a 08 02 7f 0e 05 a1 04
  20. [L2L3(trac) ]0x59898514: 03 80 90 a3 18 03 a9 83 8e 6c 0d 20 80 31 33 32
  21. [L2L3(trac) ]0x59898524: 38 38 36 31 33 39 30 31 70 09 80 38 38 36 31 33
  22. [L2L3(trac) ]0x59898534: 39 30 32
  23. [L2L3(trac) ]
  24. [L2L1(trac) ]@@: OUT: itf:0, sapi:0, cmd_resp:0, tei:0, frame:
  25. [L2L1(trac) ]==== RR ====, nr:9, pf:0
  26. [L2L1(trac) ]0x416882f8: 04 00 00 00 00 01 01 12
  27. /******************************************************************************
  28. //=======2. 此时vr自增1变为9, vs在发送I frame之前仍为原来的值9, va=nr=9
  29. *******************************************************************************/
  30. [L2L1(trac) ][L2L1(trac) ]ifId = 0, state = 3, timerRecovery = 0, peerReceiverBusy = 0, maxK = 128, vs = 9, va = 9, k_ = 7,
  31. [L2L1(trac) ]stopT200, itf:0, tei:0, state:3 rc:0 t200run_m:0.
  32. [L2L3(trac) ]**DOWN: Q931_DATA_REQ_MESSAGE, itf:0, sapi:0, tei:0
  33. ##Q931,cr:32526,itf:0,ie len:5,msg:[L2L3(trac) ]++++ CALL PROC ++++
  34. * CHANNEL ID IE, length:3, content[0x]:a9 83 8e
  35. [L2L3(trac) ][L2L3(trac) ]0x598ff3cc: 1b 34 00 00 00 00 00 00 4a 00 00 0c 41 02 00 03
  36. [L2L3(trac) ]0x598ff3dc: 01 01 02 02 01 01 04 00 0a 08 02 ff 0e 02 18 03
  37. [L2L3(trac) ]0x598ff3ec: a9 83 8e
  38. [L2L3(trac) ][L2L3(trac) ]checkL2Entity, UP 0, TEI 0, admStatus_ enabled, l1Status_ active
  39. [L2L1(trac) ]ifId = 0, state = 3, timerRecovery = 0, peerReceiverBusy = 0, maxK = 128, vs = 9, va = 9, k_ = 7,
  40. /******************************************************************************
  41. //=======3. 此时vr是9,nr=vr=9, ns=vs, 表示本端发的第9个I frame.
  42. *******************************************************************************/
  43. [L2L1(trac) ]@@: OUT: itf:0, sapi:0, cmd_resp:1, tei:0, frame:
  44. [L2L1(trac) ]==== I Frame ====, ns:9, nr:9, pf:0
  45. [L2L1(trac) ]0x41688718: 0e 00 00 00 02 01 12 12 08 02 ff 0e 02 18 03 a9
  46. [L2L1(trac) ]0x41688728: 83 8e
  47. [L2L1(trac) ]L2IACS::sendQueuedFrames, send I frame: ifId:0 vs:9, va:9[L2L1(trac) ]startT200, itf:0, tei:0, state:3, timeout:1000 rc:0 t200run_m:0.
  48. [L2L1(trac) ]@@: IN: itf:0, sapi:0, cmd_resp:1, tei:0, frame:
  49. [L2L1(trac) ]==== RR ====, nr:10, pf:0
  50. [L2L1(trac) ]0x41688928: 04 00 04 00 02 01 01 14
  51. [L2L1(trac) ][L2L3(trac) ]checkL2Entity, UP 0, TEI 0, admStatus_ enabled, l1Status_ active
  52. [L2L1(trac) ]multiframeMode, itf: 0, va: 9 has been verfied
  53. /******************************************************************************
  54. //=======4. vs在发送I frame之后自增为10, 这里收到RR,va=nr=10
  55. *******************************************************************************/
  56. [L2L1(trac) ]ifId = 0, state = 3, timerRecovery = 0, peerReceiverBusy = 0, maxK = 128, vs = 10, va = 10, k_ = 7,
  57. [L2L1(trac) ]stopT200, itf:0, tei:0, state:3 rc:0 t200run_m:1.
  58. [L2L3(trac) ]**DOWN: Q931_DATA_REQ_MESSAGE, itf:0, sapi:0, tei:0
  59. ##Q931,cr:240,itf:0,ie len:48,msg:[L2L3(trac) ]++++ SETUP ++++
  60. [L2L3(trac) ]* SENDING COMPLETE IE
  61. * BEARER CAP IE, length:3, content[0x]:80 90 a3
  62. [L2L3(trac) ]* CHANNEL ID IE, length:3, content[0x]:a1 83 81
  63. [L2L3(trac) ]* PROGRESS IND IE, length:2, content[0x]:80 81
  64. [L2L3(trac) ]* CALLING PARTY NUMBER IE, length:15, content[0x]:01 81 30 30 31 33 32 38 38 36 31 33 39 30 31
  65. [L2L3(trac) ]* CALLED PARTY NUMBER IE, length:14, content[0x]:81 30 30 31 33 32 38 38 36 31 33 39 30 32
  66. [L2L3(trac) ][L2L3(trac) ]0x598fed30: 46 34 00 00 00 00 00 00 4a 00 00 0c 41 02 00 03
  67. [L2L3(trac) ]0x598fed40: 01 01 02 02 01 01 04 00 35 08 02 00 f0 05 a1 04
  68. [L2L3(trac) ]0x598fed50: 03 80 90 a3 18 03 a1 83 81 1e 02 80 81 6c 0f 01
  69. [L2L3(trac) ]0x598fed60: 81 30 30 31 33 32 38 38 36 31 33 39 30 31 70 0e
  70. [L2L3(trac) ]0x598fed70: 81 30 30 31 33 32 38 38 36 31 33 39 30 32
  71. [L2L3(trac) ][L2L3(trac) ]checkL2Entity, UP 0, TEI 0, admStatus_ enabled, l1Status_ active
  72. [L2L1(trac) ]ifId = 0, state = 3, timerRecovery = 0, peerReceiverBusy = 0, maxK = 128, vs = 10, va = 10, k_ = 7,
  73. /******************************************************************************
  74. //=======5. 此时vr还是9(因为没收到PBX发的I frame),nr=vr=9, ns=vs,表示本端发的第10个I frame.
  75. *******************************************************************************/
  76. [L2L1(trac) ]@@: OUT: itf:0, sapi:0, cmd_resp:1, tei:0, frame:
  77. [L2L1(trac) ]==== I Frame ====, ns:10, nr:9, pf:0
  78. [L2L1(trac) ]0x41688f58: 39 00 00 00 02 01 14 12 08 02 00 f0 05 a1 04 03
  79. [L2L1(trac) ]0x41688f68: 80 90 a3 18 03 a1 83 81 1e 02 80 81 6c 0f 01 81
  80. [L2L1(trac) ]0x41688f78: 30 30 31 33 32 38 38 36 31 33 39 30 31 70 0e 81
  81. [L2L1(trac) ]0x41688f88: 30 30 31 33 32 38 38 36 31 33 39 30 32
  82. [L2L1(trac) ]L2IACS::sendQueuedFrames, send I frame: ifId:0 vs:10, va:10[L2L1(trac) ]startT200, itf:0, tei:0, state:3, timeout:1000 rc:0 t200run_m:0.
  83. [L2L1(trac) ]@@: IN: itf:0, sapi:0, cmd_resp:1, tei:0, frame:
  84. [L2L1(trac) ]==== RR ====, nr:11, pf:0
  85. [L2L1(trac) ]0x41689168: 04 00 04 00 02 01 01 16
  86. [L2L1(trac) ][L2L3(trac) ]checkL2Entity, UP 0, TEI 0, admStatus_ enabled, l1Status_ active
  87. /******************************************************************************
  88. //=======6. vs在发送I frame之后自增为11, 这里收到RR,va=nr=11
  89. *******************************************************************************/
  90. [L2L1(trac) ]multiframeMode, itf: 0, va: 10 has been verfied
  91. [L2L1(trac) ]ifId = 0, state = 3, timerRecovery = 0, peerReceiverBusy = 0, maxK = 128, vs = 11, va = 11, k_ = 7,
  92. [L2L1(trac) ]stopT200, itf:0, tei:0, state:3 rc:0 t200run_m:1.