一、 TCP/IP簡介
二、 TCP與UDP之間的區別
2.1 UDP(User Data Protocol,用戶數據報協議
- UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並盡可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
- 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一台服務機可同時向多個客戶機傳輸相同的消息。
- UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
- 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
- UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態表(這里面有許多參數)。
- UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部后就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。
- UDP的包頭結構:
源端口 16位
目的端口 16位
長度 16位
校驗和 16位
2.2 總結TCP與UDP的區別:
- 與無連接;
- 對系統資源的要求(TCP較多,UDP少);
- UDP程序結構較簡單;
- 流模式與數據報模式 ;
- TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證。
2.3 相關名詞解釋
ACK:TCP報頭的控制位之一,對數據進行確認.確認由目的端發出,用它來告訴發送端這個序列號之的數據段都收到了.比如,確認號為X,則表示前X-1個數據段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳數據,保證數據的完整性;
SYN: 同步序列號,TCP建立連接時將這個位置1;
FIN 發送端完成發送任務位,當TCP完成數據傳輸需要斷開時,提出斷開連接的一方將這位置1;
三、使用Jmeter發送TCP請求
-
TCPClient classname:該參數有三個值可以設置,分別為:
org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl:以文本編輯器中的純文本作為內容發送;
org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl:以文本編輯器中所編輯的16進制字符(hex)內容為基礎轉換為二進制的字節內容進行發送;
org.apache.jmeter.protocol.tcp.sampler.LengthPrefixedBinaryTCPClientImpl:在BinaryTCPClientImpl基礎上默認以發送內容的長度以字節前綴進行填充; -
超時時間:發送和接收響應的時間,超出報超時;
-
Re-use connection:復用連接,用於長連接;
-
End of line(EOL) byte value:如果不設置,jmeter會一直讀取流,最后認為請求失敗,response code 500,所有的結果都會被標記為錯誤。10是byte值,代表換行,即 \n;
-
發送的報文一般為16進制數據;
四、 使用Jmeter發送UDP請求
4.1 安裝Jmeter插件
插件官方下載地址
下載后將包放到jmeter的/lib/ext
目錄下
替換后重啟jmeter,右鍵菜單“添加—>Sampler–>jp@gc – UDP Request”添加UDP Sampler
Hostname/TP:主機地址
Wait for Response:是否等待響應
Close UDP Socket:關閉UDP Socket
Response Timeout:響應超時
Data Encode/Decode Class:
kg.apc.jmeter.samplers.HexStringUDPDecoder
直接發送16進制數據,HEX-encoded
kg.apc.jmeter.samplers.UDPSampler
填寫字符串
kg.apc.jmeter.samplers.DNSJavaDecoder
dns解析填寫格式
kg.apc.jmeter.samplers.UDPTrafficDecoder
接口可以自定義編碼/解碼
kg.apc.jmeter.samplers.ReceiveBufferSize
單位字節
Bind local address:本地地址
注:UDP請求讀取響應緩存長度默認4K,可以在JMeter property
中修改kg.apc.jmeter.samplers.ReceiveBufferSize單位字節