三次握手(three-way handshaking)blog
1.背景:TCP位於傳輸層,做用是提供可靠的字節流服務,爲了準確無誤地將數據送達目的地,TCP協議採納三次握手策略。three
2.原理:開發
1)發送端首先發送一個帶有SYN(synchronize)標誌地數據包給接收方。io
2)接收方接收後,回傳一個帶有SYN/ACK標誌的數據包傳遞確認信息,表示我收到了。class
3)最後,發送方再回傳一個帶有ACK標誌的數據包,表明我知道了,表示’握手‘結束。原理
通俗的說法im
1)Client:嘿,李四,是我,聽到了嗎?通信
2)Server:我聽到了,你能聽到個人嗎?數據
3)Client:好的,咱們互相都能聽到對方的話,咱們的通訊能夠開始了。協議
四次揮手(Four-Way-Wavehand)
1.意義:當被動方收到主動方的FIN報文通知時,它僅僅表示主動方沒有數據再發送給被動方了。但未必被動方全部的數據都完整的發送給了主動方,因此被動方不會立刻關閉SOCKET,它可能還須要發送一些數據給主動方後,再發送FIN報文給主動方,告訴主動方贊成關閉鏈接,因此這裏的ACK報文和FIN報文多數狀況下都是分開發送的。
2.原理:
1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
2)第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
3)第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
4)第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手
通俗的說法
1)Client:我全部東西都說完了
2)Server:我已經所有聽到了,可是等等我,我還沒說完
3)Server:好了,我已經說完了
4)Client:好的,那咱們的通訊結束