成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

異常測試之Socket網(wǎng)絡異常

forsigner / 1663人閱讀

摘要:前言不知道大家在測試的過程中有沒有發(fā)現(xiàn)關于異常測試這樣一個特點無論是分散在功能測試中的異常用例還是規(guī)模相對較大的專項異常測試中,異常測試的用例占比雖然不大但是對于挖掘問題卻扮演著十分重要的角色。

本文由作者張雨授權網(wǎng)易云社區(qū)發(fā)布。

前言
不知道大家在測試的過程中有沒有發(fā)現(xiàn)關于異常測試這樣一個特點: 無論是分散在功能測試中的異常用例還是規(guī)模相對較大的專項異常測試中,異常測試的用例占比雖然不大但是對于挖掘問題卻扮演著十分重要的角色。

隨著項目組微服務化的演變進程,服務間通過http接口訪問的場景也越來越多,本文站在測試的角度,對與socket的網(wǎng)絡異常測試場景進行了一下整理和模擬方法的實踐,拋磚引玉,歡迎大家提出更多更好的方法。

常見Socket網(wǎng)絡異常類型
異常 Exception類型 原因 場景
connect timed out java.net.SocketTimeoutException Socket TCP建立連接時三次握手超時,如果建立連接的時間超過了設置的Socket連接的超時時間觸發(fā)TimeoutException異常 網(wǎng)絡延遲、網(wǎng)絡斷開、網(wǎng)卡異常、服務端性能、客戶端異常等等
Read timed out java.net.SocketTimeoutException 如果輸入緩沖隊列RecvQ中沒有數(shù)據(jù),read操作會一直阻塞而掛起線程,直到有新的數(shù)據(jù)到來并且已經(jīng)超過了設置的讀超時時間時觸發(fā) 客戶端或者服務端進程崩潰、對方機器突然重啟、網(wǎng)絡斷開等
Connection refused java.net.ConnectException 訪問服務端IP不通或者端口服務沒有啟用 網(wǎng)絡異常、服務down掉等
Connection reset or connection reset by peer java.net.SocketException 客戶端或者服務端其中一方退出,但退出時并未關閉該連接,另一方仍然在從連接中讀數(shù)據(jù)則拋出該異常(發(fā)送的第一個數(shù)據(jù)包引發(fā)該異常Connect reset by peer 服務端并發(fā)連接數(shù)達到負載主動斷開連接;客戶端關閉但服務端仍讀寫數(shù)據(jù)
網(wǎng)絡異常場景構造實驗
通過上面對于異常場景原理的了解, 我們通過一些linux網(wǎng)絡小工具結(jié)合tcp的連接建立流程依次制造異常,從而更好的了解上面這些異常~

服務端: tomcat server 8080
客戶端: curl
工具: iptables 、tcpkill
國際慣例,tcp三次握手非高清大圖

connect timed out

客戶端通過iptables 構造異常

這里統(tǒng)一從出口進行流量的限制,大家也可以自己試下從入口方向做限制。

iptables -A OUTPUT -p tcp --syn --dport 8080 -j DROP
客戶端訪問服務端

root@asdfd-10796:~# curl http://115.238.125.169:8080 -v About to connect() to 115.238.125.169 port 8080 (#0) Trying 115.238.125.169...

Connection timed out* couldn"t connect to host

Closing connection #0

curl: (7) couldn"t connect to host
客戶端查看socket狀態(tài):SYN_SENT

root@asdfd-10796:~# netstat -antp | grep 8080tcp 0 1 115.238.125.172:59038 115.238.125.169:8080 SYN_SENT 3692/curl

Read timed out

客戶端通過iptables 構造異常

iptables -A OUTPUT -p tcp -m state --state ESTABLISHED --dport 8080 -j DROP
客戶端訪問服務端

root@asdfd-10796:~# curl http://115.238.125.169:8080 -v About to connect() to 115.238.125.169 port 8080 (#0) Trying 115.238.125.169... connected Connected to 115.238.125.169 (115.238.125.169) port 8080 (#0)> GET / HTTP/1.1> User-Agent: curl/7.26.0> Host: 115.238.125.169:8080> Accept: />

additional stuff not fine transfer.c:1037: 0 0 additional stuff not fine transfer.c:1037: 0 0 additional stuff not fine transfer.c:1037: 0 0

...................... Recv failure: Connection timed out Closing connection #0
curl: (56) Recv failure: Connection timed out
客戶端查看socket狀態(tài):ESTABLISHED

root@asdfd-10796:~# netstat -antp | grep 8080tcp 0 84 115.238.125.172:58986 115.238.125.169:8080 ESTABLISHED 3671/curl
客戶端抓包情況

當tcp連接完成syn-》syn ack后進入ESTABLISHED狀態(tài), 而由于iptables的配置導致服務端之后返回的tcp報文被drop掉,服務端多次重傳后無ack返回,返回read time out

Connection refused

客戶端通過iptables 構造異常

iptables -A OUTPUT -p tcp --dport 8080 -j REJECT
客戶端訪問服務端

root@asdfd-10796:~# curl http://115.238.125.169:8080 -v About to connect() to 115.238.125.169 port 8080 (#0) Trying 115.238.125.169...

Connection refused

couldn"t connect to host

Closing connection #0

curl: (7) couldn"t connect to host
客戶端查看socket狀態(tài):FIN_WAIT1

root@asdfd-10796:~# netstat -antp | grep 8080tcp 0 85 115.238.125.172:58986 115.238.125.169:8080 FIN_WAIT1 -
服務端抓包情況

由于iptables的配置,客戶端主動reject掉服務端返回的syn ack

Connection reset by peer or connection reset

服務端通過tcpkill命令構造異常

tcpkill是一個網(wǎng)絡分析工具集dsniff中的一個小工具,可用來輕量級斷開網(wǎng)絡連接

tcpkill -i eth2 port 8080
客戶端訪問服務端

testroot@asdfd-10796:~# curl http://115.238.125.169:8080/test2 -v About to connect() to 115.238.125.169 port 8080 (#0) Trying 115.238.125.169... connected Connected to 115.238.125.169 (115.238.125.169) port 8080 (#0)> GET /test2 HTTP/1.1> User-Agent: curl/7.26.0> Host: 115.238.125.169:8080> Accept: />

additional stuff not fine transfer.c:1037: 0 0 Recv failure: Connection reset by peer Closing connection #0

curl: (56) Recv failure: Connection reset by peer
服務端查看tcpkill日志

root@asdfd-10649:~# tcpkill -i eth2 port 8080tcpkill: listening on eth2 [port 8080]115.238.125.172:60030 > 115.238.125.169:8080: R 3022358001:3022358001(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022358230:3022358230(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022358688:3022358688(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022358001:3022358001(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022358230:3022358230(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022358688:3022358688(0) win 0115.238.125.169:8080 > 115.238.125.172:60030: R 1694916106:1694916106(0) win 0115.238.125.169:8080 > 115.238.125.172:60030: R 1694916333:1694916333(0) win 0115.238.125.169:8080 > 115.238.125.172:60030: R 1694916787:1694916787(0) win 0115.238.125.169:8080 > 115.238.125.172:60030: R 1694916106:1694916106(0) win 0115.238.125.169:8080 > 115.238.125.172:60030: R 1694916333:1694916333(0) win 0115.238.125.169:8080 > 115.238.125.172:60030: R 1694916787:1694916787(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022360124:3022360124(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022360386:3022360386(0) win 0115.238.125.172:60030 > 115.238.125.169:8080: R 3022360910:3022360910(0) win 0
客戶端抓包情況

服務端在tcp連接建立后主動down掉連接

總結(jié)
其實socket的異常不僅限于次如Broken pipe、 Too many open files等,這些更多的是在壓力并發(fā)測試過程中容易出現(xiàn),本文介紹的這些異常更多的適用于功能性異常測試中,是發(fā)現(xiàn)bug的好幫手,大家可以在日常的測試中實驗一下,會有意外收獲哦

免費領取驗證碼、內(nèi)容安全、短信發(fā)送、直播點播體驗包及云服務器等套餐

更多網(wǎng)易技術、產(chǎn)品、運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。

文章來源: 網(wǎng)易云社區(qū)

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25379.html

相關文章

  • java必知必會ServerSocket

    摘要:單個請求范圍之外的異??赡軙P閉服務器??蛻舳丝赡艹瑫r或崩潰,用戶可能取消事務,網(wǎng)絡可能在流量高峰期間癱瘓,黑客可能發(fā)動拒絕服務攻擊。如果默認長度不夠大,一些的構造函數(shù)還允許改變這個隊列的長度,不能不能超過操作系統(tǒng)支持的最大值。 ServerSocket的生命周期 一個ServerSocket的基本生命周期:1)使用一個ServerSocket構造函數(shù)在一個特定端口創(chuàng)建一個新的Serv...

    chinafgj 評論0 收藏0
  • 斷開TCP連接

    摘要:我們知道通過三次握手建立可靠連接,通過四次揮手斷開連接,連接是比較昂貴的資源。從上分析,安全可靠的斷開連接至少需要四次,再多一次的意義不大。連接的異常斷開以上都是在理想的情況下發(fā)生的,理想狀態(tài)下,一個連接可以被長期保持。 我們知道TCP通過三次握手建立可靠連接,通過四次揮手斷開連接,TCP連接是比較昂貴的資源。為什么TCP需要通過三次握手才能建立可靠的連接?兩次不行么?斷開連接為什么需...

    fyber 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<