第三章網絡協議和體系結構(花了兩天半,受益匪淺)

網絡協議和體系結構

一. 網絡協議 和 體系結構概述

1. 網絡協議的概念

  • 協議(規程)
    • 通信雙方必須遵守的規則和約定
  • 協議的三要素
    • 語法:確定數據格式等(就像想和外國人交流就得使用英語一樣)
    • 語義:確定協議元素的類型
    • 時序:通信狀態的變化

2. 分層的思想

  • 核心思想
    • 上一層的功能必須建立在下一層功能的基礎上
    • 並且在每一層內要遵守一定的通信規則
  • 分層的好處
    • 各層次之間相互獨立
      • 高層不需要了解低層的工作機制,技術細節等
      • 只需要知道通過接口提供哪些服務即可
    • 較強的靈活性
      • 想要一開始就考慮的天衣無縫是極難的
      • 進行層次劃分之後,當某個層次的技術發生變化,不會影響其他層次
    • 有利於標準化
      • 對每一層的功能和服務目標明確

3. 網絡體系結構

  • 層次 和 協議 的集合構成了網絡的體系結構

    • 層次是指分幾層,比如說 OSI 分爲 7 層,TCP/IP 4層
    • 協議是指每層都遵守的規則
  • 體系結構研究的是網絡系統各部分的組成及其相互關係

  • 爲了解決不同廠家之間的通信障礙,制定了全世界統一的網絡體系結構標準

  • 典型的層次化體系結構

    • OSI 參考模型
    • TCP/IP 參考模型

二. OSI 參考模型

1. OSI 的起源

  • 1984年,國家標準組織 ISO吸取了 IBM公司的SNA以及其他廠商的網絡體系結構,提出了 開放系統互聯 參考模型 ,簡稱 OSI模型
  • 開放
    • 是指只要各個廠商遵守了 OSI 這套標準,生產的設備網絡都可以 互聯互通

2. OSI 參考模型各層的功能

  • OSI 參考模型採用分層結構化技術,將整個網絡的通信功能分爲 7 層

    • 主機包含這七層

      • 主機實現的是資源子網的功能

      • 主機的網卡實現

        • 物理層,數據鏈路層
      • 主機的操作系統實現

        • 網絡層 傳輸層 會話層 表示層 應用層
    • 在通信子網裏邊,結點是路由器

      • 通信子網由路由器連接

      • 路由器實現

        • 物理層,數據鏈路層,網絡層

在這裏插入圖片描述

  • OSI 模型的傳遞過程
    • 各層數據不是直接從一端的第N層直接送到另一段的對應層,自上而下逐層傳遞
    • 第N層 接收 第 N+1層的協議數據單元(PDU),按第 N層協議封裝,構成 第N層PDU
    • 再通過層間接口傳遞給 第N-1層…
    • 最後數據鏈路層(數據幀)傳遞給最底層的物理層
    • 實通信
      • 在物理層的兩個斷點進行物理通信
    • 結點到結點層
      • 物理層 數據鏈路層 網絡層
    • 端到端層
      • 傳輸層 會話層 表示層 應用層
    • 舉個例子
      • 比如說 使用谷歌瀏覽器要瀏覽一個網頁,谷歌是一個進程
      • 瀏覽網頁使用的是應用層的數據,將向主機B發送請求的信息用一個HTTP封裝
      • 封裝好之後經過表示層,會話層
      • 到了傳輸層之後,可以使用TCP協議封裝成報文段格式
      • 到網絡層將TCP的報文封裝到 IP分組
      • IP分組在數據鏈路層在網卡位置 封裝成幀
      • 物理層通過網卡經過比特流的傳輸到達 主機B的物理層
      • 主機B的 數據鏈路層 將幀的首部尾部找出來去掉得到IP分組提交給網絡層
      • 逐次向上傳遞,最終達到應用層,主機B返回響應的信息

