三次握手three-wayhandshake
--**liucaixia
乙個虛擬連線的建立是通過三次握手來實現的
1. (client) –> [syn] –> (server)
假如client和server通訊. 當client要和server通訊時,client首先向server發乙個syn(synchronize) 標記的包,告訴server請求建立連線.
注意: 乙個 syn包就是僅syn標記設為1的tcp包(參見tcp包頭resources). 認識到這點很重要,只有當server收到client發來的syn包,才可建立連線,除此之外別無他法。因此,如果你的防火牆丟棄所有的發往外網介面的syn包,那麼你將不 能讓外部任何主機主動建立連線。
如下圖紅框,三次握手的首次syn,source為我的教學平台所在的ip:192.168.102.64 destination為平台的ip:192.168.102.241
2. (client)
接著,server收到來自client發來的syn包後,會發乙個對syn包的確認包(syn/ack)給client,表示對第乙個syn包的確認,並繼續握手操作.
注意: syn/ack包是僅syn 和 ack 標記為1的包.
如下圖紅框,三次握手的服務端給客戶端的響應syn,ack,source為平台的ip:192.168.102.241,destination為我的教學平台所在的ip:192.168.102.64
3. (client) –> [ack] –> (server)
client收到來自server的syn/ack 包,client會再向server發乙個確認包(ack),通知server連線已建立。至此,三次握手完成,乙個tcp連線完成。
note: ack包就是僅ack 標記設為1的tcp包. 需要注意的是當三此握手完成、連線建立以後,tcp連線的每個包都會設定ack位。
如下圖紅框,三次握手的最後確認ack,source為我的教學平台所在的ip:192.168.102.64 destination為平台的ip:192.168.102.241
到此為止,客戶端完成了與服務端進行資料傳輸的準備工作,類似人們見面後先進行握手後,接下來就進行正題交流了。
四次握手four-way handshake
四次握手用來關閉已建立的tcp連線,當客戶端和服務端完成了資料報的傳輸後,又客戶端或者服務端主動發起握手。來進行連線的斷開。
1. (client) –> ack/fin –>(server)
2. (client)
3. (client)
4. (client) –> ack –>(server)
如下圖藍框為四次握手,首先的發起放時為平台,ip:192.168.102.241,destination為我的教學平台所在的ip:192.168.102.64。接下來客戶端進行了ack響應 ,緊接著自己也發了乙個結束包。服務端對結束包進行響應。
注意: 由於tcp連線是雙向連線, 因此關閉連線需要在兩個方向上做。ack/fin 包(ack 和fin 標記設為1)通常被認為是fin(終結)包.然而, 由於連線還沒有關閉, fin包總是打上ack標記. 沒有ack標記而僅有fin標記的包不是合法的包,並且通常被認為是惡意的。
連線復位resetting a connection
四次握手不是關閉tcp連線的唯一方法. 有時,如果主機需要盡快關閉連線(或連線超時,埠或主機不可達),rst (reset)包將被傳送. 注意在,由於rst包不是tcp連線中的必須部分, 可以只傳送rst包(即不帶ack標記). 但在正常的tcp連線中rst包可以帶ack確認標記
到目前為止,你已經看到了 syn, ack, fin, 和rst 標記. 另外,還有psh (push) 和urg(urgent)標記.
最常見的非法組合是syn/fin 包. 注意:由於 syn包是用來初始化連線的, 它不可能和 fin和rst標記一起出現. 這也是乙個惡意攻擊.
由於現在大多數防火牆已知 syn/fin 包, 別的一些組合,例如syn/fin/psh, syn/fin/rst, syn/fin/rst/psh。很明顯,當網路中出現這種包時,你的網路肯定受到攻擊了。
別的已知的非法包有fin (無ack標記)和」null」包。如同早先討論的,由於ack/fin包的出現是為了關閉乙個tcp連線,那麼正常的fin包總是帶有ack 標記。」null」包就是沒有任何tcp標記的包(urg,ack,psh,rst,syn,fin都為0)。
到目前為止,正常的網路活動下,tcp協議棧不可能產生帶有上面提到的任何一種標記組合的tcp包。當你發現這些不正常的包時,肯定有人對你的網路不懷好意。
抓報分析問題例項:
問題:夢幻西遊在網維大師無盤上容易掉線的問題
當時捕捉到夢幻西遊掉線時的資料報是這樣的。注意下圖中的紅色資料,123.58.184.241是夢幻西遊的伺服器,而192.168.1.41是玩夢幻西遊的客戶機,在掉線時,發現是先有夢幻西遊的伺服器向客戶機傳送乙個[fin,ack]資料報,根據上面的解釋,fin標記的資料報是代表要斷開連線的意思,而接著客戶機又回給伺服器乙個確認斷開鏈結包。當看到這個抓包資料時,就意識到,大家說的在網維大師系統虛擬盤上夢幻愛掉線的問題,並非普通的網路問題,因為通過資料報的資訊來看,是夢幻伺服器主動要求斷開鏈結,產生這個情況無非是以下幾個原因:
1、伺服器發現客戶端非法,比如有外掛程式什麼的,踢掉了客戶機;
2、伺服器壓力大,踢掉了客戶機;
3、總之不是客戶端問題導致的掉線;
那麼既然結論是如此,為什麼會有在網維大師系統虛擬盤上容易出現夢幻掉線問題呢?原因是由於網維大師系統虛擬盤是模擬真實硬碟方式來實現的,而在模擬過程中,將硬碟的序列號設定為固定過的osdiy888了,而夢幻西遊剛好後識別客戶機硬碟資訊,發現大量客戶端的硬碟序列號都是一樣的,就認為是作-bi或者使用掛機外-掛了,結果就導致隨機被伺服器踢下線的情況發生,後來我們將硬碟序列號設定為空,則沒再出現該問題。這個問題在未來的新版本中會解決掉。
tcp連線檢測及重連
public connectfuture niosocketconnector.connect socketaddress remoteaddress,mina的客戶端tcp連線大致方法。該方法返回connectfuture,用以判斷連線成功與否等。connectfuture.awaituninte...
wireshark抓包分析tcp連線與斷開
其實對於網路通訊的學習,最好還是能夠自己抓到包詳細地看一下,不然只單單通過文字和圖的描述印象不夠深刻。本文通過實際的抓包操作來看一下tcp的連線與斷開是怎樣的。安裝完成後開啟,會看到如下頁面 下面這兩個乙太網指的是你電腦上不同的網絡卡,選擇乙個可以跑的網絡卡,雙擊。接著開啟乙個瀏覽器,建議選擇無痕模...
libevent非同步TCP連線,判斷是否連線成功
libevent非同步tcp連線伺服器的過程 1 建立nonblock的socket,2 呼叫connect連線伺服器,檢查返回值,判斷是否是阻塞了,如果是,就設定等待 ev write事件 event set m evsocket,m isockfd,ev write,onconnect,this...