ORACLE-TNS协议分析

来源:互联网 发布:帝王网络dkfirst 编辑:程序博客网 时间:2024/06/06 12:58

ORACLE-TNS协议分析

oracle 的 TNS 是什么的缩写?

Transparent Network Substrate(透明网络底层,即无论底层的网络层用什么协议对于上层的应用层都是透明的,也即
上层的应用层不用关心底层的网络层使用了什么协议,也即上层的应用层使用的统一调用接口已经屏蔽了不同协议给调用带来的差异了。
tns adapter


ORACLE协议分析

1 TNS介绍

TNS协议是ORACLE服务端和客户端通讯的协议。TNS协议传输可以使用TCP/IP协议、使用SSL的TCP/IP协议、命名管道和IPC协议传输,其中TCP/IP协议传输是使用明文传送。这里我们只分析基于TCP/IP协议上的TNS数据。

ORACLE网络通讯协议TNS有许多版本,并且大部分向下兼容,我们主要oracle TNS协议有一个通用的头,通用头包含一个请求数据类型。不同的服务请求和数据9.2.0.1.0客户和服务间的传输协议,他的协议版本号为312,其兼容到300。

传输使用不同的请求数据类型。对于通常意义的查询操作一般使用数据类型,当出现错误或其他情况时可能使用其他类型。在分析过程中发现以下类型数据:

? 查询语句出错会用标记(marker)类型

? 客户端向服务器请求失败(如不存在的服务ID),服务器会发送拒绝(refuse)

类型

? 客户机登陆会发送连接类型,而服务器返回一个重定向类型数据

? 当重定向端口连接完成后客户端重现发送连接类型数据,服务器返回接受类型

数据,然后能够正常通讯。

2 TNS数据格式

TNS数据包含一个通用的包头,这个包头包含包校验,包长度和包类型等信息。

Common Packet Header 8 Data

通用包头

不同的类型的数据实现不同功能的数据传输。

可变 数据

2.1 通用包头格式

每个TNS完整数据都包含一个通用包头,他说明接受数据的长度及其相关校验和解

Length

Packet check sum Type

2 2 1

包的长度,包括通用包头 包的校验和 TNS类型

析的信息。

Flag

Header check sum

注:

Length:包长度(包括包头) Type: 数据包的类型

类型号 1 2 3 4 5 6 7 8 9 10 11 12 13 14

1 2

状态

通用头的校验和

类型说明

连接(CONNECT) 接受(ACCEPT) 确认(ACK) 拒绝(REFUTE) 重定向(REDIRECT) 数据(DATA) NULL

中止(ABORT)

重新发送(RESEND) 标记(MARKER) ATTENTION 控制(CONTROL)

2.2 连接包结构(0x01)

在客户端和ORACLE要建立连接时,客户端首先发送一个连接结构,然后服务器返

回重定向包(参见2.5)。

typedef struct TNS_CONNECT_header{ UCHAR NS_ver[2]; UCHAR Compatible_ver[2]; UCHAR ser_opt1; UCHAR ser_opt2; UCHAR SDU_size[2]; UCHAR TDU_size[2]; UCHAR NT_protocol_ch1; UCHAR NT_protocol_ch2; UCHAR Max_packets[2];

UCHAR Hardware_1[2]; UCHAR data_length[2]; UCHAR Offset[2]; UCHAR Max_data[4]; UCHAR flag0; UCHAR flag1;

/*java thin interface has no items and id,

if it is not jdbc thin, use offset to override these 有些版本TNS协议中没有下面几项*/ UCHAR item1[4]; UCHAR item2[4]; UCHAR ID[8]; UCHAR unknown[8];

/*followed by decode_des_conn_data */ //连接字符串

}TNS_CONNECT_HEADER; 连接字符串格式:

如:

数据库一般的连接,即ESTABLISH的连接字符串为: (DESCRIPTION= )

(ADDRESS= )

(CONNECT_DATA= )

(SID=test)

(SERVER=DEDICATED) (CID= )

(PROGRAM=D:\oracle\ora92\bin\sqlplusw.exe) (HOST=TOPSEC-MYANGJP) (USER=myangjp) (PROTOCOL=TCP) (HOST=topsec-syangjp) (PORT=1521)

2.3 接受包结构(0x02)

用户重定向之后,需要用重定向端口向服务器发送连接,客户端发送连接包,服务

器连接成功则返回接受包,否则返回refuse包 struct TNS_ACCEPT_header{ unsigned char NS_ver[2]; unsigned char ser_opt1; unsigned char ser_opt2; unsigned char SDU_size[2]; unsigned char TDU_size[2]; unsigned char Hardware_1[2]; unsigned char data_length[2];

unsigned char Offset[2]; unsigned char flag0; unsigned char flag1; //unsigned char unknown[8]; /*no following data*/ };

2.4 拒绝包结构(0x04)

typedef struct TNS_REFUSE_header{ UCHAR uUserRefuseReason; UCHAR uSysRefuseReason; unsigned short int data_length;

//拒绝字符串 }TNS_REFUSE_HEADER; 拒绝字符串:

2.5 重定向包结构(0x05)

typedef struct TNS_REDIRECT_header{

UCHAR data_length[2];

UCHAR data; //长度为data_length; //重定向数据

}TNS_REDIRECT_HEADER;

==============================

Oracle TNS简述
 
 什么是TNS? 
TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序.
 
TNS有那些配置文件? 
TNS的配置文件包括服务器(安装Oracle数据库的机器)端和客户端两部分.服务器有listener.ora,sqlnet.ora,tnsnames.ora,如果通过OCM(Oracle Connection Manage)和域名服务管理客户端连接,服务器端可能还包括cman.ora等文件;客户端有tnsnames.ora,sqlnet.ora.

参见:

oracle tns 协议 谷歌



0 0
原创粉丝点击