1、tcp提供了面向連線的可靠的位元組流服務,是一種端到端的傳輸層服務。它主要解決兩個應用程序之間傳輸的可靠、有序、無丟失和不重複問題。
與網路層不同的是,網路層提供主機之間的邏輯通訊,而傳輸層提供的是兩台主機之間的應用程序之間的邏輯通訊。
2、三次握手建立連線:
1)客戶機的
tcp
首先向伺服器的
tcp
傳送乙個連線請求報文段。這個特殊的報文段中不含
應用層資料,其首部中的
syn標誌位被置為
1 。另外,客戶機會隨機選擇乙個起始序號
seq =
x(連線請求報文不攜帶資料,但要消耗乙個序號)。
2)伺服器的
tcp
收到連線請求報文段後,如同意建立連線,就向客戶機發回確認,並為該
tcp
連線分配
tcp
快取和變數。在確認報文段中,
syn
和ack
位都被置為
1, 確認號字段的值為
x+ 1,
並且伺服器隨機產生起始序號
seq= y(
確認報文不攜帶資料,但也要消耗乙個序號)。確認
報文段同樣不包含應用層資料。
3)當客戶機收到確認報文段後,還要向伺服器給出確認,並且也要給該連線分配快取和變
量。這個報文段的
ack
標誌位被置
1, 序號欄位為
x+ 1,
確認號字段
ack=y+ 1
。該報文段可以攜帶
資料,若不攜帶資料則不消耗序號。
上述三步完成之後,tcp就成功的建立了連線,之後就可以傳輸應用層資料。tcp提供的是一種全雙工通訊,伺服器的資源是在第二次握手時分配的,客戶端的資源是在第三次握手時分配的。
3、為什麼是三次握手而不是兩次或四次?
如果a傳送的乙個連線請求在網路結點的時間滯留,以至於延誤到連線釋放的某個時間才到達b。b收到這個請求的報文段後,誤以為a又發出了一次新的請求連線,於是向a傳送確認報文段,同意建立連線。但是由於a並沒有發出新的請求連線,所以a不會理睬的確認也不會向b傳送資料。但b卻認為連線已經建立,一直等待a發來資料。b的資源就浪費了。
4、四次揮手釋放連線:
1)客戶端打算關閉連線時,向伺服器端傳送乙個連線釋放報文段,然後停止傳送資料。報文段中fin=1,代表資料傳送完畢,其序列號seq=u,它等於前面已傳送資料最後乙個位元組的seq+1。
2)服務端收到客戶端的釋放報文段後發出確認,確認號ack=u+1,服務端自己的確認報文段的序列號為v。至此,客戶端到伺服器這個方向上的連線就釋放了,tcp連線處於半關閉狀態。但是伺服器仍然可以向客戶端傳送資料。
3)如果伺服器已經沒有要傳送到客戶端的資料,伺服器就傳送釋放報文段fin=1。
4)客戶端在收到伺服器的釋放報文段後,需要確認。在確認報文段中ack = v+1。此時,tcp連線還未釋放,經過2msl後連線才關閉。
5、為什麼是四次揮手?
因為tcp的通訊是全雙工通訊。釋放連線需要兩端都關閉連線才算是真正斷開連線。
要實現可靠的連線關閉,客戶端傳送結束報文fin,收到伺服器端的確認後,客戶端到伺服器的連線關閉,客戶端不能再向伺服器傳送資料。但是伺服器還可以向客戶端傳送資料,客戶端還可以接收資料。只有當伺服器傳送結束報文fin,收到客戶端的確認後,才真正斷開連線。
tcp 四次揮手 TCP的三次握手和四次揮手
三次握手 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn y 即syn ack包,此時伺服器進入syn recv狀態 第三次握手 客戶端收到伺服...
TCP三次握手和四次揮手
一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...
TCP三次握手和四次揮手
三次握手 四次揮手 需四次揮手原因 由於tcp的半關閉特性,tcp連線時雙全工 即資料在兩個方向上能同時傳遞 因此,每個方向必須單獨的進行關閉。這個原則就是 當一方完成它的資料傳送任務後就能傳送乙個fin來終止這個方向上的連線。當一端收到乙個fin後,它必須通知應用層另一端已經終止了那個方向的資料傳...