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说:这 ...
随机推荐
- 1194: [HNOI2006]潘多拉的盒子
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 464 Solved: 221[Submit][Stat ...
- EasyPusher进行Android UVC外接摄像头直播推送实现方法
最近EasyPusher针对UVC摄像头做了适配.我们结合了UVCCamera与EasyPusher,支持将UVC摄像头的视频推送到RTSP服务器上.在此特别感谢UVCCamera这个牛逼的项目! 来 ...
- Python爬虫-- Scrapy框架
Scrapy框架 Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是事件驱动的,并且比较适合异步的代码.对于会阻塞线程的操作包含访问文件.数据库或者Web.产生新的进程并需要 ...
- php中$t=date()函数参数意义及时间更改
php中date()函数用的最多的是:date('Y-m-d H:i:s', time()); 这里面的参数意义分别是:Y - 年,四位数字; 如: "2016":m - 月份, ...
- java ClassLoader类加载器
原文 首先来了解一下字节码和class文件的区别: 我们知道,新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java ...
- SpringBoot学习笔记(10):使用MongoDB来访问数据
SpringBoot学习笔记(10):使用MongoDB来访问数据 快速开始 本指南将引导您完成使用Spring Data MongoDB构建应用程序的过程,该应用程序将数据存储在MongoDB(基于 ...
- nokogiri
Nokogiri的用法我推荐三篇非常给力的文章:http://ruby.bastardsbook.com/chapters/html-parsing/http://ruby.bastardsbook. ...
- 【Leetcode-easy】Remove Nth Node From End of List
思路1:设置两个指针p1,p2指向表头,p1先走n步.再两个指针同时走.当p1指针指到链表尾部时,P2指针已经在需要删除节点的前一位.一定要注意一些细节. class ListNode { int v ...
- php设计模式课程---9、桥接模式是什么
php设计模式课程---9.桥接模式是什么 一.总结 一句话总结: 一个类没干完,另外一个类接着给它干完 实质是类的拼接,也就是用类的组合代替了类的继承,因为类的组合可以有很多种方式,所以桥接就是类的 ...
- 引用 qsort与sort的比较
引用 linpder 的 qsort与sort的比较 在C/C++标准库中提供了快速排序的函数qsort():在STL中也提供了sort()排序函数,那么这两个函数哪个快呢?之前与代码-> ...