計算機網絡03-傳輸層、可靠數據傳輸、UDP與TCP

計算機網絡03緩存

第三章 傳輸層服務器

1、傳輸層概述

1 · 傳輸層與應用層的關係

網絡層提供主機之間的邏輯通訊機制,而傳輸層提供應用進程之間的邏輯通訊機制。它創建在網絡層之上,依賴於網絡層服務,同時運輸協議可以提供的服務經常受制於網絡層協議的服務模型。網絡

2 · 進程到進程的數據交付

TCP與UDP做爲兩種運輸層協議,其責任是將兩個端系統間IP的交付服務擴展爲運行在端系統兩個進程之間的交互服務。tcp

  • TCP
    是可靠、按序的交付服務。它提供擁塞控制、流量控制、鏈接創建。
  • UDP
    不可靠的交付服務,基於「盡力而爲(Best-effort)」的網絡層,沒有作可靠性方面的擴展。

3 · 複用和分用

將主機之間交付擴展到進程間交付被稱爲運輸層的多路複用和多路分解。函數

  • 什麼是套接字
    源IP地址和目的IP地址以及源端口號和目的端口號的組合稱爲套接字。用於表示客戶端請求的服務器和服務。
    套接字是支持TCP/IP的網絡通訊的基本操做單元,能夠看作不一樣主機本身建的進程進行雙向通訊的斷點,即通訊兩房的一種約定,用套接字中的相關函數來完成通訊過程。
  • 接收端進行多路分解
    傳輸層檢查報文段中的字段,標識出接收套接字後將報文段定向到套接字,最後交付數據。
  • 發送端進行多路複用
    在源主機從不一樣套接字中收集數據塊,並未每一個數據塊封裝上首部信息從而生成報文段,而後將報文段傳遞到網絡層。

4 · UDP

UDP協議全稱是用戶數據報協議,在網絡中它與TCP協議同樣用於處理數據包,是一種無鏈接的、基於Internet IP協議的協議。計算機網絡

  • 特色
    • 無鏈接:
      知道對端的IP和端口號就直接進行傳輸, 不須要創建鏈接。而TCP須要TCP在發送數據前進行三次握手創建鏈接。
      同時所以也不須要維護鏈接狀態,包括收發狀態等, 一臺服務機可同時向多個客戶機傳輸相同的消息。
    • 不可靠:
      沒有確認機制, 沒有重傳機制,沒有擁塞機制; 若是由於網絡故障該段沒法發到對方, UDP協議層不會給應用層返回任何錯誤信息而致使丟包。
      同時不關心發送端是否收到了數據,也對數據進行校驗與備份,但應用可更好地控制發送時間和速率。
    • 面向報文:
      不可以靈活的控制讀寫數據的次數和數量,應用層交給UDP多長的報文, UDP原樣發送, 既不會拆分, 也不會合並,而是保留這些報文的邊界。所以,應用程序須要選擇合適的報文大小。
    • 有單播,多播,廣播的功能:
      UDP 不止支持一對一的傳輸方式,一樣支持一對多,多對多,多對一的方式,也就是說 UDP 提供了單播,多播,廣播的功能。
    • !頭部開銷:
      UDP 的首部開銷小,只有 8 個字節,比 TCP 的 20 個字節的首部要少得多。
      UDP 頭部包含了如下幾個數據:
      1)兩個十六位的端口號,分別爲源端口(可選字段)和目標端口。
      2)整個數據報文的長度(十六位)。
      3)整個數據報文的檢驗和(IPv4 可選 字段),該字段用於發現頭部信息和數據中的錯誤(十六位)。
      所以 UDP 的頭部開銷小,只有八字節,相比 TCP 的至少二十字節要少得多,在傳輸數據報文時是很高效的。
  • 適用場景
    對當前網絡通信質量要求不高的時候,實時性要求高的地方均可以看到 UDP 的身影,要求網絡通信速度儘可能的快,這時就使用UDP。
  • 如何在UDP上實現可靠數據傳輸
    • 在應用層增長可靠性機制
    • 應用特定的錯誤恢復機制
  • UDP校驗和
    提供了檢測UDP段在傳輸中是否發生錯誤的功能。
    • 發送方將段的內容視爲16-bit整數,計算全部整數的和進位加在和的後面,將獲得的值按位求反,獲得校驗和。同時發送方將校驗和放入校驗和字段。
    • 接收方計算所收到段的校驗和,將其與校驗和字段進行對比。

