協議解析目錄
TNS協議基礎介紹
TNS協議主要用於Oracle數據庫的通訊使用,TNS可以基於多種協議進行傳輸,本文將分析基於TCP/IP的TNS。
- 報文頭
TNS協議總共8字節+payload(傳輸內容,可變)。
Packet Length: 包長度字段(2字節)。
Packet Chksm:檢測包(2字節)。
Header Chksm: 檢測頭(2字節)。
Type: 包類型(1字節)。
Rsrvd:未使用(1字節)。
詳情如下圖:
- 報文中type說明
針對包類型Type(1字節)共分爲14個類型,詳情如下圖:
具體類型變換流程如下:
1.Oracle進行連接時,客戶端向服務端發起建立請求,此時type=1。
2.當服務端接收後,會向客戶端發起接受請求,此時type=2,如果重新發送時,此時type=11,並重新執行第一步。
3.當服務端拒絕時,會向客戶端發起拒絕請求,此時type=4。如:TNS-12514錯誤,即提供的SID字符串無效。
4.如果服務端接受請求後,客戶端開始發送數據,此時type=6。
具體效果可見下圖:
- Data包(類型6)的報文解析
1.Data Flag: 數據標識。
2.ID:包ID。
3.TTI: TTI(Two-Task Interface) ID。
4.DATA: 有效數據。
詳情如下圖:
Data Flag 通常是 0x0000, 當所有數據發送完畢指示文件結尾,值爲 0x0040
開始發送Data數據時,Data Flag爲 00 00。
當數據發送完畢時,Data Flag爲 00 40。
包ID的基礎信息如下:
以上是TNS協議的基礎介紹,下章節爲爲oracle的抓包分析。
Oracle抓包分析
當Oracle客戶端發起連接時,向服務端發送的TNS報文中,TYPE類型爲1(連接)。
當Oracle服務端確認後,向客戶端發送的TNS報文中,TYPE類型爲2(接收)。
客戶端接收後,向服務端發送請求,此時TNS報文中,TYPE類型爲6,Data報文內,DataID爲 de ad be ef(Sercure Network Service 安全網絡協議,如:認證,加密等),隨後服務端也會向客戶端發送安全網絡協議的報文信息。
當安全網絡協議確定後,雙方會發送Data ID爲1的協議協商操作。如下圖:
當協議協商成功後,客戶端向服務端發起請求,此時DataID爲2。
雙方確認後,便發起正常請求,此時DataID爲3。
後續的DataID效果類似,只是在不同操作的標識區分,因爲涉及內容太多,再次就不一一介紹了,大家可根據第一章節的協議基礎介紹,結合自身TNS的抓包內容進行分析即可。