在這裏插入圖片描述

  • 物理層
    • 實現比特流傳輸,實現信號編碼功能
    • 規定 數據終端設備DTE數據通信設備DCE 的接口特性
      • 比如我們使用計算機上網
      • DTE爲計算機
      • DCE爲調制解調器
    • 包括四個方面
      • 機械(什麼形狀多大尺寸)
      • 電氣(用多大的電壓表示)
      • 功能(物理接口的用途)
      • 規程(全過程的合法順序)
  • 數據鏈路層
    • 以 幀 爲單位的數據塊進行傳遞
    • 可以進行差錯控制,連接管理
  • 網絡層
    • 數據轉發和路由
    • 流量控制,尋址(IP地址)
  • 傳輸層
    • 端到端通信(進程-進程)
      • 我用qq和你聊天,這其實是兩個進程之間的通信
    • 複用和解複用
  • 會話層
    • 用戶與用戶的連接,在兩臺計算機之間建立 管理和終止通信完成對話
    • 已被應用層覆蓋
  • 表示層
    • 處理應用實體之間的語法,解決格式和數據表示的差異
    • 爲應用層提供一個一致的數據格式
    • 也被應用層覆蓋了
  • 應用層
    • 提供給用戶網絡服務接口(各種應用軟件等)

3. OSI 參考模型有關的術語

  • OSI 參考模型每一層真正的功能其實是爲上一層提供服務
    • 例如 N層的實體爲(N+1)層的實體提供服務
    • N層的服務則需要使用(N-1)層及更低層提供的功能服務

1. 數據單元

  • 數據單元
    • 層的實體之間傳送的比特組
  • 協議數據單元PDU
    • 對等層之間傳送數據單元是按照本層協議進行的
    • 物理層:比特流
    • 數據鏈路層:幀
    • 網絡層:分組,包
    • 傳輸層:報文段
    • 應用層:報文

在這裏插入圖片描述

  • PDU 是協議數據單元,SDU是服務數據單元
  • PCI是協議控制信息 通常作爲PDU的首部
  • (N+1)PDU在越過N+1和N的邊界之後
  • 變換爲 N-SDU(N層把(N+1)-PDU看成爲 N-SDU)
  • N層在 N-SDU上加上 N-PCI,則成爲 N-PDU
  • (N+1)-PDU 與 N-PDU 之間並非一 一對應的關係
  • 如果N層覺得有必要,可以把 (N+1)-PDU拆成幾個單位,加上PCI之後稱爲多個N-PDU
  • 或者把多個(N+1)-PDU連接起來,形成一個N-PDU
  • 到達目的站的N-PDU,在送往(N+1)層之前要把N-PCI去掉
  • 在層間通信中PCI相當於報頭,即首部
  • 源點逐層增加新的PCI,到達目的地之後則逐層去掉
  • 使得信息原來的結構得以恢復

2. 服務訪問點

  • 相鄰層間的服務是通過其接口面上的 服務訪問點 SAP 進行的
  • N層SAP就是(N+1)層可以訪問N層的地方,每個SAP都有唯一的一個地址

3. 服務原語

  • 第N層向 N+1層提供服務,或者第 (N+1)層請求N層提供服務,都是使用一組原語

  • OSI 參考模型的原語有4類

    • Request 請求
      • 用戶實體請求服務做某種工作
    • Indication 指示
      • 用戶實體被告知某件事發生
    • Response 響應
      • 用戶實體表示對某件事的響應
    • Confirm 確認
      • 用戶實體收到關於它的請求的答覆

在這裏插入圖片描述

  • 系統A中 N+1層用戶 發出請求原語,調用本系統 N服務提供者的一些程序
  • 於是N服務提供者 向系統B N+1用戶 發送一個 N-PDU
  • 當系統B的 N服務提供者 收到這 N-PDU之後,向本系統 N+1用戶 發出指示原語
  • 說明本系統的 N+1用戶需要調用一些程序,系統B的 N+1用戶發出一個響應原語
  • N層協議產生一個PDU,傳送到系統A的N層
  • 系統A的 N服務提供者發出正式原語,表示在服務端已經完成了由請求原語調用的程序

