上面就是tcp協議頭部的格式,它實在太重要了,是理解其它內容的基礎,下面就將每個欄位的資訊都詳細的說明一下。
urg:此標誌表示tcp包的緊急指標域(後面馬上就要說到)有效,用來保證tcp連線不被中斷,並且督促中間層裝置要盡快處理這些資料;
ack:此標誌表示應答域有效,就是說前面所說的tcp應答號將會包含在tcp資料報中;有兩個取值:0和1,為1的時候表示應答域有效,反之為0;
psh:這個標誌位表示push操作。所謂push操作就是指在資料報到達接收端以後,立即傳送給應用程式,而不是在緩衝區中排隊;
rst:這個標誌表示連線復位請求。用來復位那些產生錯誤的連線,也被用來拒絕錯誤和非法的資料報;
syn:表示同步序號,用來建立連線。syn標誌位和ack標誌位搭配使用,當連線請求的時候,syn=1,ack=0;連線被響應的時候,syn=1,ack=1;這個標誌的資料報經常被用來進行埠掃瞄。掃瞄者傳送乙個只有syn的資料報,如果對方主機響應了乙個資料報回來 ,就表明這台主機存在這個埠;但是由於這種掃瞄方式只是進行tcp三次握手的第一次握手,因此這種掃瞄的成功表示被掃瞄的機器不很安全,一台安全的主機將會強制要求乙個連線嚴格的進行tcp的三次握手;
fin: 表示傳送端已經達到資料末尾,也就是說雙方的資料傳送完成,沒有資料可以傳送了,傳送fin標誌位的tcp資料報後,連線將被斷開。這個標誌的資料報也經常被用於進行埠掃瞄。
暫時需要的資訊有:
ack : tcp協議規定,只有ack=1時有效,也規定連線建立後所有傳送的報文的ack必須為1
syn(synchronization) : 在連線建立時用來同步序號。當syn=1而ack=0時,表明這是乙個連線請求報文。對方若同意建立連線,則應在響應報文中使syn=1和ack=1. 因此, syn置1就表示這是乙個連線請求或連線接受報文。
fin (finis)即完,終結的意思, 用來釋放乙個連線。當 fin = 1 時,表明此報文段的傳送方的資料已經傳送完畢,並要求釋放連線
多麼清晰的一張圖,當然了,也不是我畫的,我也只是引用過來說明問題了。
第一次握手:
建立連線。首先由client發出請求連線即 syn=1 ack=0 , tcp規定syn=1時不能攜帶資料,但要消耗乙個序號,因此宣告自己的序號是 seq=x。客戶端進入syn_send狀態,等待伺服器的確認;
第二次握手:
server 進行回覆確認。伺服器收到客戶端的syn報文段,需要進行確認,ack=x+1;同時,自己還要傳送syn請求資訊,即 syn=1 ack=1 seq=y, ack=x+1, 此時伺服器進入syn_recv狀態;
第三次握手:
client 再進行一次確認,但不用syn 了,這時即為 ack=1, seq=x+1, ack=y+1。這個報文段傳送完畢以後,客戶端和伺服器端都進入established狀態,完成tcp三次握手。
為什麼是三次握手而不是兩次?
當客戶端和伺服器通過三次握手建立了tcp連線以後,當資料傳送完畢,肯定是要斷開tcp連線的啊。那對於tcp的斷開連線,這裡就有了神秘的「四次分手」。
第一次分手:
當客戶a(可以使客戶端,也可以是伺服器端)沒有東西要傳送時就要斷開連線,a會傳送乙個報文(沒有資料),其中 fin =1,seq=u。此時,a進入fin_wait_1狀態;這表示a沒有資料要傳送給b了;
第二次分手:
伺服器b收到a傳送的fin報文段,會給a乙個信兒,即ack=1,ack=u+1,seq=v;此時a進入fin_wait_2狀態,等待b請求釋放連線。
第三次分手:
b向a請求釋放鏈結,也是fin=1 , 並且 ack=1,seq=w,ack = u+1,同時b進入last_ack狀態;
第四次分手:
a收到b傳送的fin報文段,回覆乙個確認資訊,即ack=1,seq=u+1,ack=w+1,並進入 time_wait 狀態。b收到a的ack報文段以後,就關閉連線;此時,a等待2msl後依然沒有收到回覆,則證明server端已正常關閉,那麼,a也可以關閉連線了。
為什麼要4次呢?
因為tcp是全雙工模式,這就意味著,當a發出fin報文段時,只是表示a已經沒有資料要傳送了,但是還可以接受b發來的資料。當b返回ack報文時,表示已經知道a沒有資料傳送了,但此時b仍傳送資料給a。所以需要傳送fin給a,這是就表示b也沒有資料要傳送給a了,之後彼此就會愉快的分手。
如果要正確的理解四次分手的原理,就需要了解四次分手過程中的狀態變化。
TCP三次握手 四次揮手
tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...
TCP三次握手 四次揮手
服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...
TCP三次握手四次揮手
tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...