2、可靠數據傳輸

1 · 流水線可靠數據傳輸原理

可靠數據傳輸協議的基本結構是接口,它依靠漸
進地設計可靠數據傳輸協議的發送方和接收方,並只考慮單向數據傳輸。
本次咱們並不詳細展開rdt原理,可是須要明白什麼是重傳。設計

在自動重傳請求協議中,使用接收方反饋協議(ARQ)使得發送方瞭解接收方狀況。ACK表示「確定確認」,NCK表示「否認確認」,他們一般用一個分組決定,用0/1表明其值。視頻

當發送方不知道是一個數據分組丟失仍是ack丟失或者該分組ack過分延時時便進行重傳。

當因爲ack丟失或者過分延時致使的重傳中,第一次的數據報依舊會正確的傳遞到接收方,只是發送方因爲接收不到ack而誤覺得第一次的數據報未正確傳遞而進行重傳。所以rdt2.0版本中爲了防止接收方因重傳致使的冗餘數據,引入了冗餘數據分組來處理冗餘數據。
而在rdt3.0版本中,爲了實現基於時間的重傳機制,則規定了一個倒計數定時器對象

流水線可靠數據傳輸則是爲了提升數據傳輸的資源利用率。它不要求每一個數據報正確傳遞後再傳遞下一個數據報,而容許發送方發送多個數據分組而無需其他分組的等待確認。於是它要求:blog

  • 對每一個分組增長惟一的序號(seq),此時ack的值一般爲(seq+0/1)
  • 協議的發送方和接收方兩端分別要緩存已經發送但未確認的分組與已經接受的分組。
  • 對丟失、損壞的分組進行回退N步選擇重傳

2 · 回退N步與選擇重傳

  • 回退N步協議(GRB協議)
    假設某個序號爲n的分組因爲傳輸中丟失致使接收失敗的時候,那麼當n以後的序列的分組抵達接收方的時候,接收方將因爲未接收到n而丟棄掉全部n+1以後的數據包,並不斷返回ack(n-1),讓發送方在計時器超時後從新從n包發送數據。
  • 選擇重傳(SR協議)
    SR協議中爲接收方設置了緩存機制,用於緩存亂序到達的分組。此協議中發送方與接收方都擁有窗口,即表明發送方已經發送但未確認的分組長度與接收方已經接收但亂序的分組長度
  • 各自的缺點
    grb丟棄已經接收的分組會顯得有些浪費。而sr協議中若接收方返回的ack包在傳輸中丟失,發送方將沒法對已經發送的包進行確認,致使沒法進行下一個包的發送。

3、TCP協議和TCP的擁塞控制

TCP協議全稱是傳輸控制協議是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由 IETF 的RFC793定義。

1 · TCP報文段格式

  • 源端口 16位;目標端口 16位;序列號 32位;迴應序號 32位;TCP頭長度 4位;reserved 6位;控制代碼 6位;窗口大小 16位;偏移量 16位;校驗和 16位;選項 32位(可選);
  • 這樣咱們得出了TCP報頭的最小長度,爲20字節。

2 · TCP可靠數據傳輸

因爲應用層提供的數據服務是不可靠的,ip服務運輸的數據報不保證其交付與按序交付,所以TCP在ip的不可靠盡力爲之服務上建立了可靠數據傳輸服務。
上一節中咱們已經介紹了DBN協議與SR協議,而TCP的差錯恢復機制爲GBN協議和SR協議的混合體,它提出的一種修改意見是選擇確認,容許TCP接收方有選擇地確認失序報文段,而不是累積確認最後一個正確接收的有序報文段,並與選擇重傳進行結合使用。

3 · TCP創建鏈接過程

三次握手特色:

  • 沒有應用層的數據 ,SYN這個標誌位只有在TCP創建鏈接時纔會被置1 ,握手完成後SYN標誌位被置0。

第一次握手:

  • 客戶端向服務端發送鏈接請求報文段(SYN J,seq = x)。該報文段中包含自身的數據通信初始序號。請求發送後,客戶端便進入 SYN-SENT(請求鏈接)狀態。

第二次握手:

  • 服務端收到鏈接請求報文段後,若是贊成鏈接,則會發送一個應答,該應答中也會包含自身的數據通信初始序號(SYN K,ACK = 1,seq = y,ack=x+1),發送完成後便進入 SYN-RECEIVED 狀態。

