TCP協議

TCP段格式:

wKioL1eklOmCfnI0AAEA-fwAM14011.png


主要介紹下U6個標誌位:

URG(緊急位):緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。TCP的緊急方式是發送端向另一端發送緊急數據的一種方式。緊急指針指向包含數據段的某個字節(數據從第一字節到指針所指字節就是緊急數據,不進入接收緩衝就直接交到上層進程,餘下的數據要進入緩衝)。發送進程將緊急位URG置爲1,表示該報文段的優先級高,需要插到報文段的最前面,儘快發送。


ACK(確認位):按照TCP的規定,在TCP連接建立之後發送的所有報文段的ACK位都要置1.


PSH(急迫位):在一個交互程序中,當客戶發送一個命令給服務器時,它設置PUS標誌並停下來等待服務器的響應。通過允許客戶應用程序通知TCP設置PSH標誌,客戶進程通知TCP在向服務器發送一個報文段時不要因等待額外數據而使已提交數據在緩存中滯留。類似地,當服務器的T C P接收到一個設置了PSH標誌的報文段時,它需要立即將這些數據(包括以前存中滯留的數據)遞交給服務器進程而不能等待判斷是否還會有額外的數據到達。 PSH=1,只對接收方的接收緩衝區起作用,發送方通過使用PSH位來通知接收方將所有收到的數據立即提交給服務器進程,而不需要等待額外數據(將緩存填滿)而讓數據在緩存中停留!這裏所說的數據包括與此PSH包一起傳輸的數據以及之前就爲該進程傳輸過來的數據(滯留在緩存中的數據)。


RST(復位位):復位RST位置1,有兩種含義:一是因爲主機崩潰等原因造成TCP連接出錯,需要立即釋放連接,然後再重建連接,二是拒絕一個非法TCP報文或拒接釋放一個連接。


SYN(同步位):同步位SYN在連接建立時來同步序號。如,當SYN=1,ACK=0時,表示這是一個連接建立請求報文,同意建立連接的響應報文的SYN=1,ACK=1.


FIN(終止位):終止位用來釋放一個TCP協議。FIN=1表示發送端的報文段發送完畢,請求釋放TCP連接。


TCP建立:(三次握手)

在建立連接時,需要一方主動發起請求


第一次握手:最初的client TCP進程處於close(關閉)狀態。當client向server準備發起一次TCP連接,進入SYN-SEND(準備發送)狀態,它首先向處於LISTEN(收聽)狀態的server TCP進程發送第一個控制位SYN=1的"連接建立請求報文"。

第二次握手:當server在接收到"連接建立請求報文"之後,如果同意建立連接,則向client發送"連接建立請求確認報文"。此時server進入SYN-RCVD(準備接收)狀態。當client收到server確認請求建立連接時,只能說明client向server發出的請求建立連接,server已收到。

第三次握手:當client收到server發來的"連接建立請求確認報文"時,並向server發送報文,該報文是對"連接建立請求確認報文"的一個確認。此時,client進入"ESTABLISHED"(已建立連接)狀態。服務器在收到確認報文之後進入"ESTABLISHED"(已建立連接)狀態。


爲什麼不能是二次握手或者四次,五次握手?

client發送的第一個請求連接報文段並沒有丟失,而是因爲網絡的問題滯留了,而是在連接已經釋放後的某個點到達server,而server以爲是client發送的一個請求連接報文,於是向client發送一個確認報文,server認爲連接已經建立,而client並沒有向server發送請求建立連接,就不會理會server發來的確認。而server則在一直等待client發送報文,將會引起死鎖。若採用三次握手,就上述情況,client不會向server的確認發出確認,當server沒有收到client的確認,就認爲client並沒有要求建立連接。


TCP建立連接時,四次,五次都可以,但是三次比較簡潔。


TCP釋放連接(四次揮手)

在釋放連接時,需要client和server都可以主動提出連接釋放請求。


以client主動提出請求的連接釋放的"四次揮手"的過程。


第一次揮手:當client準備結束一次數據傳輸,主動提出釋放TCP連接,進入"FIN-WAIT-1"(釋放等待-1)狀態,client向server發送第一個控制位FIN=1的"連接釋放請求報文",提出連接釋放請求,停止發送數據。


第二次揮手:當server在接收到"連接釋放請求報文",之後,需要向client發回"連接釋放請求確認報文" 表示對第一個連接釋放請求報文的確認。


     此時,client到server的連接已經被釋放,client不能向server發送數據,但是server到client的連接並沒有釋放。它還可以繼續發送。這種狀態稱爲"半關閉"狀態。這種狀態將持續一段時間。client在收到server發送的ACK報文之後進入"FIN-WAIT-2"狀態,server進入"CLOSE-WAIT"狀態


第三次揮手:server的高層應用程序已經沒有數據需要發送時,它會通知TCP可以釋放連接,這時server向client發送"連接釋放請求報文"。server經過"LASY-ACK"狀態之後轉回到"LISTEN"(收聽)狀態。


第四次揮手:當client收到FIN報文之後,向服務器發送"連接釋放請求確認報文"報文,表示對server"連接釋放請求報文"的確認。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章