T38传真抓包分析――于杨本文主要对于IP实时传真抓包进行了相关分析,帮助大家对t38协议,t30协议有较为直观的认识。简单地说,t38协议就是t30协议在IP网络上的实现规程。抓包eth0.pkt中021525305280101作为主叫,02152530523作为被叫,是主叫主动发送传真的过程。使用wireshark分析软件打开eth0.pkt,filter域限制为sip||t38.篮底黑字是主叫发送的数据包,黑底红字是被叫发送的数据包。1.T38包结构先说一说t38包的组成结构。我们使用udp协议进行t38数据传输,应用层的数据都被封装在UDPTL中,下图表示了UDPTL在udp包中所处的位置,其实就是udp承载的数据。1.1UDPTL组织结构UDPTL包含三部分:1.序列号seq-number2.IFP分组primary-ifp-packet3.差错纠正error-recovery1.2IFP分组下面详细介绍一下IFP分组内容:从ASN.1描述中,可以看出包括type-of-msg域和data-field域,其中data-field域是可选的。什么时候可选呢?这是由type-of-msg域的类型决定的。Type-of-msg可以选择两种类型:t30-indicator和t30-data。如果是t30-indicator,则不需要data-field;反之,是t30-data,则需要提供data-field域.那么,如果我们使用了t30-data,data-field域应该如何组织呢?Data-field域也是由两部分组成:field-type和field-data,其中,field-data也是可选的,由filed-type类型来决定,比如field-type是hdlc-fcs-ok,就不需要field-data,而field-type是hdlc-data的话,则必须提供field-data.1.3总结综上所述,下图给出了UDPTL框架图,“---------”表示了二者选一的关系,也就是说差错纠正(errorrecovery)只能使用冗余包或者FEC前向纠错中的一种方式。secondary-ifp-packetfec-infotype-of-msgdata-field(optional)seqnumberIFPpacketerrorrecoveryUDPTLfield-typefield-data(optional)2.抓包分析现在已了解了一个t38包的内部构造,下面利用抓包分析一下包与包之间组合起来所表达的信息。从抓包来看,对于是t30-indicator的信令都是单独一个包,其作用是协助真正的t30信令的发送与接受,真正的t30信令都是使用hdlc消息帧来进行传输的,一般都需要多个帧,每个帧存储了一个字节的有效数据。注:我们传真的过程是主叫主动发送传真的过程,并只关注传真过程,sip信令在这里不做分析。传真信令和数据流程B阶段(报文前阶段)1141T30ind:no-signal信令:无信号,可以用于两端连接,对端没有输入的情况下。1153-1196被叫-主叫1153T30ind:V21-preamble信令:V21前导序列,发送传真信令前必发的前导标志,发送传真数据则不需要。1156-1182CSI信令CSI信令的发送打包处理,并且是一个完整的hdlc消息帧。HDLC消息包格式内容定义:StandardHDLCFrameFlagAddressControlFacsimileControlFacsimileInfoN*1(Byte)FrameCheckingSeq(FCS)Flag1156data:v21:hdlc-data[FF]V21表示type-of-msg选择为V21调制模式。HDLC消息的address域,规定值为11111111(0xFF)1157data:v21:hdlc-data[C0]HDLC消息的control域,规定值为1100X000X值:在发送选用帧时(如本例的CSI),选用帧要放在必用的命令帧或响应帧(如本例的DIS)之前,在这种情况下,选用帧的control域的X=0,必用的命令帧或响应帧的X=1;简单的说,就是要发送一系列连续的帧,非末帧是0,末帧是1。1158data:v21:hdlc-data[02]HDLC消息的facsimilecontrol域(FCF),0x02表示CSI信令,该信令是选用信令,表明可用被叫用户的国际电话号码来提供被叫用户的特定身份。CSI的facimileinfo域由20个编码数字组成,见其后20个帧。1159-1181data:v21:hdlc-data[04](中间有2个帧序号不连续,共20帧)CSI编码格式见下表,从表中无法查到对应的编码。1182data:v21:hdlc-fcs-okHdlc-fcs-ok标识了HDLC帧的结束并收到了合适的FCS,也标识这不是最后一帧,该字段类型没有字段数据,仅仅是个标识。1183-1193DIS信令DIS信令的打包发送过程。1183,1184见1156,11571185data:v21:hdlc-data[01]FCF=0x01,表明是DIS信令,表征被叫终端的标准能力。1186-1191共48位表明了被叫的传真能力。下面仅就DIS的各标志位含义做简单描述,不明之处可查询GB_T3382.2-2003P39-47表2或ITUT.3009/2005P52Table21186data:v21:hdlc-data[00]“00000000”注1:“保留”表示为0.1187data:v21:hdlc-data[72]“01110010”1188data:v21:hdlc-data[17]000101111189data:v21:hdlc-data[01]000000011190data:v21:hdlc-data[01]000000011191data:v21:hdlc-data[08]000010001192data:v21:hdlc-fcs-ok见11821193data:v21:hdlc-sig-end标识HDLC的功率电平已经下降到低于关闭门限,用来表征一系列帧的结束。该字段类型后无字段数据。1198-1340主叫-被叫1214-1243TSI信令TSI信令的打包发送过程。TSI信令指出随后的FIF信息是发送终端的标识。1214,1215见1156,11571216data:v21:hdlc-data[C2]FCF=0xC2,X1000010FCF域中X值:收到DIS的终端会置X=1;反之,X=0.在这个抓包中,主叫要发送进行设置就是1,被叫就是0。1218-1239data:v21:hdlc-data[04]TSI与CSI使用的数据编码方式相同,0x04也是接收到CSI中的数据信息。1241data:v21:hdlc-fcs-ok1244-1262DCS信令DCS信令的打包发送过程,是DIS信令标准能力的响应消息。1244,1245见1153,1154。1246data:v21:hdlc-data[C1]FCF=0xC1,X1000001,,由于是主叫发出,所以X=1。1248data:v21:hdlc-data[00]1249data:v21:hdlc-data[73]1250data:v21:hdlc-data[15]1251data:v21:hdlc-data[01]1252data:v21:hdlc-data[01]1253data:v21:hdlc-data[00]DCS数据可参考DIS在T30协议中的同一张表,这里不再进行详细描述,可查询GB_T3382.2-2003P39-47表2或ITUT.3009/2005P52Table21255data:v21:hdlc-fcs-ok见11821258data:v21:hdlc-sig-end见11931274-1330发送training数据1274t30ind:v29-7200-training对应T30协议中训练检验(TCF)信号,本信号要求非HDLC帧。格式:1.5*(1±10%)s的0串1274-1329data:v29-7200:t4-non-ecm-data1274包的时间戳是112.14秒,1329包的时间戳是113.64秒,其时间差正好是1.5秒,符合协议。T4-non-ecm-data表示不使用ECM或FEC发送T4过程数据。1330data:v29-7200:t4-non-ecm-sig-endt4-non-ecm-sig-end表示不使用ECM或FEC发送T4过程数据的结束。1346-1358被叫-主叫1350-1355CFR信令1350,1351见1156,1157。1352data:v21:hdlc-data[21]FCF=0x21,X0100001,由于是被叫发出,X=0CFR信令表明全部报文前过程(B阶段)已结束,可以开始发送报文数据。C阶段(报文发送阶段)1362-3644主叫-被叫1362-3616发送第一页数据数据格式可参考training数据格式。3617-3641MOP信令3632,3634见1156,1157。3635data:v21:hdlc-data[F2]FCF=0xF2X1110010,由于是主叫发送,X=1.MOP信令是多页信号,表示一完整传真信息页的结束,并在收到证实后返回到C阶段的开始。3637,3641见1182,1193。3649-3662被叫-主叫3654-3659MCF信令3654,3655见1156,1157。3656data:v21:hdlc-data[31]FCF=0x31,X0110001,由于是被叫发送,X=0。MCF信令表示已经满意地收到完整的报文,并可继续接收另外的报文,是MOP信令的肯定响应。3658,3659见1182,1193。3666-6735又发送了一页数据,同上分析。6737-9793主叫-被叫6737-9755发送最后一页数据9756-9737EOP信令9781,9782见1156,1157。9783data:v21:hdlc-data[F4]FCF=0xF4X1110100,由于是主叫发送,X=1.EOP信令是多页信号,表示一完整传真信息页的结束,并进一步表示不再发来文件,在收到证实后进入阶段E。9785,9789见1182,1193。9799-9810被叫-主叫9799-9810MCF信令见3654-3659.MCF信令也可以是EOP信令的肯定响应。问题1:HDLC消息的第一字节和最后一个字节Flag没有,why?参考:是在T38协议中使用了HDLC的消息格式,在IP层传输,而并不是在真正的数据链路层进行数据传输,而且t38协议中也规定很多indicator可以表明HDLC消息的开始与结束,所以Flag域就不需要了。问题2:1159-1181数据是0x04,在CSI编码表中不存在?参考:无。