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说:这 ...
随机推荐
- EasyPlayer RTSP Android安卓播放器实现视频源快速切换
EasyPlayer现在支持多视频源快速切换了,我们介绍一下是如何实现的. 这个需求通常应用在一个客户端需要查看多个视频源的情况,比如多个监控场景轮播. 由于EasyPlayer的播放端已经放在Fra ...
- 九度OJ 1005:Graduate Admission (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5646 解决:1632 题目描述: It is said that in 2011, there are about 100 graduat ...
- 【题解】Greatest Common Increasing Subsequence
[题解]Greatest Common Increasing Subsequence vj 唉,把自己当做DP入门选手来总结这道题吧,我DP实在太差了 首先是设置状态的技巧,设置状态主要就是要补充不漏 ...
- 【题解】P4886快递员
[题解]P4886 快递员 淀粉质好题!!!加深了我对点分治的理解.最近分治学了好多啊. 题目大意 给定你一颗有边权的树,再给你\(m\)和点对,请你在树上选出来一个点,使得所有点对到这个点的距离的最 ...
- Hibernate load 和 Get的区别
load和get都可以取回一个对象,难道是方法重复吗?绝对不可能,那它们到底有那些区别呢? 在http://blog.chinaunix.net/u/484/showart_1093166.html这 ...
- 剑指Offer:二叉树中和为某一值的路径【34】
剑指Offer:二叉树中和为某一值的路径[34] 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. ...
- dojo 官方翻译 dojo/string 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/string.html#dojo-string require(["dojo/st ...
- POJ 1330 Nearest Common Ancestors 【最近公共祖先LCA算法+Tarjan离线算法】
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20715 Accept ...
- 算法(Algorithms)第4版 练习 1.3.25 1.3.24
代码实现: //1.3.24 /** * remove the node following the node x * (and does nothing if the argument or the ...
- mooc_java 集合框架下
1.判断List中课程是否存在 /** * 测试List的contains方法 * @param args */ public void testListContains(){ Course cour ...