1. 程式人生 > >第六章 傳輸層

第六章 傳輸層

思維導圖 tcp與udp dos攻擊 tag 分享 沒有 ali 地址 導圖

思維導圖:

技術分享圖片

一、 概述

與數據鏈路層關系

  • 提供可靠的、高效的、性價比高的數據傳輸
  • 輸出實體
    •   技術分享圖片
  • 傳輸層利用網絡層的服務,為它的上層應用層提供服務
    •   技術分享圖片

網絡層與傳輸層不同點:

  • 網絡層運行在由承運商操作的路由器上,因此用戶無法真正控制到網絡層
  • 把另一層放在網絡層之上,可以讓用戶能夠控制到服務質量(some control)
  • 傳輸層原語獨立於網絡層原語,而網絡層原語會因為網絡的不同而不同
    •   技術分享圖片
  • 網絡層負責把數據從源機送達到目的機(Host to Host)
  • 傳輸層負責把數據送達到具體的應用進程(End to End:端到端)

與數據鏈路層關系

技術分享圖片

數據段(TPDU,傳輸層協議數據單元)

  • TPDU(Transport Protocol Data Unit)是從傳輸實體發到對端傳輸實體的信息,有的教材叫TPDU為數據段(segment)
  • TPDU作為數據(載荷)被封裝在分組(packet)中,由網絡層傳輸交換
  • 分組作為數據(載荷)被封裝在幀(frames)中,由數據鏈路層傳輸交換
  • 技術分享圖片

兩個常用的協議:

  • UDP(User Datagram Protocol)用戶數據報協議
  • TCP(Transmission Control Protocol)傳輸控制協議

二、 用戶數據報協議UDP

UDP提供無連接的連接,可以使用源端口和目的端口

技術分享圖片

  • UDP數據段包括4個字段共8字節的頭部和數據兩個部分
  • 其中第3個字段,長度字段(域)表示;包括頭部和數據總共有多少字節
  • 第4個是校驗和(checksum)是可選的,如果不計算校驗和,則該字段/域置為0
  • UDP數據段中最獨特、最重要的字段是1、2個字段,分別表示源端口和目的端口,都是用16比特表示的

端口被分為三段:

技術分享圖片

自由端口(Free port)

  • 本地分配
  • 動態的隨機端口

UDP校驗和計算:

技術分享圖片

校驗和中用到的IP偽頭部:(TCP協議值為6)

技術分享圖片

收到數據進行校驗和計算,計算的數據裏面包括收到的校驗和,計算的結果應該為全1,否則傳輸過程中發生錯誤。

技術分享圖片

通信模型

端點就是套接字(Socket)

包括:

  • 技術分享圖片
  • IP地址
  • 端口號

通信五元組:

  • 技術分享圖片

一些著名的端口號:

  • 技術分享圖片

傳輸層的PDU不僅僅送達主機,而且送達端口,即應用進程

三、 TCP數據段(Transmission Control Protocol)

  • 技術分享圖片
  • TCP連接上的每個字節都有它自己獨有的32位序列號
  • 單收、發雙方的TCP實體不是以字節,而是以數據段的形式交換數據
    •   TCP數據段必須適合IP分組的65515字節(65535-20B)的載荷限制
    • 每個TCP數據段必須適合於下層網絡的MTU

技術分享圖片

Sequence number

  • 序列號,表示一個字節的編號
  • 初始序列號ISNs(initial sequence numbers):隨機產生的   

Acknowledgement number

  • 確認號,期望接收的字節編號(32位)
  • TCP的可靠傳輸保證,采用了肯定確認機制
    • 技術分享圖片

技術分享圖片

保留字段,和控制比特

  • URG:緊急數據,即使win = 0,也可以發送。值為1時,馬上處理
  • ACK: =1,確認號有效
  • PSH:表示這是帶有PUSH標誌的數據,接受方收到這樣的數據,應該立刻送到上層,而不需要緩存它
  • RST: 被用來重置一個已經混亂的連接,如果在連接建立階段,就直接拒絕建立連接
  • SYN: 用在連接建立的過程技術分享圖片

  • FIN:被用來釋放連接,它表示發送方已經沒有數據要傳輸了,但是可以繼續接收數據

Window size:

  • 為了避免接收方被大量湧入的數據所淹沒,TCP實體進行流控(Flow control)
  • 告訴對方可以發送的數據字節數,即從確認字節號開始,連續發送的字節總數
  • 窗口尺寸的大小,取決於接收方

Checksum(校驗和):

  • 計算方法跟UDP數據段中校驗和計算一樣,唯一不一樣的就是偽頭部中的用戶協議值取為6

Urgent pointer:

  • 緊急指針,和URG控制位配合使用,指明了緊急數據

