Java網絡原理之鏈接管理:TCP三次握手和TCP四次揮手

問題:TCP爲何是三次握手?而不是兩次或者四次?安全

TCP做爲種可靠傳輸控制協議,其核心思想:既要保證數據可靠傳輸,又要提升傳輸的效率,而用三次偏偏能夠知足以上兩方面的需求!ide

TCP可靠傳輸的精髓: TCP鏈接的 發送方A,由操做系統動態隨機選取-個32位長的序列號(InitialSequence Number),假設A的初始序列號爲1000,以該序列號爲原點,對本身將要發送的每一個字節的數據進行編號,1001, 1002, 100... 並把本身的初始序列號ISN告訴B,讓B有一個思想準備,什麼樣編號的數據是合法的,什麼編號是非法的,好比編號900就是非法的,同時B還能夠對A每個編號的字節數據進行確認。 若是A收到B確認編號爲2001,則意味着字節編號爲1001-2000,共1000個字節已經安全到達。

  同理B也是相似的操做,假設B的初始序列號ISN爲2000, 以該序列號爲原點,對本身將要發送的每一個字節的數據進行編號,2001. 2002, 200....並把本身的初始序列號ISN告訴A,以便A能夠確認B發送的每一 個字節。若是B收到A確認編號爲4001,則意味着字節編號爲2001-4000共2000個字節已經安全到達。

  一句話歸納,TCP鏈接握手, 握的是啥?
通訊雙方數據原點的序列號。(ISN)

TCP爲何是四次揮手?(三次揮手/同時揮手)

由於TCP是全雙工通訊的
(1)第一次揮手
所以當主動方發送斷開鏈接的請求(即FIN報文)給被動方時,僅僅表明主動方不會再發送數據報文了,但主動方仍能夠接收數據報文。
(2)第二次揮手
被動方此時有可能還有相應的數據報文須要發送,所以須要先發送ACK報文,告知主動方「我知道你想斷開鏈接的請求了」。這樣主動方便不會由於沒有收到應答而繼續發送斷開鏈接的請求(即FIN報文)。
(3)第三次揮手
被動方在處理完數據報文後,便發送給主動方FIN報文;這樣能夠保證數據通訊正常可靠地完成。發送完FIN報文後,被動方進入LAST_ACK階段(超時等待)。
(4)第四揮手
若是主動方及時發送ACK報文進行鏈接中斷的確認,這時被動方就直接釋放鏈接,進入可用狀態。操作系統

相關文章
相關標籤/搜索