本文主要介紹如何使用JMeter對TCP協議進行測試
一、TCP概念
二、TCP協議的三次握手
三、TCP取樣器參數介紹
四、Wireshark抓包和開發TCP腳本
--------------------------------------------------------------------------------------------------------------------------
一、TCP概念
1. TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,用戶數據報協議(UDP)是同一層內另一個重要的傳輸協議。數據傳輸時,應用程序向TCP層發送數據流,TCP就會將接受到的數據流切分成報文段(會根據當前網絡環境來調整報文段的大小),然后經過下面的層層傳遞,最終傳遞給目標節點的TCP層。為了防止丟包,TCP協議會在數據包上標有序號,對方收到則發送ACK確認,未收到則重傳。這個步驟就是我們通常所說的TCP建立連接的三次握手。同時TCP會通過奇偶校驗和的方式來校驗數據傳輸過程中是否出現錯誤。
二、TCP協議的三次握手
1. 第一次握手:客戶端發送syn包(seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;
2. 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
3. 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
4. 握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
5.實際抓包驗證:
三、TCP取樣器參數介紹
1.打開jmeter,點擊測試計划>>添加>>配置元件>>TCP取樣器配置
2.TCP Sampler提供了3個報文編碼類型的實現,分別是
TCPClient classname:
代表了你發出去的TCP報文是什么格式的,Jmeter自己提供的是實現了三類:
TCPClientlmpl: 以文本編輯中所編輯的純文本為內容進行發送。這是最簡單的實現類,就是基礎的文本,可以設置他的編碼格式。一般用來發json串。
BinaryTCPClientlmpl:這個是用來發送十六進制報文的時候,在classname里設置成BinaryTCPClientlmpl,他能將十六進制報文轉換成二進制,
LengthPrefixedBinaryTCPClientlmpl在BinaryTCPClientlmpl基礎上默認以發送內容的長度為字節前綴進行填充。
3.1)Re-use connection:如果選中,連接會一直處於打開狀態,否則讀取到數據之后就關閉。
2)Close connection:如果選中,在TCP Sampler運行完畢之后就會關閉。
3)SO_LINGER:該配置項用於控制在關閉連接之前是否要等待緩沖區中的數據發送完成。如果SO_LINGER選項指定了
值,則在得到關閉連接的請求之后還會等待指定的秒數以完成緩沖區中數據的發送,在指定的SO_LINGER秒數完成后,
關閉連接。因此,如果你把該選項設置成0,那么所有連接在收到關閉連接的時候都會立即關閉,避免產生很多處於
TIME_WAIT狀態的套接字。
4)End of line(EOL) byte value:響應數據的最后2位,轉換為10進制的值。取值區間[-128,127]
5)Connect Timeout:與服務器套接字應用連接超時時間(毫秒)。
6)Response Timeout:響應超時時間(毫秒),這個值的設置跟End of line(EOL) byte value有
關系,如果End of line(EOL) byte value中的值設置不正確,會導致JMeter一直在等待無法結束,
但是如果指定了Response Timeout這個值的話,在到達這個值的時候就關閉連接。
7)設置無延遲:是否需要使用該選項,需要跟實際的業務情況結合。