4. 面向連接和無連接

  • 面向連接服務
    • 具有3個過程
      • 請求建立連接
        • 雙方同意之後,它們之間的通信鏈路就建立了起來
      • 傳輸數據
        • 以分組爲單位按序傳送,不標明地址
      • 拆除鏈路
        • 傳送結束之後,拆除鏈路
    • 面向連接的服務又稱爲 虛電路
    • 如果接收方收到數據之後予以確認,就是可靠傳輸,反之爲不可靠傳輸方式
      • 如果A發了個數據包,經過了往返時間還沒收到B的確認(可靠傳輸),A就認爲在傳輸過程中出錯了,會重發
      • 不要求確認爲不可靠傳輸
    • 典型的電話系統,TCP
  • 無連接服務
    • 沒有建立和拆除鏈路的過程
    • 也稱爲數據報服務
    • 特點
      • 每個分組獨立選擇路徑
      • 無序,要求攜帶地址
      • 接收方需要重組分組
    • UDP

三. TCP/IP 的產生

1. TCP/IP的產生

  • 1970年,網絡控制協議 NCP 產生
  • 1974年,傳輸控制協議 TCP 詳細說明正式發表
  • 1978年,TCP正式變爲 TCP/IP
    • TCP 負責可靠傳輸
    • IP 負責尋址轉發
  • 1983年,NCP停用,TCP/IP作爲互聯網標準協議

2. TCP/IP參考模型及功能介紹

  • TCP/IP 參考模型一共分爲4層,通常每一層的數據包採用不同的名稱

