socket發送和接受tcp信息包格式的定義


socket發送和接受tcp信息包格式的定義

(2011-07-29 15:05:17)
標簽:

雜談

分類: Delphi編程

下面為信息包的格式和內容

數據包格式如下圖所示,所包含的內容從左到右進行傳輸:包頭中的信息全部為網絡字節順序!

序號

字段名稱

長度(Bytes)

類型(C++)

字段說明

1

head

2

Unsigned Short

包頭標識,固定為0xFFFF

2

version

2

Unsigned Short

版本信息,當前為0x0030

3

length

2

Unsigned Short

包括包頭的全部包體長度

4

command

2

Unsigned Short

命令號

5

status

4

Unsigned Integer

應答狀態

6

taskid

4

Unsigned Integer

任務流水號

7

sender

4

Unsigned Integer

發送方標識1

8

sessionid

4

Unsigned Integer

發送方標識2

9

timestamp

4

Unsigned Integer

時間戳

10

flag

2

Unsigned Short

數據加密標志:0:不加密,1:DES加密

11

reserved

4

Unsigned Integer

保留字段

包頭信息中,開始標識(head),版本信息(version)為固定格式;

包體長度(length),提示整個包體(包括包頭)的長度,接收方據此來完成一個業務數據包的接收和解析;

命令號(command),為客戶端和服務器約定的業務命令,從0到65535,具體定義詳見下表:

號碼段  

起始編號

結束編號

使用說明

1

0X0000

0X03E7

對應具體的業務命令號,如1為充值等

2

0X03E8

0XFFFF

系統保留命令字,目前0XFFFE為心跳包,0XFFFF為心跳應答包

 

應答狀態(status),請求時總設置為0;應答時,由SP應用服務程序返回相應的操作結果或錯誤原因;

任務流水號(taskid)由自行定義,SP應用程序在響應包中必須返回,SP應用程序可以將此作為數據包一段時間內的唯一序列號。

發送方標識1(sender)、發送方標識2(sessionid)、時間戳(timestamp)以及保留字段(reserved),可以為發送方保留一些私有信息,返回包時原樣返回。

包頭信息中,除了包體長度(length)以外,其他的字段,包括開始標識(head),版本信息(version),任務流水號(taskid),發送方標識1(sender),發送方標識2(sessionid),時間戳(timestamp),以及數據加密標識(flag),需要在響應包中原樣返回;
 
流程

1、通用網關在連接建立之后,根據剛才加密的字節流,加上信息包頭,組合成信息包,然后發送(Send)信息包,發送的字節數為加密后的字節流字節數+24(24信息包頭的字節長度);在上述的例子中,信息包大約如ffff0200 00001100 00004e5f 00114b3f 00000000 0100 0038 2fd65329e2770074791503c2dab1d209fe0225636dd07f7277bd291209e1a498df28f7af2f0eb4f1be2831f0fa8987b7f9;其中業務加密字節流的長度這里是56,體現在網絡字節中是0x0038,如果是x86系列的PC,需要做主機到網絡(ntohs)字節順序轉換;

 

2、SP應用服務程序接收(Recv)該信息包,根據包頭信息截取對應的字節流,然后進行解密處理,得到加密前的業務字符串,另外還需要把其他的包頭標識、兩個包頭保留字,存儲在本地;

 

3、 SP應用服務程序根據流程開發人員與之協商好的格式對接收的字符串進行解析,然后進行響應的處理

 

4、 SP應用服務程序在發送之前,同樣根據密匙對該返回字符串進行加密處理,然后對加密字節流長度進行計算,加上剛才發送過來的包頭標識和版本號以及保留字等,組合成信息包;注意這時,字節流的長度是返回加密字節流的長度,而且是網絡字節的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM