計算機網絡知識總結

計算機網絡知識總結


第一章 計算機網絡和因特網

  • 主機(端系統):所有連接到因特網上的設備,端系統通過通信鏈路和分組交換機連接到一起,可以劃分爲發送端系統接收端系統
  • 分組交換機:包括路由器、鏈路層交換機等
  • 通信鏈路:通信鏈路的傳輸速率以 比特/秒(bit/s or bps) 度量
  • 路徑(path):從發送端系統到接收端系統,一個分組所經歷的一系列通信鏈路和分組交換機稱爲通過該網絡的路徑
  • ISP(Internet Service Provider):因特網服務提供商
    1. ISP是一個由多臺分組交換機和多段通信鏈路組成的網絡
    2. ISP之間必須互聯
    3. 高層ISP和底層ISP之間無從屬關係,各個ISP網絡都是獨立管理的,ISP獨立管理使得因特網能夠有很好的擴展性
  • 網絡邊緣:一般將網絡的接入層視作網絡邊緣,如個人電腦、智能手機、智能家居等
  • 邊緣路由器:邊緣路由器是端系統到任何其他遠程端系統的路徑上的第一臺路由器
  • 接入網:指將端系統連接到其邊緣路由器的網絡
  • 上行速率和下行速率:通俗來講,上行速率是上傳速率,下行速率是下載速率
  • 家庭接入
    1. DSL(數字用戶線):通過數字用戶線DSL接入,與電話線共用一條線路,但數據信號與電話信號是分開的(使用分配器將數據信號與電話信號分開)
    2. 電纜:電纜因特網接入需要特殊的調制解調器,稱爲電纜調制解調器
    3. FTTH:Fiber To The Home 光纖到戶
    4. 撥號
    5. 衛星
  • 企業(和家庭)接入:在公司和大學校園以及越來越多的家庭環境中,使用局域網(以太網、WiFi)將端系統連接到邊緣路由器
  • 網絡核心:由互聯因特網端系統的分組交換機和鏈路構成的網狀網絡
  • 移動數據的兩種基本方式:分組交換、電路交換。在電路交換網絡中,在端系統通信會話期間,預留了端系統間沿路徑通信所需要的資源。在分組交換網絡中,這些資源是不預留的,按需使用資源
  • 分組交換
    1. 存儲轉發傳輸:存儲轉發傳輸是指在交換機能夠開始向輸出鏈路傳輸該分組的第一個比特之前,必須接收到整個分組。鏈路傳輸的速率R bps可以理解爲端系統或路由器發送或接收數據的速率
    2. 排隊時延和分組丟失:每臺分組機有多條鏈路與之相連,對於每條鏈路,該分組交換機有一個輸出緩存(輸出隊列),用於存儲分組交換機準備發往那條鏈路的分組。如果到達的分組要傳輸到某條鏈路,但發現該鏈路正忙於傳輸其他分組,則該到達的分組必須在輸出緩存中等待。因此,除了存儲轉發時延外,分組還需要承擔排隊時延。排隊時延是變化的,變化的程度取決於網絡的擁塞程度。當輸出緩存已滿時,到達一個新的分組,那麼就會發生分組丟失(丟包),到達的分組或已經排隊的分組之一將被丟棄
    3. 轉發表:每臺路由器具有一個轉發表,用於將目的地址映射成爲輸出鏈路
  • 電路交換:電路是指發送方和接收方之間建立的連接,可以通過頻分複用 FDM時分複用 TDM來實現。
  • 分組交換網絡中的時延:總時延 = 處理時延+排隊時延+傳輸時延+傳播時延
    1. 處理時延:檢查分組頭部、決定將分組導向何處、檢查比特級別的差錯等所需要的時間,處理時延一般是微秒級的
    2. 排隊時延:分組在輸出緩存中等待傳輸的時間
    3. 傳輸時延:傳輸時延爲 L / R ,其中L爲分組的長度,R爲鏈路傳輸速率
    4. 傳播時延:一個比特在鏈路中傳播所需要的時間,傳播時延爲 d / s ,d爲兩個節點之間的距離,s爲鏈路的傳播速率
  • 5層因特網協議棧
    1. 應用層:應用層是網絡應用程序及它們的應用層協議存留的地方,應用層協議包括,HTTP(提供了Web文檔的請求和傳輸)、SMTP(提供了電子郵件報文的傳輸)、FTP(提供了兩個端系統之間的文件傳送),DNS(域名系統)等。我們把應用層的分組稱爲報文(message)
    2. 運輸層:因特網的運輸層在應用程序之間傳送應用層報文(message),在因特網中,有兩種運輸協議,即TCPUDP。我們把運輸層的分組稱爲報文段(segment)
    3. 網絡層:因特網的網絡層包括IP(網際協議)以及決定路由的路由選擇協議。我們把網絡層的分組稱爲數據報(datagram)
    4. 鏈路層:網絡層將數據報下傳給鏈路層,鏈路層沿着路徑將數據報傳遞給下一個節點。我們把鏈路層的分組稱爲
    5. 物理層:物理層的任務是將幀中的一個個比特從一個節點移動到下一個節點。這層中的協議仍然是鏈路相關的,並且進一步與該鏈路的實際傳輸媒體(雙絞銅線、光纖等)相關
  • 7層OSI(開放系統互聯)模型:應用層、表示層、會話層、運輸層、網絡層、鏈路層、物理層

