25. TCP 三次/四次握手

  1. TCP 三次/四次握手

TCP 建立連接 - 3 次握手

TCP-3次握手

建立過程:

  1. client 發送 SYN=1, seq=x: SYN=1 建立連接的標識,seq=x 是客戶端初始化的序號
  2. server 發送 SYN=1, seq=y, ACK=1, ack=x+1: seq=y 服務端初始化的序號,ACK=1 確認字符,ack=x+1 確任序號(=clientSeq+1)
  3. client 發送 ACK=1, ack=y+1, seq=x+1: ACK=1 確認字符,ack=y+1 確任序號(=serverSeq+1)

Note:

Q:爲什麼要 3 次握手,而不是 2 次握手?

A:3 次握手能夠防止 client 發送的失效連接被 server 響應,而重新建立連接,避免資源的浪費。通過 server 發送的 ack=clientSeq+1,client 可以校驗 clientSeq,從而確認是否發送第三次握手。

TCP 釋放連接 - 4 次握手

TCP-4次連接

釋放過程:

  1. client send FIN=1, seq=uFIN=1 關閉連接標識,seq=u client 初始化序列號
  2. server send ACK=1, seq=v, ack=u+1ACK 確認字符,ack=u+1 確認序號=clientSeq+1,seq=v server 端初始化序號
  3. client 端雖然不再發送數據了,但是可以接收數據。server 端此時仍可以向 client 傳輸數據
  4. server send FIN=1, ACK=1, seq=w, ack=u+1FIN=1 關閉連接標識,ACK=1 確認字符,ack=u+1 確認序號=clientSeq+1,seq=w server 發送序號
  5. client send ACK=1, seq=u+1, ack=w=1ACK=1 確認字符,ack=w+1確認序號=serverSeq+1,seq=u+1 client 端發送序號

Note:

  • Q:爲什麼關閉連接需要 4 次握手,而建立連接只需要 3 次?

    A:建立連接時,標識(SYN) 和 ACK 是一起發送的,而關閉連接時,標識(FIN) 和 ACK 是分開發送的。分開發送的原因是,雖然 client 端表明其準備關閉連接了,只是表明 client 不再發送數據,但其仍可以接收數據。server 端仍可以在確認收到 client 端關閉連接的消息後,將未發送完的數據發送給 client 端,之後再發送關閉連接標識(FIN)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章