1. 程式人生 > >為什麼需要3次握手,4次揮手

為什麼需要3次握手,4次揮手

前言:

  如果你說你懂IT,你懂計算機網路,那麼你會怎麼解釋“三次握手,四次揮手”?

----------------

1.TCP報文段首部格式:

2.TCP建立連線圖

--------------------------------------------

符號說明

seq:"sequance"序列號
ack:"acknowledge"確認號
SYN:"synchronize"請求同步標誌
ACK:"acknowledge"確認標誌"
FIN:"Finally"結束標誌

 

為什麼收到Server端的確認之後,Client還需要進行第三次“握手”呢?


  在只有兩次“握手”的情形下,假設Client想跟Server建立連線,但是卻因為中途連線請求的資料報丟失了,故Client端不得不重新發送一遍;這個時候Server端僅收到一個連線請求,因此可以正常的建立連線。但是,有時候Client端重新發送請求不是因為資料報丟失了,而是有可能資料傳輸過程因為網路併發量很大在某結點被阻塞了,這種情形下Server端將先後收到2次請求,並持續等待兩個Client請求向他傳送資料...問題就在這裡,Cient端實際上只有一次請求,而Server端卻有2個響應,極端的情況可能由於Client端多次重新發送請求資料而導致Server端最後建立了N多個響應在等待,因而造成極大的資源浪費!所以,“三次握手”很有必要!

3.TCP斷開連線圖

---------------------------------------------------------------

為什麼需要“四次揮手”?
  試想一下,假如現在你是客戶端你想斷開跟Server的所有連線該怎麼做?第一步,你自己先停止向Server端傳送資料,並等待Server的回覆。但事情還沒有完,雖然你自身不往Server傳送資料了,但是因為你們之前已經建立好平等的連線了,所以此時他也有主動權向你傳送資料;故Server端還得終止主動向你傳送資料,並等待你的確認。其實,說白了就是保證雙方的一個合約的完整執行!