一條視頻講清楚TCP協(xié)議與UDP協(xié)議-什么是三次握手與四次揮手

TCP、UDP都屬于傳輸層,是傳輸協(xié)議
TCP基于連接,UDP基于非連接
TCP:在不穩(wěn)定的信道上建立穩(wěn)定的連接
三次握手:
建立連接的過程:
- 當客戶端向服務端發(fā)起連接時,會先發(fā)一包syn包連接請求數據,進行詢問,能否建立連接。
- 如果服務端同意連接,則回復一包syn+ack包。
- 客戶端收到之后回復一包ack包,連接建立
synchronization、acknowledgement
為什么要三次握手而不是兩次握手:
服務端回復完syn+ack之后就建立連接,這是為了防止因為已失效的請求報文,突然又傳到服務器引起錯誤。
兩次握手建立連接會出現(xiàn)問題:
客戶端向服務端發(fā)送了一個syn包,來請求建立連接,因為某些未知原因,并沒有到達服務器,在中間某個網絡節(jié)點產生了滯留。
為了建立連接客戶端會重發(fā)syn包。這次的數據包正常送達,服務端回復syn+ack之后建立了連接。
但是第一包數據阻塞的網點節(jié)點,突然恢復,第一包syn包又送達到服務端,這時服務端會誤認為是客戶端又發(fā)起了一個新的連接,從而在兩次握手之后,進入等待數據狀態(tài),服務端認為是兩個連接,而客戶端認為是一個連接,造成了狀態(tài)不一致。
如果在三次握手的情況下,服務端收不到最后的ack包,自然不會認為連接建立成功,所有三次握手本質上來說,就是為了保證在不可靠的網絡鏈路中,建立起可靠的連接。如syn包阻塞重發(fā)會導致服務器創(chuàng)建多重連接,而客戶端只接受唯一連接。從而造成狀態(tài)不一致的情況。
傳輸過程:
丟失某些段,可以要求發(fā)送端重新發(fā)送,
不區(qū)分客戶端和服務端,tcp連接是全雙工,均采用以上機制
四次揮手:
處于連接狀態(tài)的客戶端和服務端,都可以發(fā)起關閉連接請求,此時需要四次揮手來進行連接關閉。
假如客戶端發(fā)起關閉請求
他需要向服務端發(fā)起一包fin包,表示要關閉連接,自己進入終止等待1狀態(tài),這是第一次揮手。
服務端收到fin包,發(fā)送一包ack包,表示自己進入了關閉等待狀態(tài),客戶端進入終止等待2狀態(tài),這是第二次揮手
服務端此時還可以發(fā)送未發(fā)送的數據,而客戶端還可以接收數據,待服務端發(fā)送完數據之后,發(fā)送一包fin包,進入最后確認狀態(tài)。這是第三次揮手。
客戶端收到之后回復ack包,進入超時等待狀態(tài),經過超時時間后關閉連接,而服務端收到ack包后,立即關閉連接。這是第四次揮手。
為什么客戶端需要等待超時時間?
這是為了保證服務端已收到ack包。
- 因為假設客戶端發(fā)送完最后一包ack包后就釋放了連接,一旦ack包在網絡中丟失,服務端將一直停留在最后確認狀態(tài)。
- 如果客戶端發(fā)送最后一包ack包后,等待一段時間,這時服務端因為沒有收到ack包,會重發(fā)fin包,客戶端會響應這個fin包,重發(fā)ack包并刷新超時時間。
- 保證在不可靠的網絡鏈路中,進行可靠的連接斷開確認。
為什么要四次揮手?
- 由于 TCP 的半關閉(half-close)特性,任何一方都可以在數據傳送結束后,發(fā)出連接關閉的通知,待對方確認后進入半關閉狀態(tài)。當另一方也沒有數據再發(fā)送的時候,則發(fā)出連接關閉通知,對方確認后就完全關閉了TCP連接。
- 通俗的來說,兩次揮手就可以釋放一端到另一端的 TCP 連接,完全釋放連接一共需要四次揮手。
UDP:
建立于非鏈接,將數據包封裝一下,即可發(fā)出
性能損耗少,CPU、內存占用遠小于TCP,穩(wěn)定性弱于TCP
TCP適合傳輸文件、發(fā)送文件、瀏覽網頁
UDP適合域名查詢、語音通話、視頻,以及隧道網絡:VPN等