【基礎】三報文握手與四報文揮手詳解及 Q&A

概念

三報文握手:客戶端與服務器通過傳輸三條報文建立連接

四報文揮手:客戶端與服務器通過傳輸四條報文斷開連接

標識符說明

先看下圖

圖中的 A1 - B2 表示報文代號(方便後續說明),一個箭頭表示一條報文,報文上的標識符依次爲:

SYN:表示建立連接標誌,發起建立連接請求時,其值爲1 ,即 SYN = 1

seq:表示報文序列,連續的報文 seq 值也會連續

ACK:表示確認標誌,ACK = 1 即表示收到報文

ack:表示確認編號,其值爲接收到報文的 seq + 1

FIN:表示斷開連接標誌,發起斷開連接請求時,其值爲 1,即 FIN = 1

詳細過程

三報文握手:

1、客戶端向服務器發送報文請求建立連接

2、服務器接受報文並向客戶端發送確認報文,表示自己已收到客戶端發送的請求連接報文

3、客戶端收到服務器的確認報文,向客戶端發送確認報文(確認自己已收到服務器發來的確認報文),連接建立

四報文揮手:

1、客戶端向服務器發送報文請求斷開連接

2、服務器接受報文並向客戶端發送確認報文,表示自己已收到客戶端發送的請求斷開報文

3、服務器向客戶端發送報文請求斷開連接

4、客戶端接受報文並向服務器發送確認報文,表示自己已收到服務器發送的請求斷開報文

Q&A

Q:圖 A 中,客戶端發送 A1 請求報文,服務器接受 A1 併發送 B1 確認報文,爲什麼之後客戶端還需要發送 A2 確認報文?

A:這種情況是爲了避免 A1 報文發生阻塞等因網絡波動導致的問題。若 A1 發生阻塞,服務器就接受不到請求報文,此時客戶端會第二次發送 A1 報文,發送成功服務器發送 B1 確認報文,若沒有 A2 這一步,則此時會建立連接,後續斷開連接,此時第一次阻塞的報文 A1 可能還會再次到達服務器(超時重傳機制),然後服務器再次發送 B1 報文,這樣就會建立一次不希望得到的連接。在有報文 A2 的情況下,客戶端接收到報文 B1 後,若 B1 是因爲阻塞的 A1 產生的,則客戶端會識別自己之前沒有發送建立請求(正常發送的請求已建立並結束,此時客戶端會認爲自己沒有發送建立連接請求),因此避免了不希望得到的連接建立。

 

Q:圖 B 中,A1 報文和 B1 報文完成後爲什麼還沒有斷開連接,還需要 B2 報文和 A2 報文?

A:首先,請求斷開的開的 A1 報文和確認收到請求的 B1 報文這個過程結束後斷開的爲客戶端→服務器的連接,這時服務器 → 客戶端的連接仍然存在,且仍會傳送信息(服務器的兩次報文 B1、B2 的 seq 序列不連續即可說明兩次報文中間傳送了其他報文),所以需要 B2 報文和 A2 報文這一過程以斷開服務器 → 客戶端的連接。

 

Q:圖 B 中,客戶端發送完報文 A2 爲什麼還需要等待一個 TIME-WAIT 過程?

A:這是因爲客戶端發送報文 A2 後,報文可能因阻塞等問題沒有到達服務器,這時服務器會認爲自己的 B2 報文沒有發送成功,便會再次向客戶端發送,如果沒有 TIME-WAIT 過程,客戶端因爲已經關閉就不會接收到後續的 B2 報文。正是因爲TIME-WAIT 過程,才避免了 A2 報文發送失敗的情況下服務器再次發送的 B2 報文會被客戶端接受,從而完成連接斷開的過程。

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