下面是翻译国外的一篇博客,原文连接如下:

https://thesprawl.org/research/oracle-tns-protocol/

简介

TNS(Transparent Network Substrate) 协议用于客户端连接Oracle数据库,它可以使用其他一些协议进行通信,如:TCP/IP, IPX/SPX, IPC, Named Pipes等。

结构

TNS 包由一个header和payload 组成

HEADER


+--------------+--------------+

| Packet Length| Packet Chksm | 

+------+-------+--------------+    byte header

| Type | Rsrvd | Header Chksm | 

+------+-------+--------------+

|        P A Y L O A D        |

+-----------------------------+

字段说明:

l  Packet Length: 包长度字段

l  Packet Chksm:检测包

l  Header Chksm: 检测头

l  Type:         包类型

l  Rsrvd:        未使用

如上图:Packet Chksm 和 Header Chksm 通常是不变的,值为0.

Type字段是包的类型字段, 下面列出type 值对应的类型说明:

Type

Description

1

Connect

2

Accept

3

ACK

4

Refuse

5

Redirect

6

Data

7

NULL

8

----

9

ABORT

10

----

11

Resend

12

Marker

13

Attention

14

Control

Payload

Connect

连接类型数据如下所示:

Transparent Network Substrate Protocol
Packet Length:
Packet Checksum: 0x0000
Packet Type: Connect ()
Reserved Byte:
Header Checksum: 0x0000
Connect
Version:
Version (Compatible):
Service Options: 0x0000
Session Data Unit Size:
Maximum Transmission Data Unit Size:
NT Protocol Characteristics: 0xc60e
Line Turnaround Value:
Value of in Hardware:
Length of Connect Data:
Offset to Connect Data:
Maximum Receivable Connect Data:
Connect Flags : 0x61
Connect Flags : 0x61
Trace Cross Facility Item : 0x00000000
Trace Cross Facility Item : 0x00000000
Trace Unique Connection ID: 0x0000000000000000
Connect Data: (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=ORCL)(CID=(PROGRAM=
C:\oracle\product\10.2.\client_1\bin\sqlplus.exe)
(HOST=WINXPSP2)(USER=vmware)))(ADDRESS=(PROTOCOL=TCP)
(HOST=192.168.1.102)(PORT=)))
0.018134 192.168.1.108 192.168.1.102 TNS Request, Connect (), Connect
0c 0c 9a c7 0c fd 3d ..).....)..=..E.
0b a4 c0 a8 6c c0 a8 .&..@...p....l..
f1 ac a7 3e d2 7e ee .f.f.....>f.~.P.
ff ff fe ...............
2c 7f ff c6 0e c4 .,..............
3a .:....aa........
................
4f 4e 3d 4f (DESCRIPTION=(CO
4e 4e 5f 3d NNECT_DATA=(SERV
5f 4e 4d 3d 4f 4c ICE_NAME=ORCL)(C
00a0 3d 4f 4d 3d 3a 5c 6f ID=(PROGRAM=C:\o
00b0 6c 5c 6f 5c racle\product\
00c0 2e 2e 5c 6c 6e 5f 5c .2.0\client_1\bi
00d0 6e 5c 6c 6c 2e n\sqlplus.exe)(H
00e0 4f 3d 4e OST=WINXPSP2)(US
00f0 3d 6d ER=vmware)))(ADD
3d 4f 4f 4f 4c 3d RESS=(PROTOCOL=T
4f 3d 2e CP)(HOST=192.168
2e 2e 4f 3d .1.102)(PORT=
)))

Accept

接收类型数据如下所示:

Transparent Network Substrate Protocol
Packet Length:
Packet Checksum: 0x0000
Packet Type: Accept ()
Reserved Byte:
Header Checksum: 0x0000
Accept
Version:
Service Options: 0x0000
Session Data Unit Size:
Maximum Transmission Data Unit Size:
Value of in Hardware:
Accept Data Length:
Offset to Accept Data:
Connect Flags : 0x61
Connect Flags : 0x61
0c fd 3d 0c 0c 9a c7 ..)..=..).....E.
7c cf f9 bd c0 a8 c0 a8 .H|.@........f..
6c d9 b6 7a 0e a7 cb .l...g..z"....P.
ff 1d ....... .......
7f ff ........... aa..
......

