TCP三次握手四次揮手的原因

2021-10-18 04:42:37 字數 1290 閱讀 7923

1,引言

tcp三次握手,四次揮手的具體過程我就不講了吧,很多高瀏覽量的博文都講爛了,我主要是講理解和一些重難點,雖然文字很長,但是看完了肯定有收穫。

2,正文

首先大家最關心的,為什麼要三次握手

眾所周知,網路層是不可靠的盡力交付的,他不管你送沒送達,這就意味著有一種可能性,

a向b傳送乙個syn請求建立連線(暫且叫他s1),結果在某乙個節點堵住了,延時了一小會,以至於超時了,這個時候,a重新向b傳送乙個syn(叫他s2)請求,然後s2的連線已經建立起來了之後,之前傳送的s1這個時候終於從經過層層堵塞又傳到了b,這個時候就很尷尬,a與b已經建立了連線了,你這個本應該掛掉的s1又活過來了。這個時候如果說是兩次握手就能建立tcp連線,那就意味著,這個s1也能建立乙個鏈結,這個連線一旦建立起來,由於沒有第三次握手,b也不知道這個鏈路是不是有用,a認為s1已經沒了,也不會給b任何應答,這個被s1建立起來的連線就會浪費資源。而三次握手的好處就在這個時候體現出來了,:如果是三次握手,那麼b給a傳送確認收到s1一直得不到a的應答(因為a知道s1已經沒了,重傳了,真正有用的是s2),這個浪費資源的鏈路就建立不起來。

總的來說,就是防止出現由於網路層的本身缺陷建立不必要的連線。

為什麼要四次揮手

tcp是面向連線的,全雙工的,全雙工意味著其實有兩條鏈路,一條是a給b發的鏈路,一條是b給a發的鏈路,

所以四次揮手分為兩個部分,先是a乙個fin申請斷掉a到b的鏈路,b確認收到之後,b在這個時候還可以繼續給a發,因為只是斷掉了a-》b,b-》a的鏈路還在,b這個時候通知應用程序(因為tcp傳輸實際上是兩個程序之間的資料傳輸)趕緊把要發給a的資料發完,發完之後,b再傳送b-》a的fin斷開請求。這就是為什麼要四次原因了**(要斷來,去兩條鏈路)**

ack:有關ack的話,大寫ack是tcp報文的乙個首部的乙個位,置1意味著確認好有效,就是乙個標誌而已,小寫ack是確認號,比如ack=x有兩個方面的解讀,①;我收到了序列號為x-1的報文,②:我想要序列號為x的報文。序列號不是亂給的,是傳送了多少就是多少。

TCP三次握手四次揮手的原因

連線建立階段,三次握手 為什麼不是一次?因為tcp是有鏈結的,就像打 a撥號給b,要b選擇接聽以後才能進行通訊,故第二次握手是傳送b同意的訊號。為什麼不是兩次?因為網路傳輸是不可靠的,存在b發回的確認幀丟失的情況。如果這個包丟失了,那麼a會認為和b沒連上,超時重傳乙個連線訊號 而b,則因認為a已經和...

TCP三次握手 四次揮手

tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...

TCP三次握手 四次揮手

服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...