前言:
如果你說你懂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端還得終止主動向你發送數據,并等待你的確認。其實,說白了就是保證雙方的一個合約的完整執行!