Refuse

拒绝类型数据如下所示:

 0.047753   192.168.1.102   192.168.1.108   TNS Response, Refuse (), Refuse
0c fd 3d 0c 0c 9a c7 ..)..=..).....E.
8f e2 c0 a8 c0 a8 ..S.@..."d...f..
6c f1 0d e8 a0 2d 2b 0d .l......-+g...P.
fe ff ..Y....g......".
5b 4f 4e 3d .[(DESCRIPTION=(
4d 3d 4e 4e 4d 3d TMP=)(VSNNUM=
3d )(ERR=
4f 5f 4b 3d )(ERROR_STACK=(
4f 3d 4f 3d ERROR=(CODE=
4d 3d )(EMFI=))))

如果有下面的错误则产生拒绝包:

TNS-12514 - TNS:listener could not resolve SERVICE_NAME given in connect descriptor caused by invalid SID string provided in the connect string.

Data Packet

DATA 包是类型6,包括2个字节的 flag 标志位,1字节的 packet id,可选的 TTI id,还有数据本身。

+-----------+----+-----+
| Data Flag | ID |<TTI>|
+----------------------+
| D A T A |
+----------------------+

字段说明:

l  Data Flag: 数据标识

l  ID:      包ID

l  TTI:       TTI(Two-Task Interface) ID

l  DATA:     有效数据

Data Flag 通常是 0x0000, 当所有数据发送完毕指示文件结尾,值为 0x0040

下面是列出了有效的数据包ID:

ID: 0x01

描述:协议协商。下面这些标识是可以接受的协议版本:

0x06 0x05 0x04 0x03 0x02 0x01 0x00

客户端平台字符串像:IBMPC/WIN_NT-8.1.0

示例:

0.277372   192.168.1.108   192.168.1.102   TCP kwdb-commn > iax
[PSH, ACK] Seq= Ack= Win= Len=
0c 0c 9a c7 0c fd 3d ..).....)..=..E.
4d c0 a8 6c c0 a8 .M..@...qt...l..
d9 0e a7 cd b6 7b ca .f.g........{.P.
fe a0 d0 .W.....%........
4d 2f ........IBMPC/WI
4e 5f 4e 2d 2e 2e N_NT-8.1..

ID: 0x02

描述:交换数据类型

示例:

0.437308   192.168.1.108   192.168.1.102   TCP kwdb-commn > iax
[PSH, ACK] Seq= Ack= Win= Len=
0c 0c 9a c7 0c fd 3d ..).....)..=..E.
6b c0 a8 6c c0 a8 .k..@...qU...l..
d9 0e a7 cd b9 b6 7c 6e .f.g........|nP.
fd b3 e2 .......C........
b2 b2 0d .....R!.........
ff ff 3f ..............?.
3f .?..............
3c 3c 3c ..<<<....

ID: 0x03

描述: TTI (Two-Task Interface)功能,作用是描述即将到来的数据包ID下面是一个TTI ID列表:

  • 0x02 Open
    0x03 Query
    0x04 Execute
    0x05 Fetch
    0x08 Close
    0x09 Disconnect/logoff
    0x0C AutoCommit ON
    0x0D AutoCommit OFF
    0x0E Commit
    0x0F Rollback
    0x14 Cancel
    0x2B Describe
    0x30 Startup
    0x31 Shutdown
    0x3B Version
    0x43 K2 Transactions
    0x47 Query
    0x4A OSQL7
    0x5C OKOD
    0x5E Query
    0x60 LOB Operations
    0x62 ODNY
    0x67 Transaction - end
    0x68 Transaction - begin
    0x69 OCCA
    0x6D Startup
    0x51 Logon (present password)
    0x52 Logon (present username)
    0x73 Logon (present password - send AUTH_PASSWORD)
    0x76 Logon (present username - request AUTH_SESSKEY)
    0x77 Describe
    0x7F OOTCM
    0x8B OKPFC

示例:

