TCP與UDP的區別,以及TCP的三次握手和TCP的四次揮手

一、 TCP與UDP的區別

1. 相同點
 都是屬於傳輸層的協議
2. 不同點
TCP UDP
1 基於連接,可靠性強 基於無連接,可靠性較低
2 需要三次握手、重新確認等過程,實時性很差,同時過程複雜,易於被攻擊 無連接,因而實時性很強,稍微安全點
3 在傳輸相同大小的數據時,報頭20字節,而且tcp無丟包,開銷很大 在傳輸相同大小的數據時,udp首部開銷只有8個字節,而且udp經常丟包,開銷很小
4 每條tcp連接只能是點到點的 udp支持一對一、一對多、多對一、多對多的交互通信
5 名叫傳輸控制協議,傳輸效率低,可靠性強 名叫用戶數據報協議,適用於傳輸可靠性要求不高,數據量小的數據

二、 TCP的三次握手

TCP有些名詞需要解釋一下,以便理解
1. 名詞解釋
SYN: 同步序列號,用來發起一個連接,SYN=1的報文不能攜帶數據,但是消耗掉一個序列
ACK: 確認標識,當ACK=1時確認字段纔有效
seq: 序列號,即數據包本身的序列號,爲連接以後傳輸數據使用
ack: 對收到數據包的確認,值是等待接受的數據包的序列號(就是期望對方繼續發送的那個數據包的序列號)
2. 握手過程
  第一次: 客戶端C向服務端S發送連接請求報文,該報文首部中的SYN = 1,ACK = 0,隨機選取一個序列號seq = i 作爲初始序列號,
  		  此時客戶端進入SYN_SEDN同步已發送狀態。
  		  
  第二次: 服務端收到客戶端的連接請求報文,如果同意建立連接,則發送確認報文,確認報文首部中的SYN = 1 , ACK = 1 ,
   ack = i + 1 ,seq = j (服務端的初始序列號),此時,服務器進入SYN_RCVD同步收到狀態。
   
  第三次: 客戶端收到服務端的確認報文後,會向服務器發送確認報文,告訴服務器收到它的確認報文並準備建立連接,確認報文首部中SYN = 0、
   ACK = 1、ack = j + 1、 seq = i + 1。服務端收到客戶端確認報文,此時,服務端進入ESTABLISHED已建立連接狀態。
3. TCP爲什麼採用三次握手,而不是兩次或四次握手
TCP三次握手的目的是同步連接雙方的序列號和確認號,並交換TCP窗口大小信息

爲什麼採用三次握手: 爲了防止失效的請求報文段被服務端接受,從而產生錯誤。

來源:TCP爲什麼採用三次握手,而不是兩次握手或四次握手

三、 TCP的四次揮手(釋放)


一方主動關閉,另一方被動關閉


第一次:客戶端C發送一個FIN,用來關閉客戶端C到服務端S的數據傳送,客戶端C進入FIN-WAIT-1狀態

第二次:服務端S收到FIN後,發送一個ACK給客戶端C,確認序列號爲收到序列號+1,服務端S進入CLOSE-WAIT

第三次:服務端S發送一個FIN,用來關閉服務端S到客戶端C的數據傳送,服務端S進入LAST-ACK

第四次:客戶端C收到FIN後,客戶端C進入TIME-WAIT狀態,接着發送一個ACK給服務端S,
       確認序列號爲收到序列號+1,服務端S進入CLOSE狀態,完成第四次揮手。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章