第三次握手:

  • 當客戶端收到鏈接贊成的應答後,還要向服務端發送一個確認報文(ACK = 1,seq = x+1,ack=y+1)。發送完畢,客戶端和服務端都進入ESTABLISHED狀態,此時鏈接創建成功。

Question:爲何 TCP 創建鏈接須要三次握手,而不是兩次:
1.防止出現失效的鏈接請求報文段被服務端接收的狀況,從而產生錯誤
2.客戶端連接超時,會從新發送一次鏈接請求。當兩個SYN都抵達發送了ACK時,雖然第一個ACK會被放棄,可是服務器端會分配資源並一直維持這個資源,形成浪費。

4 · TCP斷開鏈接過程

揮手特色:

  • TCP 是全雙工的,在斷開鏈接時兩端都須要發送 FIN 和 ACK。

第一次揮手:

  • 當主機A(客戶端) 完成數據傳輸後,將控制位FIN置1,提出中止TCP鏈接的請求

第二次揮手:

  • B(服務端) 收到鏈接釋放請求後,會告訴應用層要釋放 TCP 連接。而後會發送 ACK 包(ack M+1),並進入 CLOSE_WAIT 狀態。
  • 此時代表 A 到 B 的鏈接已經釋放,再也不接收 A 發的數據了。可是由於 TCP 鏈接是雙向的,因此 B 仍舊能夠發送數據給 A。

第三次揮手:

  • B果此時還有沒發完的數據會繼續發送,完畢後會向 A 發送鏈接釋放請求(FIN N),而後 B 便進入 LAST-ACK 狀態。

第四次揮手:

  • A 收到釋放請求後,向 B 發送確認應答,此時 A 進入 TIME-WAIT 狀態。
  • 該狀態會持續 2MSL(最大段生存期,指報文段在網絡中生存的時間,超時會被拋棄) 時間,若該時間段內沒有 B 的重發請求的話,就進入 CLOSED 狀態。當 B 收到確認應答後,也便進入 CLOSED 狀態。

5 · TCP擁塞控制

擁塞的表現狀況是:太多發送主機發送了太多數據或者發送速度太快,以致於網絡沒法處理。而擁塞將致使分組丟失或者分組延遲過大。
在TCP中擁塞控制的方法是讓每個發送方根據所感知到的網絡擁塞程度來限制其鏈接發送流量的速率。而且經過以下三個方法來確認:

  • 一個丟失的報文段意味着擁塞
  • 當先前的報文段確認到達時,可以增長髮送方的速率
  • 寬帶探測

6 · TCP特色

  • 面向鏈接的運輸層協議: 發送數據以前必須在兩端創建鏈接,即進行三次握手。
  • 可靠傳輸:
    • 提供擁塞控制,當網絡出現擁塞的時候,TCP可以減少向網絡注入數據的速率和數量,緩解擁塞。
    • 誤碼靠的是TCP的段編號以及確認號判斷丟包。TCP爲了保證報文傳輸的可靠,就給每一個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。而後接收端實體對已成功收到的字節發回一個相應的確認(ACK);若是發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據(假設丟失了)將會被重傳。
  • 提供全雙工通訊: TCP容許通訊雙方的應用程序在任什麼時候候都能發送數據,由於TCP鏈接的兩端都設有緩存,用來臨時存放雙向通訊的數據。固然,TCP能夠當即發送一個數據段,也能夠緩存一段時間以便一次發送更多的數據段(最大的數據段大小取決於MSS)
  • 僅支持單播傳輸: 每條TCP傳輸鏈接只能有兩個端點,只能進行點對點的數據傳輸,不支持多播和廣播傳輸方式。
  • 面向字節流: TCP不像UDP同樣那樣一個個報文獨立地傳輸,而是在不保留報文邊界的狀況下以字節流方式進行傳輸。

7 · TCP與UDP的區別

TCP UDP
是否鏈接 面向鏈接,創建鏈接3次握手,斷開鏈接4次揮手 無鏈接
是否可靠 可靠傳輸,使用流量控制和擁塞控制 不可靠傳輸,不使用流量控制和擁塞控制
鏈接對象個數 只能是一對一通訊 支持一對一,一對多,多對一和多對多交互通訊
傳輸方式 面向字節流 面向報文
首部開銷 首部最小20字節,最大60字節 首部開銷小,僅8字節
適用場景 適用於要求可靠傳輸的應用,例如文件傳輸 適用於實時應用(IP電話、視頻會議、直播等)
相關文章
相關標籤/搜索