0.475183   192.168.1.108   192.168.1.102   TCP kwdb-commn > iax
[PSH, ACK] Seq= Ack= Win= Len=
0c 0c 9a c7 0c fd 3d ..).....)..=..E.
b7 c0 a8 6c c0 a8 ....@...p....l..
d9 0e a7 cd fc b6 7c .f.g........|.P.
fd 9d 8a 2d e0 ...-............
6c c8 d5 .v.l...........
c3 e0 bf c5 ................
4d 0d 0d 5f SYSTEM.....AUTH_
4d 4e 4c 4e TERMINAL.....WIN
0f 0f XPSP2.........AU
5f 4f 4d 5f 4e 4d 0b TH_PROGRAM_NM...
00a0 0b 6c 6c 2e ..sqlplus.exe...
00b0 0c 0c 5f 4d ......AUTH_MACHI
00c0 4e 4f 4b 4f NE.....WORKGROUP
00d0 5c 4e \WINXPSP2.......
00e0 5f ..AUTH_PID.....
00f0 3a :.........A
5f 6d UTH_SID.....vmwa
re....

ID: 0x08

描述:“OK”服务器给客户端的响应

示例:

0.568852   192.168.1.102   192.168.1.108   TCP iax > kwdb-commn
[PSH, ACK] Seq= Ack= Win= Len=
0c fd 3d 0c 0c 9a c7 ..)..=..).....E.
cd 7c d5 f9 c0 a8 c0 a8 ..|.@.......f..
6c d9 b6 7c 0e a7 ce dc .l...g..|.....P.
fb a6 cf a5 ..!.............
0c 0c 5f ........AUTH_SES
4b SKEY ... 23B7160
4BBB8D9C712DC55D
4086C22B2.......
................
................
00a0 ................
00b0 0c ...........A!..
00c0 ................
00d0 ...........

ID: 0x11

描述:TTI (Two-Task Interface)功能扩展,下面是一些附加的标志

  • 0x6b 开关或者分离会话
  • 0x78 关闭
  • 0x87 OSCID
  • 0x9A OKEYVAL

示例:

0.972469   192.168.1.108   192.168.1.102   TCP kwdb-commn > iax
[PSH, ACK] Seq= Ack= Win= Len=
0c 0c 9a c7 0c fd 3d ..).....)..=..E.
c0 a8 6c c0 a8 .T..@...qh...l..
d9 0e a7 d2 ba b6 7e ab .f.g........~.P.
fb 0e be 2c .v.....,........
6b d3 .k..............
3b fb f4 fa 6c fa ;.........p...l.
..

ID: 0x20

描述:使用外部的程序和服务注册

示例:

ID: 0x44

描述:使用外部的程序和服务注册

示例:

ID: 0xdeadbeef

描述:附加网络选项,客户端可协商附加连接熟悉,例如:认证,加密,数据完整性,监控,

注意:wireshark 中叫这个包为 Secure Network Services

示例:

0.094489   192.168.1.108   192.168.1.102   TNS Response, Data (), SNS
0c 0c 9a c7 0c fd 3d ..).....)..=..E.
d0 f4 c0 a8 6c c0 a8 ....@...p....l..
d9 0e a7 cb b6 7a .f.g........zBP.
ff df ef a8 ................
dead beef 9e 0a ....... ........
0a .......... .....
9c c7 c7 f3 de ad be ................
ef ................
0a ............ ...
e0 e1 fc ff ................
00a0 4e ....NTS.........
00b0 0a 0c 0c .... ...........
00c0 0f 0a 0b ................
00d0 0a .... .........

根据 "Oracle Hacker's Handbook" 这是一个bug 在所有版本的oracle。

当一个服务器解析一个 DATA 数据包时,DATA  flags的第二个bit 设置但第一个bit(最低位)未设置(例如:2,6,10,14等等)。当服务器接收这样的包,它会陷入一个无限循环,占有所有的CPU处理时间。显然这对服务器性能产生负面影响。

