linux 跟踪链接 超时,Linux:跟踪netstat -s“连接尝试失败”的来源
我有幾臺服務器,其中netstat -s(來自/ proc / net / snmp)返回的失敗連接嘗試度量標準大約每秒增長一次,我想診斷這些服務器的來源.
通過使用此ipTables規則(在不同的服務器上):
-A OUTPUT -p tcp –dport 23 -j REJECT
我阻止傳出的telnet,所以我可以運行這個循環:
while true ; do
telnet www.google.co.uk
netstat -s | grep “Failed connection”
done
Trying 209.85.203.94…
telnet: Unable to connect to remote host: Connection refused
52 Failed connection attempts
Trying 209.85.203.94… telnet: Unable to connect to remote host: Connection refused
53 Failed connection attempts
Trying 209.85.203.94… telnet: Unable to connect to remote host: Connection refused
54 Failed connection attempts
因此證明計數器因連接到遠程套接字的失敗嘗試而增加. (當然,它并不能證明這是增量的唯一原因).
問題是,我怎樣才能找到失敗的遠程地址和端口(或兩者的復數)的特定組合,以便我可以查看下一步;路由/防火墻問題?
順便說一句,如果我運行這個:
watch -n1 ‘ss | grep “\<23\>”‘
我希望在狀態SYN-SENT中看到套接字,但不要.這是因為我使用了REJECT,而不是DROP?
謝謝
301_40@
讓我們試著以另一種方式(艱難的方式)回答這個問題.閱讀內核的源代碼,看看,只有一個地方,這個度量增量 –
tcp_done函數.正如我們在代碼中看到的,增量僅發生在SYN_SEND或SYN_RECV狀態的連接中.然后我們檢查,從哪里可以調用tcp_done.我們可以找到幾個地方:
> tcp_reset – 在連接中止時調用(收到第一個標志的回復數據包).是的,它可能發生在SYN_SENT和SYN_RECV狀態(以及其他狀態,理論上).
> tcp_rcv_state_process – 在狀態TCP_FIN_WAIT1和TCP_LAST_ACK中調用,因此度量不會遞增 – 這不是我們的情況.
> tcp_v4_error – 在SYN_SENT或SYN_RECV的情況下調用. ICMP處理程序調用的tcp_v4_error函數.
> tcp_time_wait – 調用套接字進入等待時間或等待等待2狀態 – 不是我們的情況.
> tcp_write_error – 超時時從幾個地方打來電話,超過重傳次數.這也可能是我們的懷疑.
現在,打開任何TCP FSM圖來檢查,在什么情況下我們的連接可以在SYN_SENT或SYN_RECV中.
在客戶端情況下,它可以只是SYN_SENT狀態,其中syn數據包正在傳輸,并且由于接收到拒絕(tcp-rst或icmp錯誤)或未收到回復而中止連接.
在服務器情況下,它可能只是SYN_RECV狀態(已經接收到syn并且已經發送了syn ack),并且由于接收到拒絕(某些地方拒絕了syn ack)或超過了回復等待超時(未收到確認)而中止連接.
現在您已了解更新此度量標準的原因,并可以檢查系統中可能的源代碼.在現代內核中,有一個強大的工具可以在內核級別進行故障排除.從布蘭登格雷格開始于this brief tutorial.
總結
以上是生活随笔為你收集整理的linux 跟踪链接 超时,Linux:跟踪netstat -s“连接尝试失败”的来源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核编译感想,Linux内核编
- 下一篇: linux修改vim配色,更改vim配色