Oracle tns 协议
下面是翻译国外的一篇博客,原文连接如下:
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 协议的更多相关文章
- oracle监听程序无法启动(TNS-12560: TNS: 协议适配器错误,TNS-00530: 协议适配器错误)
问题描述1: C:\Users\Administrator>lsnrctl start LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Pr ...
- oracle之 ORA-12557: TNS: 协议适配器不可加载
操作系统:windows 7数据库版本: 11.2.0.1问题描述:直接通过 sqlplus sys/oracle@10.10.100.109:1521/ysxt as sysdba 可以登录,但是通 ...
- 转)TNS协议--翻译自《The Oracle Hackers Handbook》
在开发源工具解决Oracle中的问题时,必须了解TNS协议.在努力理解TNS协议的时候,Oracle JDBC驱动程序(classes12.zip)会是一个很有用的资源TNS头. 每个TNS包都有一个 ...
- Oracle用imp导入dmp 提示遇到 ORACLE 错误 12560 TNS: 协议适配器错误 解决方法
用imp命令导入dmp文件时提示以下错误: IMP-00058: 遇到 ORACLE 错误 12560 : ORA-12560: TNS: 协议适配器错误 : IMP-00000: 未成功终止导入 : ...
- oracle:ora-12560 tns 协议适配器错误
今天新安装了一个oracle server,实例启动了,监听状态也正常. [oracle@db ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0 ...
- ORACLE中的Net Configuration Assistant 点击后无反应, sqlplus登录数据库提示Oracle11g ORA-12560: TNS: 协议适配器错误
首先是对于点击无反应问题: 如果是客户端下的Net Configuration Assistant可用,而服务器端的Net Configuration Assistant等工具不可用的原因如下. 环境 ...
- 【Oracle】ORA-12560: TNS: 协议适配器错误
问题现象: ORA-12560: TNS: 协议适配器错误 解决方法: 启动监听服务
- 安装完ODAC,出现ORA-12560:TNS:协议适配器错误 12541 无监听程序的解决
进入系统环境变量设置,查看Path路径,发现D:\oracle\product\11.2.0\client_1等路径放到了oracle11g数据库路径前面,将新加入的路径置后即可解决ORA-12560 ...
- TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序
文章转自:http://www.luocs.com/archives/464.html 此文版权归作者 – yaogang所有,转载请注明yaogang©www.luocs.com. Luocs说:这 ...
随机推荐
- 【BZOJ1604】[Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Treap+并查集
[BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000) ...
- TCP(Socket基础编程)
1.TCP特点: 面向连接.可靠安全.传输量大.速度较慢 2.socket编程主要依靠两个类:socket .serversocket example1:客户端可以不停输入字符串,服务端返回字符串的大 ...
- flex做页面。用来做视频的后台服务器是fms
作为新一代的富客户端互联网技术的佼佼者,Flex这种技术已经被越来越多的公司所采用,被越来越多的用户和程序员所接受.以下列出Flex十大优势: 1.Flex与Flash:可以让普通程序员开发制作Fla ...
- Java for LeetCode 080 Remove Duplicates from Sorted Array II
Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For examp ...
- css三角形实现的几种方法的区别
演变: .triangle{ height: 30px; width: 30px; display: inline-block; border: 30px solid; border-color: # ...
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5 ,PHP5.6)支持。
本人预装了一个wamp的集成环境(Apache 2.4.9 + PHP 5.5.12 + mysql 5.6.17),今天在wamp环境下 添加PHP多版本 (PHP 5.5.30).中间两个过程,1 ...
- 《机器学习实战》学习笔记第二章 —— K-近邻算法
主要内容: 一.算法概述 二.距离度量 三.k值的选择 四.分类决策规则 五.利用KNN对约会对象进行分类 六.利用KNN构建手写识别系统 七.KNN之线性扫描法的不足 八.KD树 一.算法概述 1. ...
- LibreOJ 数列分块入门
题目链接:https://loj.ac/problem/6277 题目描述 给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间加法,单点查值. 输入格式 第一行输入一个数字 nnn. 第 ...
- ActivemMQ之消息服务器平台(发邮件)
消息服务平台 处理公司内部各种消息业务 比如 发送邮件 发送短信 微信推送 接口有两种类型 异步 同步 同步需求: 当调用消息服务平台,需要返回消息服务平台调用第三方平台接口是否成功 异步需求: ...
- 关于NIO编程
NIO概述 什么是NIO? Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. Ja ...