void packetDecoder::decode(const unsigned char* pData, Info* opBuf , unsigned int pktLen, int linkProto){
    Protocol currentProtocol;
    int offset;
    int nextProtocolId;

    offset = 0;
    currentProtocol = getLayerById(linkProto);
    if(currentProtocol == NULL){
        printf("unknown protocol,id:%d\n", linkProto);
    }
    while(currentProtocol != NULL && (pktLen - offset >
                                      currentProtocol->getSize() // 剩余长度要大于协议的最小长度
                                      )){
        nextProtocolId = currentProtocol->ParseInfo(pData + offset, opBuf, pktLen);
        offset += currentProtocol->getSize();
        if(nextProtocolId != UNKNOWN_PROTO){
            currentProtocol = getLayerById(nextProtocolId);
        }else{
            currentProtocol = NULL;
        }
    }
}