User Datagram Protocol 用戶數據報協議面試
隨時發送數據,無需鏈接緩存
單播、多播、廣播安全
單播
:一臺主機給一臺主機發送數據網絡
多播
:一臺主機給多臺主機中的一部分發送數據tcp
廣播
:一臺住距給多臺主機全部發送數據ide
發送時直接添加首部。接收時直接除去首部。純面向報文spa
因無鏈接,提供的是不可靠服務。即,UDP 發送方不會在乎誤碼、丟包,接收方不作任何處理,只管接受計算機網絡
優勢:3d
UDP 頭部包含了如下幾個數據指針
Transmission Control Protocol 傳輸控制協議
三次握手創建鏈接 -> 數據傳輸 -> 四次揮手釋放鏈接
單播
發送方將數據塊分割並存儲在緩存,根據策略提取必定量字節,添加首部發送。接收方提取TCP報文中的數據並存儲在緩存,將緩存中一部分字節流交給應用進程。純面向字節流。
注意
接收方收到並確認無誤後,會給發送方返回一個確認報文。若是發送方沒有收到確認報文,會進行超時重發,直到(事實上有上限次數)收到接收端的確認報文。
TCP 會嚴格控制傳輸的正確性,一旦有某一個數據對端沒有收到,就會中止下來直到對端收到這個數據。
對於 TCP 頭部來講,如下幾個字段是很重要的
32位序號
Sequence number,這個序號保證了 TCP 傳輸的報文都是有序的,對端能夠經過序號順序的拼接報文確認序號
Acknowledgement Number,這個序號表示數據接收端指望接收的下一個字節的編號是多少,同時也表示上一個序號的數據已經收到窗口大小
Window Size,表示還能接收多少字節的數據,用於流量控制標識符
確認標誌位
, 該字段爲一表示確認序號字段有效。此外,TCP 還規定在鏈接創建後傳送的全部報文段都必須把 ACK 置爲一。請求或應答標誌位
,當SYN=1,ACK=0時,表示當前報文段是一個鏈接請求報文。當SYN=1,ACK=1時,表示當前報文段是一個贊成創建鏈接的應答報文。結束標誌位
,該字段爲一表示此報文段是一個釋放鏈接的請求報文。第一次:客戶端 -> 服務端
包含字段 | 字段值 | 說明 |
---|---|---|
隨機生成 Sequence number | 隨機生成 假設 10000 | 返回 Seq 需從10000開始 |
SYN 標誌位 | 1 |
第二次:服務端 -> 客戶端
包含字段 | 字段值 | 說明 |
---|---|---|
Sequence | 假設 20000 | |
SYN 標誌位 | 1 | |
ACK 標誌位 | 1 | 確認消息有效 |
確認序號 Acknowledgement | 12345 | 確認序號段有效 |
客戶端:已經知道我發送的消息,服務端能夠收到
服務端:不知道我發送的消息,客戶端是否能夠收到
第三次:客戶端 -> 服務端
包含字段 | 字段值 | 說明 |
---|---|---|
ACK 標誌位 | 1 | |
確認序號 Acknowledgement | 20001 |
整個過程叫雙工
客戶端 -> 服務端
包含字段 | 字段值 | 說明 |
---|---|---|
FIN | 1 | |
Sequence | 25368 |
服務端 -> 客戶端
包含字段 | 字段值 | 說明 |
---|---|---|
Acknowledgement | 25639 | |
ACK | 1 |
服務端首先響應客戶端斷開請求,可能這時候有別的數據請求正在處理
服務端 -> 客戶端
包含字段 | 字段值 | 說明 |
---|---|---|
Sequence | 10568 | |
FIN | 1 |
客戶端知道,能夠斷開了
客戶端 -> 服務端
包含字段 | 字段值 | 說明 |
---|---|---|
ACK | 1 | |
Acknowledge | 20569 |
服務端知道,能夠斷開了
TCP/IP 協議是傳輸層的一個面向鏈接的安全可靠的一個傳輸協議,三次握手的機制是爲了保證能創建一個安全可靠的鏈接,那麼第一次握手是由客戶端發起,客戶端會向服務端發送一個報文,在報文裏面:SYN標誌位置爲1,表示發起新的鏈接。當服務端收到這個報文以後就知道客戶端要和我創建一個新的鏈接,因而服務端就向客戶端發送一個確認消息包,在這個消息包裏面:ack標誌位置爲1,表示確認客戶端發起的第一次鏈接請求。以上兩次握手以後,對於客戶端而言:已經明確了我既能給服務端成功發消息,也能成功收到服務端的響應。可是對於服務端而言:兩次握手是不夠的,由於到目前爲止,服務端只知道一件事,客戶端發給個人消息我能收到,可是我響應給客戶端的消息,客戶端能不能收到我是不知道的。因此,還須要進行第三次握手,第三次握手就是當客戶端收到服務端發送的確認響應報文以後,還要繼續去給服務端進行迴應,也是一個ack標誌位置1的確認消息。經過以上三次鏈接,無論是客戶端仍是服務端,都知道我既能給對方發送消息,也能收到對方的響應。那麼,這個鏈接就被安全的建了。
- | UDP | TCP |
---|---|---|
命名 | User Datagram Protocol 用戶數據報協議 | Transmission Control Protocol 傳輸控制協議 |
有無鏈接 | 隨時發送數據,無需鏈接 | 三次握手創建鏈接 -> 數據傳輸 -> 四次揮手釋放鏈接 |
通訊方式 | 單播、多播、廣播 | 單播 |
對應用層報文的處理 | 發送時直接添加首部。接收時直接除去首部。純面向報文 | 發送方將數據塊分割並存儲在緩存,根據策略提取必定量字節,添加首部發送。接收方提取TCP報文中的數據並存儲在緩存,將緩存中一部分字節流交給應用進程。純面向字節流。 |
是否提供可靠的傳輸服務 | 因無鏈接,提供的是不可靠服務。即,UDP 發送方不會在乎誤碼、丟包,接收方不作任何處理,只管接受 | 接收方收到並確認無誤後,會給發送方返回一個確認報文。若是發送方沒有收到確認報文,會進行超時重發,直到(事實上有上限次數)收到接收端的確認報文。 |
首部開銷 | 四個字段,每一個字段2字節。共8字節 | 因爲 TCP 須要實現可靠傳輸、流量控制和擁塞控制等服務,首部比較複雜。TCP 的首部包括 20 字節的固定首部,以及最多 40 字節的拓展首部 |