關於TCP/IP的狀態

作爲一個網絡程序員,我們經常會接觸到ICP/IP協議,我們也知道其TCP/IP協議的重要性,不管是網路安全還是程序連接我們也經常會碰到些問題,於是自己梳理下,做個記錄。
抓包工具推薦IRIS可以抓TCP/IP/UDP/HTTP等數據包,個人覺得很強大。
查看機器TCP/IP連接表 netstat -n 能看到當前TCP/IP連接情況,以及狀態。
netstat -an 可以查看非激活和激活的TCP/IP狀態
關於TCP/IP三次握手和狀態可以觀看本圖片
[img]http://dl.iteye.com/upload/attachment/272540/913e2cc5-886c-343d-a7c2-b85e35acb6b2.jpg[/img]
我們在使用netstat -n時就能看到當前端口的狀態
狀態轉換圖中狀態的描述:
CLOSED:無連接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。 第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認; 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態; 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與服務器開始傳送數據,也就是ESTABLISHED狀態,我們每次netstat -a 時看到最多的狀態。
在上述過程中,還有一些重要的概念: 未連接隊列:在三次握手協議中,服務器維護一個未連接隊列,該隊列爲每個客戶端的SYN包(syn=j)開設一個條目,該條目表明服務器已收到SYN包,並向客戶發出確認,正在等待客戶的確認包。這些條目所標識的連接在服務器處於Syn_RECV狀態,當服務器收到客戶的確認包時,刪除該條目,服務器進入ESTABLISHED狀態。
其中SYN,ASK是服務器客服端唯一標識使通信不被串掉
當然我們三次握手時可能會timeout也就是會產生如此狀態,這對我們查問題比較有用SYN_SENT發送信號----FIN ---ITMED_WAIT --重試---close
到這裏我們來理解下DOS攻擊用TCP/IP語言我們可以稱做SYN渾水,黑客一直去給服務器發SYN_SENT去握手,最後一直不去建立連接導致服務器一直在FIN ---ITMED_WAIT等待握手,並嘗試N次連接如果期間不斷髮送就會造成很多連接導致服務器癱瘓。所以配置防火牆時要注意這些狀況。注意:windows防火牆我們開放端口是要選擇TCP還是UDP開放,如果選擇錯了連接也是無法進行的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章