第二章 應用層

  • 應用層協議
    1. 定義了運行在不同端系統上的應用程序如何相互傳遞報文
    2. 定義瞭如何請求報文和傳遞報文
    3. 定義了報文中的各個字段、字段的描述、字段的語義
    4. 確定了一個進程何時以及如何發送報文,對報文進行響應的規則
    5. Attention:基於Socket(Socket對TCP / UDP進行了封裝,只有通過Socket,我們才能使用TCP / UDP提供的服務)的網絡編程的核心任務之一便是設計自己的應用層協議
  • HTTP:超文本傳輸協議(HyperText Transfer Protocol,HTTP)
    1. Web的應用層協議是超文本傳輸協議 HTTP,它是Web的核心
    2. Web頁面(page)是由對象組成的,一個對象只是一個文件,諸如一個HTML文件、一個JPEG文件、一個Java小程序、一個視頻文件等。多數Web頁面包含一個HTML基本文件以及幾個引用對象。
    3. HTTP基於TCP實現
    4. HTTP是無狀態的協議,不保存關於用戶的任何信息
    5. 非持續連接和持續連接:對於一系列請求,如果每個請求經過單獨的TCP連接發送,稱爲非持續連接;如果經過同一個TCP連接發送,稱爲持續連接,注意TCP連接打開後需要發送方或者接收方手動關閉
    6. HTTP既能夠使用非持續連接(HTTP1.1後支持),也能夠使用持續連接。默認情況下HTTP使用持續連接,HTTP客戶端和服務器也能配置成使用非持續連接
    7. 非持續連接的一些缺點:必須爲每一個請求的對象建立和維護一個全新的連接,這給Web服務器帶來了嚴重的負擔;每一個對象經受兩倍的RTT(往返時間)的交付時延
    8. 常見請求方法:GET、POST、HEAD、PUT、DELETE,這些方法在本質上並無區別,只是語義上存在區別,使用的時候按照各自的語義使用,不要混用
    9. 重要的請求頭字段
      • Accept:接收的內容類型
      • Accept-Language:接收的語言,其實就是用戶在什麼語言地區
      • Cookie
      • Content-Type:請求體中內容的MIME類型
      • User-Agent: 通常就是用戶的瀏覽器相關信息
    10. 重要的響應頭字段
      • Content-Length:響應報文的總長度
      • Last-Modified:文件最後改動時間
      • Server:服務器名字
    11. 常見狀態碼
      • 100 Continue :這個臨時響應表明,迄今爲止的所有內容都是可行的,客戶端應該繼續請求,如果已經完成,則忽略它。
      • 101 Switching Protocol :該代碼是響應客戶端的 Upgrade 標頭髮送的,並且指示服務器也正在切換的協議,如websocket。
      • 200 OK:請求成功,實體的主體部分包含了所請求的資源
      • 204 Not Content :正常響應,沒有實體
      • 206 Partial Content :範圍請求,返回部分數據,響應報文中由Content-Range指定實體內容
      • 301 Moved Permanently: 永久重定向,被請求的資源已永久移動到新位置
      • 302 Found: 臨時重定向,請求的資源現在臨時從不同的 URI 響應請求
      • 303 See Other:和302類似,但必須用GET方法
      • 304 Not Modified:狀態未改變, 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
      • 307 Temporary Redirect:臨時重定向,不該改變請求方法
      • 400 Bad Request: 通用的差錯代碼,指示該請求不能被服務器理解
      • 401 unauthorized:需要用戶認證
      • 403 Forbidden:服務器拒絕訪問對應的資源
      • 404 Not Found: 服務器上無法找到資源
      • 500 Internal Server Error:服務器遇到了不知道如何處理的情況
      • 503 Service Unavailable:服務器處於超負載或正在停機維護
      • 505 HTTP Version Not Supported:服務器不支持請求報文使用的HTTP協議版本
    12. Web緩存(Web cache):Web緩存也叫代理服務器(proxy server),它是能夠代表初始Web服務器來滿足HTTP請求的網絡實體。 Web cache的工作流程如下
      • 瀏覽器創建一個到Web緩存的TCP連接,並向Web緩存中的對象發送一個HTTP請求
      • Web緩存進行檢查,看本地是否存儲了該對象的副本。如果有,Web緩存就向瀏覽器用HTTP響應報文返回該對象
      • 如果Web緩存中沒有該對象,它就打開一個與該對象的初始服務器的TCP連接,併發送一個對該對象的HTTP請求。在收到該請求後,初始服務器向Web緩存發送具有該對象的HTTP響應
      • 當Web緩存收到該對象時,它在本地存儲一份副本,並向瀏覽器用HTTP響應報文發送該副本
    13. Web緩存的作用
      • 可以大大減少對客戶請求的響應時間,特別是當客戶與初始服務器之間的瓶頸寬帶遠低於客戶與Web緩存之間的瓶頸寬帶時
      • 大大減少一個機構的接入鏈路到因特網的通信量,降低了增加寬帶需要的費用
  • SMTP:簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)
  • FTP:文件傳輸協議(File Transfer Protocol,FTP)
  • DNS:域名系統(Domain Name System,DNS)
    1. 識別主機的兩種方式:主機名、IP地址。人們喜歡便於記憶的主機名標識方式,而路由器喜歡定長的、有着層次結構的IP地址。爲了折衷這些不同的偏好,我們需要一種能進行主機名到IP地址轉換的目錄服務,這就是域名系統的主要任務
    2. DNS的主要任務:域名解析(主機名到IP地址轉換)
    3. DNS的其他任務
      • 主機別名
      • 郵件服務器別名
      • 負載均衡
    4. DNS的特點
      • 一個分層的DNS服務器實現的分佈式數據庫
      • 一個使得主機能夠查詢分佈式數據庫的應用層協議,DNS雖然是應用層協議,但實現的是網絡層的功能
      • DNS協議基於UDP實現,使用53號端口
      • DNS通常是由其他應用層協議所使用的,包括HTTP、SMTP、FTP
    5. 瀏覽器使用DNS服務的步驟
      • 同一臺主機同時運行着瀏覽器和DNS客戶端
      • 瀏覽器從URL中抽取出主機名,並將主機名傳給DNS客戶端
      • DNS客戶端向DNS服務器發送一個包含主機名的請求
      • DNS客戶端最終會收到一份回答報文,其中含有對應於該主機名的IP地址
      • 一旦瀏覽器接收到來自DNS客戶端的IP地址,它就能夠向位於該IP地址80端口的HTTP服務器發起一個TCP連接
    6. DNS層次結構
      • 根DNS服務器:有400多個根域名服務器遍及全世界,提供TLD服務器的IP地址
      • 頂級域(Top-Level Domain,TLD)DNS服務器:對於每個頂級域(如com、org、net、edu等)和所有國家的頂級域(如uk、fr、ca等),都有TLD服務器或服務器集羣。TLD服務器提供了權威DNS服務器的IP地址
      • 權威DNS服務器:在因特網上具有公共可訪問主機的每個組織必須提供可訪問的DNS記錄,這些DNS記錄將主機的名字映射爲IP地址。組織要麼實現自己的權威DNS服務器,要麼支付費用,將這些DNS記錄存儲在其他服務提供商的權威DNS服務器中。
      • 本地DNS服務器:每個ISP都有一臺本地DNS服務器。當主機發出DNS請求時,該請求被髮往本地DNS服務器,它起着代理的作用,並將該請求轉發到DNS服務器層次結構中
    7. DNS緩存:每當本地DNS服務器從某個DNS服務器接收到一個回答,它能夠緩存包含在該回答中的任何信息。由於主機名和IP地址間的映射關係並不是永久的,DNS服務器在一段時間後(通常設置爲2天)將丟棄緩存的信息