Options

  • 如果有選項域,它提供了一種增加基本頭沒有包含的內容的方法

TCP三次握手

1. 建立過程

  • 一方(server)被動地等待一個進來地連接請求
  • 另一方(client)通過發送連接請求,設置一些參數
  • 服務器回發確認應答
  • 應答到達請求方,請求方最後確認,連接建立
  • 技術分享圖片
  • 可能地安全問題:SYN泛洪Dos攻擊(偽造源IP)

2. 連接釋放

  • 任何一方在沒有數據要傳送地時候,都可以發送一個FIN置位了的TCP數據段
  • 當FIN被確認的時候,該方向的連接被關閉了
  • 當雙向的連接都關閉了的時候,連接釋放
  • 技術分享圖片
  • 技術分享圖片

四次握手正常釋放連接:

  • 技術分享圖片

TCP傳輸策略

傳輸的是全雙工的字節流

采用Window size 進行流控

  • 技術分享圖片

策略

  • 當窗口數為0時,發送者不能正常發送數據段,除非:
  • Urgent數據。比如,用戶想殺掉遠端機器上的進程的時候,可以發送數據。
  • 發送者可以發送一個字節的數據段,以便讓接收者再次發送期待接收的字節號(確認)窗口數(避免死鎖)

優化

1. 優化接收端

  • 接收端可以推遲500ms發送確認分組和窗口更新,以便可以免費搭載在處理後的回顯分組內(free ride)
  • 傻瓜窗口綜合癥

    • 技術分享圖片

2. 優化發送端:Nagle‘s algorithm

  • 技術分享圖片
  • 當數據以一次一字節的速度到達傳輸實體的時候,只發送第一個字節,然後將後續的字節緩存起來,知道發出的字節得到確認
  • 將緩存起來的字節在一個數據段中發出,在繼續緩存,知道發出的數據得到確認
  • 有些情況禁用,如:互聯網遠程運行

TCP擁塞控制

擁塞檢測(Congestion detection)

  • 所有的互聯網TCP算法都假定超時是由擁塞引起的,並且通過監視超時的情況來判斷是否出現問題

擁塞控制(Congestion control)

  • 當一個連接建立的時候,雙方選擇一個合適的窗口大俠,接收方根據自己的緩存區大小來指定窗口的大小
  • 如果發送者遵循這個窗口大小的限制,則接收端不會出現緩沖區溢出的問題,但可能由於網絡內部的擁塞而發生問題

兩個窗口問題

  • 要解決擁塞,應該是認識到這兩個潛在的問題:網絡容量、接收者容量
  • 為此,每個發送者維護兩個窗口
    •  接收者窗口:反映了目前接收者的處理能力(容易獲取)
    •  擁塞窗口:大小反應了網絡目前的容量(難於獲取)
  • 只要發送者發送的數據字節數是兩個窗口中小的那個窗口數

慢啟動算法(Slow Start)

  • 當連接建立的時候,發送者用當前使用的最大數據段長度初始化擁塞窗口,然後發送一個最大的數據段
  • 如果在定時器超時之前收到確認,則將擁塞窗口翻倍,然後發送兩個數據段,直到超時(或達到接收方窗口的大小)

閾值開始,每次傳輸,線性增長

  • 技術分享圖片

  • 不斷超時,不斷重啟

  • 重新慢啟動的時候,擁塞窗口值不用重置為一個數據段大小,而是可以設置為閾值大小,從這裏直接開始線性增長,者就是所謂的快速恢復技術分享圖片
  • 任何時候,如果TCP傳輸實體收到一個ICMP抑制分組(ICMP source quench),則該事件被當作超時對待

TCP定時器

  • TCP采用了肯定確認重傳技術,保證每一個字節的可靠傳輸
  • 每發一個數據段,都會啟動一個定時器——重傳定時器(retransmission timer,Positive ackn.with retransmit)
  • 持續定時器(persistence timer) 用來避免如下死鎖技術分享圖片

  • 保活定時器(keep-alive timer)——用來檢查連接是否存活
  • 在關閉時候,處於time-wait中使用的定時器,運行兩倍的最大分組生存時間,以確保連接 關閉之後,該連接上的所有數據都完全消失

TCP與UDP比較:

    • 技術分享圖片

    • TCP

      •  可靠傳輸方式
      • 可讓應用程序簡單化,程序員可以不必進行錯誤檢查、修正等工作
    • UDP
      •  為了降低對計算機資源的需求(如:DNS)
      • 應用程序本身已提供數據完整性的檢查機制,毋須依賴傳輸層的協議來保證
      • 應用程序傳輸的並非關鍵性的數據(如:路由器周期性的路由信息交換)
      • 一對多方式,必須使用UDP(TCP限於一對一的傳送)

第六章 傳輸層