在這裏插入圖片描述

  • 應用層

    • 常見的應用大多在這一層,用戶通過應用層來使用Internet提供的各種服務
    • TCP/IP 應用層基本的協議主要是以下幾種
      • 遠程登陸協議 (TELNET)
      • 文件傳輸協議(FTP)
      • 簡單郵件傳輸協議(SMTP)POP3協議(讀取郵件)
      • 域名服務(DNS)將域名轉換爲IP地址
      • 超文本傳輸協議(HTTP)
      • 簡單網絡管理協議(SNMP)
      • 動態主機配置協議(DHCP)
  • 傳輸層

    • 負責會話進程之間 建立和維護 端到端(進程到進程)連接,實現網絡環境中分佈式進程通信
      • 進程與進程之間的連接通過端口號,比如qq與qq聊天
      • 而qq不能和迅雷聊天
    • 當應用層的程序照特定協議封裝好之後,接下來由傳輸層的協議負責將這些數據傳輸到接收方主機對等的應用層程序中,只負責應用層與網絡層之間傳遞信息
    • 傳輸層爲運行在不同主機上的進程提供了一種邏輯通信機制
      • 利用此機制不用考慮兩者之間的物理連接方式實現收發信息
    • 主要包括兩種協議
      • 面向連接(TCP)
        • 提供可靠數據流 傳輸控制協議(TCP)
        • TCP協議提供比較完善的流量控制與擁塞控制功能
      • 無連接(UDP)
        • 不提供可靠數據流傳輸 的用戶數據報協議(UDP)
  • 網絡互聯層

    • 網絡互聯層是整個TCP/IP參考模型的核心

      • 主要解決把數據分組發往目的網絡或者主機的問題
      • 要爲分組的傳輸選擇相應的路徑(路由選擇
      • 完成分組的轉發,提供網絡層尋址—IP地址
      • 除了完成路由功能,也可以完成不同類型的網絡(異構網)互聯的任務
    • 本層的協議數據單元是 IP分組,設備是路由器,路由轉發,IP分組尋址

    • IP協議

      • 網絡互聯層的核心協議,負責定義分組格式和傳輸
      • 不可靠無連接的數據傳送服務協議
    • 還包括其他幾個協議

      • 互聯網控制報文協議(ICMP)
      • 互聯網多播組管理協議(IGMP)
      • 路由協議 BGP,RIP,OSPF等
      • ARP協議(地址轉換協議)由IP地址轉換爲MAC地址
      • RARP協議(方向地址解析協議)由MAC地址轉換爲IP地址

在這裏插入圖片描述

  • 網絡接口層
    • 這一層未被定義,所以其具體方法隨着網絡類型的不同而不同
    • 允許使用廣域網,局域網,城域網的各種協議,只要遵循網絡互聯層的IP協議即可
    • 這一層對應OSI參考模型中的數據鏈路層和物理層

3. TCP/IP 的傳輸過程

  • 路由器的網卡實現的是物理層和數據鏈路層的功能
  • 把網絡接口層的幀首部去掉得到網絡層的數據
  • 查網絡層的IP分組的目的IP地址
  • 根據目的IP地址計算出目的網絡號查路由錶轉發
  • 轉發的時候又重新封裝成一個新的幀
  • 這兩個幀的首部是不一樣的

在這裏插入圖片描述

4. TCP/IP 與 OSI 的區別

  • 相似之處
    • 按照分層的思想進行模塊化設計
    • 自上而下的協議棧
  • 區別
    • 層次劃分不同
      • OSI 七層,TCP/IP 四層
      • TCP/IP 沒有表示層和會話層,將物理層和數據鏈路層的功能合併爲網絡接口層
    • 面向連接和麪向無連接的通信不同
      • OSI 在 網絡層支持 面向連接和無連接,傳輸層僅支持面向連接
      • TCP/IP 在網絡層僅支持面向無連接,傳輸層支持兩種方式
    • 與具體協議的配合程度
      • OSI 產生在具體協議發明之前,具有很好的通用性,但沒有實際的協議設計經驗
      • TCP/IP 是先有TCP,IP這些具體協議的基礎之上建立的,對協議配合度很高

四. TCP 和 UDP

1. TCP/IP參考模型中的傳輸層

  • 傳輸層的主要功能
    • 爲應用進程提供端到端的通信
    • 對收到的報文進行差錯檢測
    • 對應用層實現複用與解複用
  • TCP/IP規定了兩種不同的傳輸層協議
    • 面向連接的傳輸控制協議(TCP)
    • 無連接的用戶數據報協議(UDP)

在這裏插入圖片描述

  • 傳輸層使用協議端口號

    • 簡稱端口

    • 爲了支持運行在不同主機,不同操作系統上的應用進程之間能夠互相通信,必須用統一的尋址方法對TCP/IP 體系的應用進程進行標識

    • TCP/IP中,通過 IP地址+端口號來標識端點

      • IP地址用於標識網絡中的主機
      • 端口號標識主機中的哪一個服務或者應用進程
    • 端口號是一個 16位的二進制整數,根據端口號大小可分爲

      • 熟知端口

        • 0~1023
        • FTP 21端口
        • SMTP 25端口
        • HTTP 80端口
      • 註冊端口

        • 1024~49151
        • 必須在LANA登記,防止重複
      • 客戶端口

        • 49152~65535
        • 留給客戶進程選擇暫時使用

在這裏插入圖片描述

  • 無連接與面向連接
    • 無連接(UDP)
      • 指數據傳輸之前不用進行信息交換(握手
      • 直接構造數據分組,發送出去
    • 面向連接(TCP)
      • 數據傳輸之前,交換一些控制信息
      • 建立連接,然後再傳輸數據,數據傳輸結束之後,還需要拆除連接

2. UDP

  • UDP是一種無連接的傳輸層協議

  • 數據報格式

    • UDP首部

      • 一共8個字節,開銷小

      • 源端口號:2個字節,16個比特

      • 目的端口號:2個字節,16個比特

      • 長度:包括首部和數據部分在內的總字節數

      • 校驗和:UDP通過這個檢測數據是否安全
        在這裏插入圖片描述

      • 發送方通過源端口發送出去

      • 接收方通過目的端口接收

      • UDP分別使用兩個字節存放源端口號和目的端口號

      • 有效範圍是 0~65535

      • 給網絡層向下傳遞,UDP是傳輸層的作爲數據部分,加上IP首部形成IP分組

      • 接着往數據鏈路層傳遞,IP分組作爲數據部分,加上幀首部和尾部形成幀

      • 往物理層傳遞形成比特流傳輸出去

  • UDP的工作機制

    • UDP是一個無連接協議,傳輸數據之前不建立連接
    • 一臺服務機可以同時向多臺客戶機傳輸相同的信息
    • UDP數據報首部很短,只有8個字節,效率高
    • 沒有擁塞控制算法
    • UDP使用最大能力交付,不保證可靠交付
    • UDP是面向報文的,對報文不拆分,不合並
    • 適用於實時性要求高的場合

3. TCP

  • 傳輸控制協議 TCP

    • 是一種面向連接的,可靠的,基於字節流的傳輸層通信協議
    • TCP 位於網絡互連層之上,應用層之下
    • 由於 IP 不提供可靠的通信服務,因此主機之間要實現可靠的數據傳輸,需要使用TCP的傳輸控制
  • 傳輸過程

    • 應用層向傳輸層發送數據流
    • 然後 TCP 把數據流分成適當大小的報文段(長度受數據鏈路層的最大傳輸單元MTU限制)
    • 之後,TCP把結果數據報傳給網絡互聯層的IP,由它傳送給接收端的TCP
    • TCP爲了保證數據報不丟失,會給每一個數據報一個序號
    • 同時序號也保證接收端的按序接收
    • 接收端對成功收到的數據發回一個確認(ACK)
    • 如果發送端在返還時間(RTT)內沒有收到確認,則會認爲已丟失,會被重傳
  • TCP數據報首部的結構

在這裏插入圖片描述

  • 源端口和目的端口

  • 各佔2個字節(16個比特)

  • 端口是傳輸層和應用層的服務接口

  • 傳輸層的複用和分用功能都要通過端口才能實現

    • 序號和確認序號字段

      • 序號

      • 4個字節(32個比特)

      • TCP連接中傳送的數據流中的每一個字節對編上一個序號

      • 序號字段的值是指本報文段所發送數據段的第一個字節的序號

      • 此數據段中的序號爲 10

      • 在這裏插入圖片描述

      • 確認序號

        • 4個字節(32個比特)
      • 是期望收到對方下一個報文段的數據的第一個字節的序號

      • 如上數據段中的確認序號是 89

    • 首部長度字段

      • 佔4個比特
      • 指出TCP段的首部長度
      • 數據偏移以4個字節爲單位
    • URG 緊急比特

      • 當URG爲1時,表明緊急指針字段有效

      • 它告訴系統此報文段有緊急數據,需要儘快傳送

      • 佔1個比特

    • ACK 確認比特

      • 只有當ACK=1時,確認序號字段纔有效
      • 佔1個比特
    • PSH 推送比特

      • TCP收到PSH=1時,儘快交付接收應用程序
      • 不再等待緩存填滿再向上交付
    • RST 復位比特

      • 當RST=1的時候,表示TCP連接中出現嚴重差錯
      • 必須釋放連接,然後重新建立傳送連接
    • SYN 同步比特

      • SYN=1,表明這是一個連接請求或者接受請求(三次握手中使用)
      • 一個連接建立的過程
    • FIN 終止比特

      • 用來釋放一個連接
      • 當FIN=1時,說明此報文段發送端的數據已經發送完畢,請求釋放傳輸連接
      • 在Internet中,是一個全雙工的通信
      • 如果A沒有數據發送給B了,A請求釋放連接
      • 但是可能B還有數據發送給A,此時A只接收,不發送的狀態
      • 反之,B處於只接收,不發送的狀態
      • 這是一個往返的過程
      • 四次握手
    • 窗口字段

      • 佔16個比特
      • 用來控制對方發送的數據量,單位爲字節
      • 實現流量控制,防止擁塞發生
    • 檢驗和字段

      • 佔16個比特

      • 檢驗首部和數據這兩部分

    • 緊急指針字段

      • 16個比特

      • 緊急數據放在數據部分的開始

      • 緊急指針指出本報文段中緊急數據有多少個字段

    • 選項字段

      • 佔24個比特

      • 規定了最大報文段長度MSS

      • 告訴對方TCP:我的緩存所能接收的報文段的數據字段最大長度爲MSS個字節

      • 不包含TCP首部

    • 填充字段

      • 一行必須是4的整數倍
      • 如果不夠用0填充湊足4個字節

4. 建立連接與拆除連接

  • TCP三次握手過程

    • 李白的TCP向李信發出 連接請求報文段,其首部中的同步位 SYN=1(建立連接請求),並初始 序號seq=x,表明傳送數據的第一個字節的序號是x。(第一次握手)
    • 李信的TCP收到連接請求報文段後,如果同意,則發回確認,李信在 確認報文段中應該使SYN=1(同意連接請求)ACK=1(確認序號字段有效)確認序號ack-seq=x+1(它已經收到x了,希望收到下一個數據段x+1),自己選擇的初始序號seq=y(第二次握手)
    • 李白收到此 確認報文段後給李信發出確認其中ACK=1(確認序號字段有效),SYN=0(一個往返已經建立起連接了所以爲0),序號seq=x+1(因爲李信希望收到這個值),確認序號ack_seq=y+1(李白希望收到下一次數據段爲y+1)(第三次握手)
  • TCP四次揮手過程

    • 假設拆除連接由李白髮起,則李白向李信發送 釋放連接控制報文段並停止發送數據終止位FIN=1(此報文段數據發送完畢,請求釋放連接),初始化序號seq=u
    • 李信收到李白髮送的 報文段之後,立即向李白發送 確認報文段確認位ACK=1(確認序號字段有效),確認序號ack_seq=u+1(已經收到u了,希望收到下一個數據段爲u+1),序號seq=v,此刻李白那條鏈路已經拆除
    • 如果李信已經沒有要向李白髮送的數據,則李信向李白發送 釋放連接控制報文段,終止位FIN=1(請求釋放連接),seq=w,ack_seq=u+1(確認序號仍然是u+1)
    • 李白收到李信的 釋放連接控制報文段後向李信發送確認報文段,ACK=1(確認序號有效),序號seq=u+1(收到了這個字段),確認序號ack-seq=w+1(希望收到下一個數據段爲w+1)
    • 此時如果李信收到確認報文段之後立刻釋放連接

5. 流量與擁塞控制

  • 流量控制

    • 流量控制的目的是使發送端的數據發送速率不要太快
    • 確保接收端來得及接收,即接收端的數據緩存不會溢出
    • 通過 窗口機制 進行流量控制
    • 接收端在給發送端發送數據段(ACK=1)或單純確認段時
    • 通告剩餘接收緩存空間作爲接收窗口
    • 發送端發送數據時(TCP是全雙工的),不超過最近一次接收端通告的接收窗口大小
    • 確保接收端不會緩存溢出
  • 擁塞控制

    • TCP的擁塞控制機制也是從端到端的角度推測 網絡是否發生擁塞
    • 如果推斷髮生了擁塞,立即將數據發送速率降下來,緩解網絡擁塞
    • 通過 窗口機制 進行
      • 通過調節窗口的大小實現對數據發送速率的調整
    • 擁塞窗口cwnd
      • 單位爲字節
      • cwnd的大小取決於網絡的擁塞程度
      • 只要網絡沒有出現擁塞,就可以增大擁塞窗口,以便更多數據發送出去
      • 相當於提高發送速率
      • 一旦發生擁塞,把cwnd減小一些,緩解網絡的擁塞
    • 發送端判斷髮生擁塞的依據
      • 發送端設置一個重傳計時器RTO,對於一個發送出去的數據報文段
      • 如果在RTO重傳計時器到期後,還沒有收到來自接收端的確認,則視爲發生了擁塞
  • 擁塞控制算法

    • 慢啓動
    • 擁塞避免
    • 快速重傳
    • 快速恢復
  • 慢啓動

    • 作用在TCP數據傳輸的開始階段,避免引起網絡擁塞
    • TCP逐漸增大擁塞窗口,通常在發送數據報文段時
    • 先將擁塞窗口cwnd設置爲一個TCP最大段長度MSS的值
    • 每收到一個數據報文段的確認後,擁塞窗口cwnd就增加一個MSS的數值
    • 逐漸增大發送端的擁塞窗口
    • 使數據注入網絡的速率比較合理
    • 加性增加
      • 定義一個往返時間RTT,在慢啓動階段,每經過一個RTT往返時間,擁塞窗口cwnd的值就加倍
      • 爲了防止擁塞窗口增長過快引起擁塞,TCP需要設置一個慢啓動閾值ssthresh
      • 當擁塞窗口的值增加到閾值ssthresh時,減緩擁塞窗口的增長速度
      • 每經過一個往返時間,擁塞窗口的值就加1(單位MSS)
  • 擁塞避免算法

    • 通常擁塞窗口的初值被設置爲1慢啓動閾值的初值被設置爲16
    • 當判斷髮生了擁塞時,發送端首先將 慢啓動閾值 變爲發生超時時擁塞窗口值的一半
    • 同時將擁塞窗口的值設置爲1,重新執行慢啓動算法
    • 乘性減小
      • 當網絡頻繁出現擁塞時,慢啓動閾值下降的很快
      • 大大減少注入網絡中的數據報文段
      • TCP中的加性增加和乘性減小算法合起來稱爲AIMD算法
  • 快速重傳算法

    • 基本思想
      • 接收端每收到一個失序的數據報文段就立即發出重複確認
      • 以便於及時通知發送端有丟包的情況發生
    • 例子
      • 接收端依次收到發送端發出的1號和2號數據報文段,並對這兩個報文段發送確認
      • 沒有按序收到3號的數據報文段,而是收到了4號
      • 此時立即向發送端發送一個2號數據報文段的確認,稱爲重複確認
      • 同理如果繼續收到了5號,6號的報文段,接收端仍然向發送端發送2號報文段的重複確認
      • 此時發送端收到多個2號報文段的確認,則認爲3號報文段丟失了
      • 立即重傳一個3號報文段,不需要等待重傳計時器
    • 規定
      • 如果收到某個數據報文段的3個重複確認,則立即重傳下一個數據報文段
  • 快速恢復

    • 配合快速重傳使用

    • 基本思想

      • 發送端連續收到3個重複確認時,就將慢啓動閾值減半,預防網絡擁塞的發送
      • 將擁塞窗口的值置爲減半後的慢啓動閾值,然後開始執行擁塞避免算法
      • 使擁塞窗口緩慢的加性增大
  • 同時將擁塞窗口的值設置爲1,重新執行慢啓動算法

    • 乘性減小
      • 當網絡頻繁出現擁塞時,慢啓動閾值下降的很快
      • 大大減少注入網絡中的數據報文段
      • TCP中的加性增加和乘性減小算法合起來稱爲AIMD算法
  • 快速重傳算法

    • 基本思想
      • 接收端每收到一個失序的數據報文段就立即發出重複確認
      • 以便於及時通知發送端有丟包的情況發生
    • 例子
      • 接收端依次收到發送端發出的1號和2號數據報文段,並對這兩個報文段發送確認
      • 沒有按序收到3號的數據報文段,而是收到了4號
      • 此時立即向發送端發送一個2號數據報文段的確認,稱爲重複確認
      • 同理如果繼續收到了5號,6號的報文段,接收端仍然向發送端發送2號報文段的重複確認
      • 此時發送端收到多個2號報文段的確認,則認爲3號報文段丟失了
      • 立即重傳一個3號報文段,不需要等待重傳計時器
    • 規定
      • 如果收到某個數據報文段的3個重複確認,則立即重傳下一個數據報文段
  • 快速恢復

    • 配合快速重傳使用

    • 基本思想

      • 發送端連續收到3個重複確認時,就將慢啓動閾值減半,預防網絡擁塞的發生
      • 將擁塞窗口的值置爲減半後的慢啓動閾值,然後開始執行擁塞避免算法
      • 使擁塞窗口緩慢的加性增大