且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Oracle TNS协议中数据包的内部结构

更新时间:2022-04-05 00:44:54

在线路上看到的包绝大多数是数据包(类型6)。对数据包而言,TNS包头后面的一个字(WORD)用来存储数据标志位(data flag)。如果这个包是一个断开连接包,那么这个字(WORD)被设为0x0040--否则,一般设为0x0000。 注意: 所有的Oracle版本中都存在一个故障(bug):在服务器处理一个数据包(类型6)的时候,该数据包的数据标志位的第2个比特已被设置,但第1个(最不重要的)比特没有被设置(例如,数字2,6,10,14等)。如果服务器受到这样的包,它就会花费点所有可利用的CPU处理时间,以一个死循环而告终。很明显,这对服务器性能会产生消极的影响。 数据标志位后面的一个字节(第11个字节)决定了数据包里的内容: 0x01表示协议商议。这里,客户机降可以接受的协议版本发送给服务器--他们是6,5,4,3,2,1和0.服务器回复一个通用的版本(例如,6或5),不过它还会发送一些额外的信息,如它使用的字符集,这个集合共有多少个字符,版本字符串和服务器标志。 0x02表示交换数据类型表示法。 0x03表示一次双任务接口(Two-Task Interface,TTI)函数调用。下面的表列出了一些函数: 0x02



本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1276826