Oracle tns 协议的更多相关文章

  1. oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)

    问题描述1:   C:\Users\Administrator>lsnrctl start LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Pr ...

  2. oracle之 ORA-12557: TNS: 协议适配器不可加载

    操作系统:windows 7数据库版本: 11.2.0.1问题描述:直接通过 sqlplus sys/oracle@10.10.100.109:1521/ysxt as sysdba 可以登录,但是通 ...

  3. 转)TNS协议--翻译自《The Oracle Hackers Handbook》

    在开发源工具解决Oracle中的问题时,必须了解TNS协议.在努力理解TNS协议的时候,Oracle JDBC驱动程序(classes12.zip)会是一个很有用的资源TNS头. 每个TNS包都有一个 ...

  4. Oracle用imp导入dmp 提示遇到 ORACLE 错误 12560 TNS: 协议适配器错误 解决方法

    用imp命令导入dmp文件时提示以下错误: IMP-00058: 遇到 ORACLE 错误 12560 : ORA-12560: TNS: 协议适配器错误 : IMP-00000: 未成功终止导入 : ...

  5. oracle:ora-12560 tns 协议适配器错误

    今天新安装了一个oracle server,实例启动了,监听状态也正常. [oracle@db ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0 ...

  6. ORACLE中的Net Configuration Assistant 点击后无反应, sqlplus登录数据库提示Oracle11g ORA-12560: TNS: 协议适配器错误

    首先是对于点击无反应问题: 如果是客户端下的Net Configuration Assistant可用,而服务器端的Net Configuration Assistant等工具不可用的原因如下. 环境 ...

  7. 【Oracle】ORA-12560: TNS: 协议适配器错误

    问题现象: ORA-12560: TNS: 协议适配器错误 解决方法: 启动监听服务

  8. 安装完ODAC,出现ORA-12560:TNS:协议适配器错误 12541 无监听程序的解决

    进入系统环境变量设置,查看Path路径,发现D:\oracle\product\11.2.0\client_1等路径放到了oracle11g数据库路径前面,将新加入的路径置后即可解决ORA-12560 ...

  9. TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序

    文章转自:http://www.luocs.com/archives/464.html 此文版权归作者 – yaogang所有,转载请注明yaogang©www.luocs.com. Luocs说:这 ...

随机推荐

  1. python 基础 6.0 异常的常用形式

    一. 异常   异常既是一个时间,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在python无法正常处理程序时就会发生一个异常.异常是python对象,表示一个错误.当python ...

  2. rabbitmq 安装-单点

    centos6.5  rabbitmq搭建 环境:centos6.5 192.168.9.41   安装rabbitmq需要先安装erlang.rabbitmq3.6版本需要erlang R16B03 ...

  3. ios Symbol(s) not found for architecture arm64总结 含隐藏错误cocoapods

    一.通用 报错:Desktop/project/ASDF/WEIXIN/libWeChatSDK.a (3 slices) Undefinedsymbols for architecture arm6 ...

  4. Grunt学习笔记【3】---- filter使用方式和实现原理详解

    本文主要讲配置任务中的filter,包括使用默认fs.Stats方法名和自定义过滤函数,以及filter的实现原理. 通过设置filter属性可以实现一些特殊处理逻辑.例如:要清理某个文件夹下的所有空 ...

  5. Java 中的四种引用类型(转)

    目录 背景 简介          1. 强引用 StrongReference          2. 弱引用 WeakReference          3. 软引用 SoftReference ...

  6. 【题解】P2279消防局的设立

    [题解][P2279 HNOI2003]消防局的设立 又是一道贪心. 随便指定一个点为根,可以知道在覆盖了一个节点的子树的情况下,消防站越高越好.那么我们就贪心吧.\(trick\)是按深度\(pus ...

  7. 如何在windows上创建文件名以“.”开头的文件

    比如要创建.env文件,正常会提示必须输入文件名才能创建的,但是可以在后面再加一个点就能创建了,.env.这样就可以了

  8. Wireshark学习笔记——怎样高速抓取HTTP数据包

    0.前言     在火狐浏览器和谷歌浏览器中能够很方便的调试network(抓取HTTP数据包),可是在360系列浏览器(兼容模式或IE标准模式)中抓取HTTP数据包就不那么那么方便了.尽管也可使用H ...

  9. [STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!

    [STM8L]基于STM8L152的TAB段式LCD液晶驱动的分析 - 单片机干货 - 中国电子技术论坛 - 最好最受欢迎电子论坛!.md 主控芯片为STM8L152C4T6自带LCD控制器,低功耗系 ...

  10. P5111 zhtobu3232的线段树

    P5111 zhtobu3232的线段树 维护左子树右子树的贡献和跨区间贡献 #include<bits/stdc++.h> using namespace std; typedef lo ...