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

UDP

1. 命名

User Datagram Protocol 用戶數據報協議面試

2. 有無鏈接

隨時發送數據,無需鏈接緩存

3. 通訊方式

單播、多播、廣播安全

單播:一臺主機給一臺主機發送數據網絡

多播:一臺主機給多臺主機中的一部分發送數據tcp

廣播:一臺住距給多臺主機全部發送數據ide

4. 對應用報文的處理

發送時直接添加首部。接收時直接除去首部。純面向報文spa

5. 是否提供可靠的傳輸服務

​ 因無鏈接,提供的是不可靠服務。即,UDP 發送方不會在乎誤碼、丟包,接收方不作任何處理,只管接受計算機網絡

v2-5669a9706161cc844b813997f0896c11_b

優勢:3d

  1. 保證明時性。 網絡直播、視頻會議

6. 首部開銷

UDP 頭部包含了如下幾個數據指針

  • 源端口端口號(可選字段)(2字節)
  • 目標端口 (2字節)
  • 整個數據報文的長度 (2字節)
  • 整個數據報文的檢驗和(IPv4 可選 字段),該字段用於發現頭部信息和數據中的錯誤 (2字節)

TCP

1. 命名

Transmission Control Protocol 傳輸控制協議

2. 有無鏈接

三次握手創建鏈接 -> 數據傳輸 -> 四次揮手釋放鏈接

3. 通訊方式

單播

4. 對應用層報文的處理

  1. 流程

    發送方將數據塊分割並存儲在緩存,根據策略提取必定量字節,添加首部發送。接收方提取TCP報文中的數據並存儲在緩存,將緩存中一部分字節流交給應用進程。純面向字節流。

  2. 注意

    1. TCP 並不知道字節流的含義,所以接收方須要具有理解字節流的能力
    2. 發送方發送的數據塊和和接收方接收的數據塊,數量可能不等。如發送方將4個數據塊,打包成2個發出
    3. TCP 能夠同時雙向傳輸

5. 是否提供可靠的傳輸服務

接收方收到並確認無誤後,會給發送方返回一個確認報文。若是發送方沒有收到確認報文,會進行超時重發,直到(事實上有上限次數)收到接收端的確認報文。

TCP 會嚴格控制傳輸的正確性,一旦有某一個數據對端沒有收到,就會中止下來直到對端收到這個數據。

6. 首部開銷

對於 TCP 頭部來講,如下幾個字段是很重要的

  • 32位序號 Sequence number,這個序號保證了 TCP 傳輸的報文都是有序的,對端能夠經過序號順序的拼接報文
  • 確認序號 Acknowledgement Number,這個序號表示數據接收端指望接收的下一個字節的編號是多少,同時也表示上一個序號的數據已經收到
  • 窗口大小Window Size,表示還能接收多少字節的數據,用於流量控制
  • 標識符

    • URG=1:該字段爲一表示本數據報的數據部分包含緊急信息,是一個高優先級數據報文,此時緊急指針有效。緊急數據必定位於當前數據包數據部分的最前面,緊急指針標明瞭緊急數據的尾部。
    • ACK=1:確認標誌位, 該字段爲一表示確認序號字段有效。此外,TCP 還規定在鏈接創建後傳送的全部報文段都必須把 ACK 置爲一。
    • PSH=1:該字段爲一表示接收端應該當即將數據 push 給應用層,而不是等到緩衝區滿後再提交。
    • RST=1:該字段爲一表示當前 TCP 鏈接出現嚴重問題,可能須要從新創建 TCP 鏈接,也能夠用於拒絕非法的報文段和拒絕鏈接請求。
    • SYN=1:請求或應答標誌位,當SYN=1,ACK=0時,表示當前報文段是一個鏈接請求報文。當SYN=1,ACK=1時,表示當前報文段是一個贊成創建鏈接的應答報文。
    • FIN=1:結束標誌位,該字段爲一表示此報文段是一個釋放鏈接的請求報文。