第三章 運輸層

  • 概述

    1. 運輸層協議爲運行在不同主機上的應用程序之間提供了邏輯通信功能,網絡層協議提供了主機之間的邏輯通信,注意兩者之間的區別(可以將網絡層協議看做是如何找到你的家庭,將運輸層協議看做是如何找到你)
    2. 運輸層協議是在端系統中而不是路由器中實現的。實現的方法是將應用層的報文(message)劃分爲較小的塊,併爲每塊加上一個運輸層首部以生成運輸層報文段(segment)。然後在發送端系統中,運輸層將這些報文段傳遞給網絡層,網絡層將其封裝成數據報(datagram)並向目的地發送。Attention:報文沒有大小限制,報文段和數據報有大小限制
  • 運輸層的多路複用與多路分解

    1. 概述:將主機間交付擴展到進程間交付被稱爲運輸層的多路複用與多路分解
    2. 套接字(Socket)
      • 一個進程有一個或多個套接字,套接字相當於從網絡向進程傳遞數據和從進程向網絡傳遞數據的門戶,Socket可以視作應用層和運輸層中間的一層
      • 每個套接字都有唯一的標識符
      • 套接字標識符的格式取決於它是UDP套接字還是TCP套接字
      • Attention:一般的Web應用服務器(如Tomcat、Apache等)使用多線程(線程池,使用進程的開銷過大)來處理多個用戶的同時訪問,Sokect由四元組(源IP地址,源端口號,目的IP地址,目的端口號)標識,所以這些用戶會對應不同的Socket。多個線程可以同時操作同一個Socket,但需要自己進行同步,什麼情況下需要使用多線程操作同一個Socket?
    3. 多路複用:在源主機從不同套接字中收集數據塊(具體來說是報文,message),併爲每個數據塊封裝上首部信息從而生成報文段,然後將報文段傳遞到網絡層,所有這些工作稱爲多路複用
    4. 多路分解:將運輸層報文段中的數據交付到正確的套接字的工作稱爲多路分解
    5. 端口號:端口號是一個16比特的數,大小在0 - 65535之間。0 - 1023範圍的端口號稱爲周知端口號,是受限的,保留給諸如HTTP(80)和FTP(21)之類的周知應用層協議來使用的
    6. UDP套接字
      • 一個UDP套接字由一個二元組標識,(目的IP地址,目的端口號)
      • UDP套接字的標識中沒有源IP地址和源端口號,也就是說一個UDP套接字可以接收任何主機發送給它的數據,進而可以得知UDP是一個無連接的協議
    7. TCP套接字
      • 一個TCP套接字由一個四元組標識,(源IP地址,源端口號,目的IP地址,目的端口號)
      • TCP是面向連接的
    8. Attention:很多編程語言提供了傳入一個port,創建一個Sokcet對象的API。這會令很多對Socket理解不深刻的人產生這樣一個誤解——一個Sokcet對應一個port,創建新的Socket需要分配新的port,這樣爲數不多的端口號很快就會被用完。需要強調的一點是Socket是由四元組(源IP地址,源端口號,目的IP地址,目的端口號)標識的,只要有一項不一樣,那麼就是不一樣的Socket;端口號是可以複用的,一個端口號可以被多個Socket使用
  • UDP

    1. 所做工作:僅實現了多路複用與多路分解、差錯檢測
    2. UDP的特點
      • 無須建立連接
      • 無連接狀態
      • 分組首部開銷小,UDP僅有8個字節的首部開銷
      • 不可靠的數據傳輸
      • 無擁塞控制
    3. 應用場景:DNS、視頻應用、遊戲
  • 可靠數據傳輸原理

    1. 肯定確認(positive acknowledgment,ACK)與否定確認(negative acknowledgment,NAK):使得接收方可以讓發送方知道哪些內容被正確接收,哪些內容接收有誤並因此需要重新發送
    2. 自動重傳請求(Automatic Repeat reQuest,ARQ)協議:基於差錯檢測、接收方反饋(ACK、NAK)、重傳(接收方收到有差錯的分組時,發送方將重傳該分組)實現
    3. 序號:爲數據分組添加序號使得接收方能夠區分是新的數據分組,還是一次重傳
    4. 停等協議:每發送完一個分組就停止發送,等待對方的確認,在收到確認後(ACK)再發送下一個分組。停等協議的性能很低,會使得通信鏈路大部分時間處於空閒的等待狀態。
    5. 解決丟包問題的基本思路:等待一定的時間以確定分組已經丟失,然後發送方重傳這個分組。爲了實現基於時間的重傳機制,需要一個定時器
    6. 冗餘數據分組:如果一個分組經歷了一個特別大的時延,發送方可能會重傳該分組,即使該數據分組及其ACK都沒有丟失,這就在發送方到接收方的信道中引入了冗餘數據分組
    7. 如何解決停等協議性能低下的問題:解決此問題的思路也很簡單,就是設計一個不以停等方式運行,允許發送方發送多個分組而無須等待確認的協議(流水線)。爲此,我們必須做如下工作
      • 必須增加序號範圍,因爲每個輸送中的分組必須有一個唯一的序號,而且也許有多個在輸送中的未確認報文
      • 協議的發送方和接收方兩端也許不得不緩存多個分組。發送方最低限度應當能夠緩存當前已發送但沒有確認的分組,接收方需要緩存哪些已經正確接收的分組
      • 所需序號的範圍和對緩衝區大小的要求取決於數據傳輸協議如何處理丟失、損壞及時延過大的分組。解決流水線的差錯恢復有兩種基本方法:回退N步(Go-Back-N,GBN)和選擇重傳(Selective Repeat,SR)
    8. 回退N步(BGN,也被稱作滑動窗口協議):對於GBN中的序號範圍,我們將基序號(base)定義爲最早未確認的分組的序號,將下一個序號(next)定義爲最小的未被使用的序號
      • 劃分序號範圍
        • 已經發送並被確認的分組:序號範圍[0,base-1]
        • 已經發送但未被確認的分組:序號範圍[base,next-1]
        • 將被立即發送的分組:序號範圍[next,base+N-1]
        • 暫時不能使用的分組:序號>=base+N
      • N被稱爲窗口長度,出於流量控制的考量,必須要控制窗口的長度,不能使其無限大
      • 具體的細節
        • 累積確認:接收方一次交付給上層一個分組,如果分組k已經交付,則所有序號比k小的分組也已經交付
        • 接收方丟棄所有失序分組:這種方法的優點是接收緩存簡單,即接收方不需要緩存任何失序分組,接收方需要維護的唯一信息就是下一個按序接收的分組的序號
        • 發送方接收到當前期待的ACK時,窗口向前滑動,發送方便可以發送新的分組
        • 如果出現超時,發送方重傳所有已發送但還未確認的分組,這便是Go-Back-N
    9. 選擇重傳(SR)
      • GBN存在的問題:單個分組的差錯能夠引起GBN重傳大量分組,許多分組根本沒必要重傳。隨着信道差錯率的增加,流水線可能會被這些不必要重傳的分組所充斥
      • 改進方式
        • SR接收方將確認(發送ACK)每一個正確接收的分組而不管其是否按序,失序的分組將被緩存直到所有序號更小的分組都被收到爲止,這時纔可以將一批分組按序交付給上層
        • 超時時,發送方僅重傳當前未被確認的第一個分組,即序號爲base的分組
        • Attention:窗口長度必須<=序號空間的一半,否則無法區分兩次不同的上層調用
  • TCP

    1. 所做工作:多路複用與多路分解、差錯檢測、可靠數據傳輸、擁塞控制
    2. MSS(最大報文段長度):MSS通常根據最初確定的由本地發送主機發送的最大鏈路層幀長度來設置。設置該MSS要保證一個TCP報文段加上TCP/IP首部長度(通常40字節)適合單個鏈路層幀
    3. 超時間隔加倍:在網絡擁塞的情況下,會出現丟包或者排隊時延過長的情況,這會導致超時。如果源連續重傳分組,會使擁塞情況更加嚴重。相反的,TCP使用更文雅的方式,每次重傳後的超時時間間隔翻倍
    4. 快速重傳:一旦收到3個冗餘的ACK,TCP就執行快速重傳
    5. 選擇重傳:超時時,選擇當前具有最小序號的未確認分組重傳
    6. 流量控制:TCP通過讓發送方維護一個稱爲接收窗口的變量來提供流量控制
    7. TCP連接管理
      • TCP三次握手
        • 第一次握手:首先客戶端向服務器發送建立連接的請求,TCP報文段中SYN標誌位被設置爲1,並且隨機產生一個序號k(收到對於該序號的確認時,表示客戶端到服務器的連接建立好),之後客戶端進入SYN_SENT狀態,等待Server確認
        • 第二次握手:服務器收到客戶端的SYN標誌位爲1的報文段後,知道客戶端想要建立連接。此時服務器將SYN和ACK標誌位均設置爲1(SYN設置爲1,表示想要建立連接;ACK設置爲1,表示這個報文段是一個ACK),並隨機產生一個序號j(收到對於該序號的確認時,表示服務器到客戶端的連接建立好),將確認號設置爲k+1(注意確認號與ACK標識位不一樣,ACK標誌位表示是否是一個ACK,ACK標誌位只能是1或者0),服務器從LISTEN狀態進入SYN_RCVD狀態
        • 第三次握手:客戶端檢查是否正確收到服務器的ACK,如果正確客戶端進入ESTABLISHED狀態,併發送對於服務器ACK包的確認包(SYN=0,ACK=1,ack=j+1),最後服務器檢查是否正確接收到客戶端的ACK,如果正確接收到則服務器進入ESTABLISHED狀態
        • 簡單說來就是:客戶端請求與服務器建立連接;服務器通知客戶端可以連接;客戶端告訴服務器自己還在,連接建立成功
        • 爲什麼需要三次握手而不是兩次握手?如果是兩次握手,那麼服務器將一直處於SYN_RCVD狀態,TCP連接無法建立。用生活中的例子類比,比如你發消息給女朋友,問:“在嗎?”,這相當於第一次握手,然後你女朋友回了一句:“在”,這是第二次握手,然後你們就可以愉快地聊天了。似乎兩次握手就可以了,爲什麼還需要三次握手呢?其實,由於人類太過智能,很多細節都被省略了。你女朋友的“在”,其實應該是“在,你還在嗎?”,然後你回的第一條消息包含了對這個問題的確認,此時連接纔算正式建立起來。機器沒有人類那麼智能,必須一步一步按照邏輯來執行,所以三次握手必不可少。
      • TCP四次揮手
        • 第一次揮手:client發送一個FIN,用來關閉client到server的數據傳送,client進入FIN_WAIT_1狀態(接收ACK,不發送)
        • 第二次揮手:server收到FIN後,發送一個ACK給client,server進入CLOSE_WAIT狀態,client收到ACK後進入FIN_WAIT_2狀態(接收FIN。發送ACK)
        • 第三次揮手:server發送一個FIN,用來關閉server到client的數據傳送,server進入LAST_ACK狀態
        • 第四次揮手:client收到FIN後,client進入TIME_WAIT狀態,接着發送一個ACK給server,server收到後進入CLOSED狀態,完成四次揮手。client定時等待結束後進入CLOSED狀態
    8. TCP擁塞控制
      • 使用端到端擁塞控制
      • 思路:讓每一個發送方根據所感知到的網絡擁塞程度來限制其能向連接發送流量的速率。如果一個TCP發送方感知從它到目的地之間的路徑上沒什麼擁塞,則TCP發送方增加其發送速率;如果發送方感知沿着該路徑有擁塞,則發送方就降低其發送速率
      • 如何判斷出現了擁塞?當發生丟包事件(超時或者收到3個冗餘的ACK)時,發送方就認爲在發送方到接收方的路徑上出現了擁塞
      • 指導原則:一個丟失的報文段意味着擁塞,因此當丟失報文段時應當降低TCP發送方的速率;一個確認報文段表示該網絡正在向接收方交付發送方的報文段,因此,當對先前未確認的報文段的確認到達時,增加發送方的速率
      • TCP擁塞控制算法:慢啓動、擁塞避免、快速回復
        • 慢啓動:cwnd的值以1個MSS開始並且每當傳輸的報文段首次被確認就增加1個MSS,這樣使得每過一個RTT,發送方的發送速率就翻倍,呈指數增長。最開始和超時時都會進入慢啓動狀態,超時進入慢啓動狀態時,threshold = cwnd / 2,cwnd = 1
        • 擁塞避免:當發送速率>=threshold時,發送速率的增長速率爲 1 MSS / RTT
        • 快速恢復:當發送方接收到3個冗餘的ACK時,進入快速恢復狀態,threshold = cwnd / 2,cwnd = threshold + 3MSS。處於快速恢復狀態時,發送方每收到一個重複的ACK,cwnd就增加1個MSS。當超時時,進入慢啓動狀態;成功收到新的ACK時,就進入擁塞控制狀態,此時cwnd被設置爲threshold。快速恢復的作用在於使發送方提前重傳可能導致超時的報文段,而不是等到超時時再重傳
        • Attention:慢啓動和擁塞避免是必需的,快速恢復是非必需的
發佈了11 篇原創文章 · 獲贊 7 · 訪問量 1915
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章