在平常工作中接触的客户或同仁中,经常听说在做长途ISDN拨号是不能建立连接。本人有幸在Cisco网络设备中解决了这个问题,下面将我在工程中遇到的大连到深圳ISDN呼叫的问题分析以及解决方法提供出来同大家分享:
下面的配置大连Cisco路由器建立数据呼叫的初始配置:
interface BRI2/0
ip address 10.1.1.1 255.255.255.252
encapsulation ppp
dialer map ip 10.1.1.2 name SZ-Center broadcast 0755XXXXXXX
dialer-group 1
isdn switch-type basic-net3
ppp authentication chap
!
dialer-list 1 protocol ip permit
通过ping 10.1.1.2触发ISDN拨号,发现不能成功建立连接。为了确定故障原因,通过Debug dialer发现正常触发呼叫,这样,就需要检查电路呼叫是否正常建立,通过在大连Cisco 路由器上Debug isdn q931,获得如下的输出信息:
5w0d: ISDN BR2/0: TX -> SETUP pd = 8 callref = 0x03
5w0d: Bearer Capability i = 0x8890
5w0d: Channel ID i = 0x83
5w0d: Called Party Number i = 0x80, '07553296145',
Plan:Unknown, Type:Unknown
5w0d: ISDN BR2/0: RX <- SETUP_ACK pd = 8 callref = 0x83
5w0d: Channel ID i = 0x89
5w0d: ISDN BR2/0: RX <- DISCONNECT pd = 8 callref = 0x83
5w0d: Cause i = 0x83C1 - Bearer capability not implemented
5w0d: ISDN BR2/0: TX -> RELEASE pd = 8 callref = 0x03
5w0d: Cause i = 0x80C1 - Bearer capability not implemented
5w0d: ISDN BR2/0: RX <- RELEASE_COMP pd = 8 callref = 0x83
在上面的输出显示中:Setup中的Bearer Capability 为8890,其中88表示是CTITT标准的、无限制的数据通讯,90表示是一个电路模式的,速度为64K的通讯。Setup_Ack表示交换机接收到呼叫建立信令。DISCONNECT表示从交换机收到一个释放连接信令,在这个信令中包含了一个Cause Code,表示释放呼叫的原因,从Cause code输出信息中我们可以看到,ISDN网络认为没有提供数据呼叫的能力,而在用ISDN做市内数据呼叫是正常的,因此,可认为是大连到深圳的ISDN线路中间通过了公共电话交换网中继,而ISDN网络不知道如何将数据呼叫转换成语音呼叫,导致交换机拒绝这个连接,为了确认呼叫没有传送到深圳路由器上,在深圳路由器上用Debug isdn q931没有任何输出输出。
为了确认ISDN是否具有长途呼叫功能,通过ISDN拨打深圳一个固定电话,能正常建立通讯。问题的原因在路由器使用了数据呼叫的Bearer Capability,对此,对大连路由器配置作出变动,将数据呼叫作为语音呼叫来建立,配置如下:
interface BRI2/0
ip address 10.1.1.1 255.255.255.252
encapsulation ppp
dialer map ip 10.1.1.2 name SZ-Center class voice-call broadcast
0755xxxxxxx
dialer-group 1
isdn switch-type basic-net3
ppp authentication chap
dialer-list 1 protocol ip permit
!
map-class dialer voice-call
dialer voice-call
作出如下配置变动后,同样呼叫建立不成功,为了找到建立不成功的原因,同样在在大连路由器上用Debug isdn
q931命令来看ISDN呼叫建立过程,结果如下:
5w0d: ISDN BR2/0: TX -> SETUP pd = 8 callref = 0x1E
5w0d: Bearer Capability i = 0x8090A2
5w0d: Channel ID i = 0x83
5w0d: Called Party Number i = 0x80, '07553296145',
Plan:Unknown, Type:Unknown
5w0d: ISDN BR2/0: RX <- RELEASE_COMP pd = 8 callref = 0x9E
5w0d: Cause i = 0x82E404 - Invalid inFORMation element contents
在上面的Debug输出信息中,Setup中的Bearer
Capability是8090A2,其中80表示是一个CTITT标准的语音,90表示是一个电路模式、传输速率为64K,A2表示64K传输的内容是G.711
[10] μ-law的语音呼叫,当建立这个呼叫时,直接被交换机拒绝,Cause Code显示交换机不能识别这个Bearer
Capability。为了确定ISDN在进行普通语音呼叫时采用的Bearer
Capability信息,通过一个普通电话呼叫ISDN电话,同样在Cisco路由器上Debug isdn q931信息,得到如下输出:
5d02h: ISDN BR2/0: RX <- SETUP pd = 8 callref = 0x28
5d02h: Sending Complete
5d02h: Bearer Capability i = 0x9090A3
5d02h: Channel ID i = 0x89
5d02h: Progress Ind i = 0x8281 - Call not end-to-end ISDN, may have
in-band info
5d02h: Calling Party Number i = 0x2183, '041164641754', Plan:ISDN,
Type:National
5d02h: Called Party Number i = 0xA1, '041187740294', Plan:ISDN,
Type:National
5d02h: ISDN BR2/0: Event: Received a call with a bad bearercap from
041164641754 on B1
5d02h: ISDN BR2/0: RX <- RELEASE pd = 8 callref = 0x28
5d02h: Cause i = 0x8A9F - Normal, unspecified
5d02h: ISDN BR2/0: RX <- RELEASE pd = 8 callref = 0x28
5d02h: Cause i = 0x8A9F - Normal, unspecified
从上面的Debug信息中,看到ISDN在建立语音呼叫的时候他采用的9090A3,其中第一个90表示的是CTITT标准的3.1KHz的语音,第二个90表示电路模式的,传输速度为64K的通讯,而A3表示64K通道传输的格式是G.711 A-law编码方式。由于通常路由器却省是不接收语音呼叫的,事件信息5d02h: ISDN BR2/0: Event: Received a call with a bad bearercap from 041164641754 on B1就表示路由器不接受这个呼叫,这样,确认这个Cisco IOS软件在做语音呼叫的时候说采用北美标准进行呼叫的,而ISDN交换机是不提供G.711 [10] μ-law和G.711 A-law的转换的(当然转换也不能通讯的,因为路由器的64K通道传输的是数据而不是G.711 [10] μ-law或G.711 A-law语音编码,交换机也没法进行转换),因此,必须让路由器在呼叫时欺骗ISND交换机使它认为传送的是G.711 A-law的语音数据,通过更换Cisco IOS版本,找到Cisco IOS Enterprise Plus 12.1.5T10,在做语音呼叫是采用的A3的Bearer Capability,这样,在大连路由器上的ISDN端口上配置isdn outgoing-voice 3.1khz-audio命令,大连路由器在呼叫出去时,其Bearer Capability信息就是9090A3了,ISDN交换机就认为是一个普通语音呼叫,通过ISDN信令和七号信令的转换,就可以在深圳接收到大连的ISDN呼叫,这样,这个呼叫建立过程就完全成功。由于路由器确省是拒绝语音呼叫的,在深圳路由器的ISDN端口上配置isdn incoming-voice data,让路由器接受语音呼叫,并把他当作数据呼叫来处理,这样就成功实现大连到深圳的ISDN数据连接,该方法同样适合武汉到深圳、广州到上海等地ISDN数据通讯问题,最终的路由器配置如下:
大连路由器的配置: interface BRI2/0
ip address 10.1.1.1 255.255.255.252
encapsulation ppp
dialer map ip 10.1.1.2 name SZ-Center class voice-call broadcast
0755XXXXXXX
dialer-group 1
isdn switch-type basic-net3
isdn outgoing-voice info-transfer-capability 3.1khz-audio # if no
this command ,Bearer Capability will change to 8090A3
ppp authentication chap
!
dialer-list 1 protocol ip permit
!
map-class dialer voice-call
dialer voice-call
深圳路由器的配置 : interface BRI2/0
ip address 10.1.1.2 255.255.255.252
encapsulation ppp
dialer map ip 10.1.1.1 name DL-Center broadcast
dialer-group 1
isdn switch-type basic-net3
ppp authentication chap
isdn incoming-voice data # let cisco route accept voice call as data
call
!
dialer-list 1 protocol ip permit
通过上面的分析及排除故障的过程,长途ISDN不能进行数据呼叫的主要问题是由于全国ISDN主干不是全连接网络,有些城市间的ISDN呼叫是通过公共交换电话网来中继的,导致数据通讯不能被提供,对于这个问题,我们完全可以通过更改路由器的配置和更换路由器IOS软件版本来使路由器产生数据呼叫的时候使用适合国内语音呼叫的Bearer
Capability,这样就可以欺骗ISDN交换机来实现长途的ISDN间的数据通讯能力。