7. 三次握手

  1. 第一次:客戶端 -> 服務端

    包含字段 字段值 說明
    隨機生成 Sequence number 隨機生成 假設 10000 返回 Seq 需從10000開始
    SYN 標誌位 1
  2. 第二次:服務端 -> 客戶端

    包含字段 字段值 說明
    Sequence 假設 20000
    SYN 標誌位 1
    ACK 標誌位 1 確認消息有效
    確認序號 Acknowledgement 12345 確認序號段有效

    客戶端:已經知道我發送的消息,服務端能夠收到

    服務端:不知道我發送的消息,客戶端是否能夠收到

  3. 第三次:客戶端 -> 服務端

    包含字段 字段值 說明
    ACK 標誌位 1
    確認序號 Acknowledgement 20001
整個過程叫雙工

8. 四次揮手

  1. 客戶端 -> 服務端

    包含字段 字段值 說明
    FIN 1
    Sequence 25368
  2. 服務端 -> 客戶端

    包含字段 字段值 說明
    Acknowledgement 25639
    ACK 1

    服務端首先響應客戶端斷開請求,可能這時候有別的數據請求正在處理

  3. 服務端 -> 客戶端

    包含字段 字段值 說明
    Sequence 10568
    FIN 1

    客戶端知道,能夠斷開了

  4. 客戶端 -> 服務端

    包含字段 字段值 說明
    ACK 1
    Acknowledge 20569

    服務端知道,能夠斷開了

​ TCP/IP 協議是傳輸層的一個面向鏈接的安全可靠的一個傳輸協議,三次握手的機制是爲了保證能創建一個安全可靠的鏈接,那麼第一次握手是由客戶端發起,客戶端會向服務端發送一個報文,在報文裏面:SYN標誌位置爲1,表示發起新的鏈接。當服務端收到這個報文以後就知道客戶端要和我創建一個新的鏈接,因而服務端就向客戶端發送一個確認消息包,在這個消息包裏面:ack標誌位置爲1,表示確認客戶端發起的第一次鏈接請求。以上兩次握手以後,對於客戶端而言:已經明確了我既能給服務端成功發消息,也能成功收到服務端的響應。可是對於服務端而言:兩次握手是不夠的,由於到目前爲止,服務端只知道一件事,客戶端發給個人消息我能收到,可是我響應給客戶端的消息,客戶端能不能收到我是不知道的。因此,還須要進行第三次握手,第三次握手就是當客戶端收到服務端發送的確認響應報文以後,還要繼續去給服務端進行迴應,也是一個ack標誌位置1的確認消息。經過以上三次鏈接,無論是客戶端仍是服務端,都知道我既能給對方發送消息,也能收到對方的響應。那麼,這個鏈接就被安全的建了。

UDP 和 TCP 區別

- UDP TCP
命名 User Datagram Protocol 用戶數據報協議 Transmission Control Protocol 傳輸控制協議
有無鏈接 隨時發送數據,無需鏈接 三次握手創建鏈接 -> 數據傳輸 -> 四次揮手釋放鏈接
通訊方式 單播、多播、廣播 單播
對應用層報文的處理 發送時直接添加首部。接收時直接除去首部。純面向報文 發送方將數據塊分割並存儲在緩存,根據策略提取必定量字節,添加首部發送。接收方提取TCP報文中的數據並存儲在緩存,將緩存中一部分字節流交給應用進程。純面向字節流。
是否提供可靠的傳輸服務 因無鏈接,提供的是不可靠服務。即,UDP 發送方不會在乎誤碼、丟包,接收方不作任何處理,只管接受 接收方收到並確認無誤後,會給發送方返回一個確認報文。若是發送方沒有收到確認報文,會進行超時重發,直到(事實上有上限次數)收到接收端的確認報文。
首部開銷 四個字段,每一個字段2字節。共8字節 因爲 TCP 須要實現可靠傳輸、流量控制和擁塞控制等服務,首部比較複雜。TCP 的首部包括 20 字節的固定首部,以及最多 40 字節的拓展首部

References

計算機網絡面試必考點:TCP 和 UDP

【深度講解+面試回答】tcp/ip協議三次握手、四次揮手,通俗易懂,

相關文章
相關標籤/搜索