第六章 傳輸層
阿新 • • 發佈:2019-03-29
思維導圖 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限於一對一的傳送)
第六章 傳輸層