關於 TIME_WAIT 參考: http://blog.chinaunix.net/u/5591/showart_363959.html

至於你遇到的情況我想應該是 TCP 的 3-way handshaking 的關係吧~
你可以作個實驗, 就是用 telnet 連到某個 bbs 或是什麼的, 然後強制把那個 telnet 程式砍掉, 再用 netstat 看會發現剛剛那個 connection 的 state 是 TIME_WAIT,
ex:
Proto Local Address Foreign Address State
TCP 61.228.52.XX:3256 140.114.87.XX:23 TIME_WAIT
而且這個狀態會持續一陣子才會不見, 這就是因為你強制 kill 那個 process, 所以沒有真正的完成 terminate 的 step, OS 會一直等到 timeout 之後才把狀態還原. 這種情況發生在 client 的時候比較沒差, 因為 OS 每次都會選一個沒有被使用的 port 去連結, 但是如果發生在 server 的時候, 由於 service process 突然被砍掉, 原有的連線還沒完成 release 的動作, OS 沒有收到 terminate 的 ack, 所以就會認為那個 port 還在使用中, 直到 timeout 才會被釋放~

至於作法說不定 http://leftleg.hzpub.com/read.php?642 可行吧

狀態:描述
ESTABLISHED:正常數据傳輸狀態 / 已建立連線的狀態
SYN_SENT:應用已經開始,打開一個連接 / 發出主動連線 (SYN 標誌) 的連線封包
SYN_RECV:一個連接請求已經到達,等待确認 / 接收到一個要求連線的主動連線封包
FIN_WAIT1:應用說它已經完成 / 該插槽服務(socket)已中斷,該連線正在斷線當中
FIN_WAIT2:另一邊已同意釋放 / 該連線已掛斷,但正在等待對方主機回應斷線確認的封包
TIME_WAIT:另一邊已初始化一個釋放 / 該連線已掛斷,但 socket 還在網路上等待結束
CLOSED:無連接是活動的或正在進行
CLOSE_WAIT
LAST_ACK:等待所有分組死掉
LISTEN:服務器在等待進入呼叫 / 通常用在服務的監聽 port !可使用『 -l 』參數查閱
CLOSING:兩邊同時嘗試關閉
UNKNOWN :

net.ipv4.tcp_syncookies = 1  表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。

或許再補習一下: http://ssorc.tw/?p=40

M$的方式: http://www.pctools.com/guides/registry/detail/878/

Registry Settings
System Key: [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters]
Value Name: TcpTimedWaitDelay
Data Type: REG_DWORD (DWORD Value)
Value Data: 30-300 seconds (decimal)
最後修改日期: 2007 年 08 月 22 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。