面試準備

第一章 基本概念

速率

速率是指:單位時間傳輸的比特數。單位爲bit/s。java

帶寬

在計算機中,帶寬是某通道的最高數據傳輸速率。單位是bit/s。算法

吞吐量

表示單位時間內經過某個網絡的實際的數據量。緩存

時延

指數據從網絡的一端傳輸到另外一端須要的時間。分爲發送時延(傳輸時延),傳播時延,處理時延和等待時延。服務器

發送時延指:主機或路由器發送數據幀所須要的時間。也就是從發送數據幀的第一個比特算起,到該幀的最後一個比特發送完畢所需的時間。計算公式爲:
\[ 發送時延= \frac{數據幀長度}{發送速率} \]
傳播時延:電磁波在信道中傳播必定距離須要花費的時間。與信道長度和電磁波在信道上的傳播速率有關。網絡

處理時延:主機或路由器在收到分組時須要花費必定的時間進行處理。例如分析首部,提取數據,查找路由等。socket

排隊時延:分組在進入路由器後,要先在輸入隊列中排隊等待。tcp

總時延 = 發送時延+傳播時延+排隊時延+處理時延性能

往返時間RTT:從數據徹底發出到接收到數據的時間。

五層協議

物理層、數據鏈路層、網絡層、傳輸層、應用層。學習

七層協議

將應用層分解爲會話層、表示層和應用層。測試

應用層:經過進程間的交互來完成特定的網絡應用。應用層協議有:HTTP,DNS,SMTP等。

傳輸層:向兩臺主機中的進程直接的通訊提供通用的數據傳輸服務。主要協議有:TCP和UDP。

網絡層:爲分組交換網上的不一樣主機提供通訊服務。在發送數據時,網絡層把運輸層的報文段或用戶數據報封裝成分組或包進行傳送。簡稱數據報。網絡層的另外一個任務是選擇合適的路由,使源主機運輸層所傳下來的分組,可以經過網絡中的路由器找到目的主機。

數據鏈路層:在兩個相鄰結點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀,在兩個相鄰結點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(同步信息,差錯控制信息)。

只有物理層不加控制信息。

第 3 章 數據鏈路層

數據鏈路層使用的信道主要有:

  • 點對點信道
  • 廣播信道

用於解決分組在一個網絡中傳輸到另外一個設備或者路由器的問題(局域網中傳輸)。

數據鏈路層的三個基本問題:封裝成幀,透明傳輸和差錯控制。

封裝成幀:每一個幀的組成包括:幀首部、幀的數據部分(IP數據報)、幀尾部。其中,幀的數據部分的最大長度稱爲最大傳輸單元 MTU。幀首部和幀尾部的字符稱爲控制字符,SOH,EOT。

透明傳輸:當數據部分存在和控制字符相同的字符時,就不是透明傳輸了,此時,數據鏈路層會自動在數據部分的字符前面插入轉義字符ESC,對應的值爲0X1B。此種方法稱爲字符填充。若是數據部分出現轉義字符,則再插入一個轉義字符。

差錯控制:在傳輸過程當中,一些比特的值被改變。數據鏈路層經過CRC 循環冗餘校驗碼進行檢錯。

點對點協議PPP

設備要聯網時,用ppp協議和ISP進行通訊,獲取ip地址,從而上網。

設備經過網卡或適配器與局域網鏈接。

集線器僅僅上物理上拓展了局域網規模,屬於物理層設備。僅僅起到轉發的做用,沒有碰撞檢測。當有兩個接口同時接收到信號時,會產生碰撞。

MAC地址

佔48位。可看做每臺計算機的物理地址。是計算機的惟一標識。其實就是適配器的地址,或網卡地址。

mac幀最小長度爲64位。其中 ip 數據報的最小長度爲46位。

數據鏈路層擴展局域網的方法是使用交換機。交換機有一個地址表,裏面存放的是MAC地址和端口之間的映射關係。交換機是經過自學習算法來創建地址表的。

第 4 章 網絡層

網絡層向傳輸層提供簡單靈活的,無鏈接的盡最大努力交付的數據報服務。

網絡再發送分組時不須要先創建鏈接。每個分組獨立發送,與先後的分組無關。

與 IP 協議配套使用的還有三個協議:

  • 地址解析協議 ARP
  • 網際報文控制協議 ICMP
  • 網際組管理協議 IGMP

網絡中使用的中間設備有:

  1. 物理層的轉發器,即中繼器
  2. 數據鏈路層的網橋,即交換機,網卡
  3. 網絡層的路由器
  4. 網絡層以上使用的中間設備時網關。用網關鏈接兩個不兼容的系統須要在高層進行協議轉換。

當中間設備是轉發器或網橋時,這僅僅是把一個網絡擴大了,而從網絡層的角度看,這仍然是一個網絡,通常並不稱之爲網絡互聯。網關因爲比較複雜,目前使用的較少。

IP 地址

IPv4地址有32位,分爲4段,每段8位。IP地址的編址方法共經歷過三個歷史階段。

  • 分類的IP地址.A、B、C類地址,網絡號分爲佔1,2,3字節。且在網絡號字段的最前面有1~3 位的類別位,數值分別規定位0,10和110。
  • 子網的劃分
  • 構成超網

A,B和C類IP地址的主機號可取值不能爲全0和全1,全0主機號爲本主機,全1主機號位表示本網絡號中的全部主機,廣播地址。

A類地址的網絡號不能爲全0和全1。全0爲本網絡,全1爲迴環測試。

B類的網絡號不能爲128.0.0.0;最小的網絡號爲128.1.0.0。因此網絡號要減1。

C類的網絡號可取的21位也不能爲全0.網絡號也要減1。

路由器僅根據目的主機所鏈接的網絡號來轉發分組,這樣可使路由表中的項目數大幅度減小,從而減少了路由表所佔的存儲空間和查找路由表的時間。

ip地址是標記一臺主機和一條鏈路的接口。當一臺主機同時鏈接到兩個網絡上時,該主機必須具有兩個相應的ip地址,其網絡號必須不一樣。因爲路由器至少鏈接到兩個網絡,所以一個路由器至少應當有兩個不一樣的ip地址。同時具有兩個mac地址。

數據在網絡中傳輸時,數據中的源ip和目的IP不會改變,可是源MAC和目的MAC會一直改變。

地址解析協議ARP

由 ip 地址查詢 MAC 地址。因爲 ip 協議使用 arp 協議,因此,一般將 arp協議劃歸爲網絡層。但 ARP 協議的用途是爲了從網絡層使用的 ip 地址,解析出在數據鏈路層使用的MAC 地址。

每一臺主機有一個 ARP高速緩存,裏面有本局域網上的各主機和路由器的 IP 地址到硬件地址的映射表。下面是主機如何創建映射表的過程。

當主機A要向本局域網上的主機 B 發送數據時,先在其 ARP 高速緩存中查看有無主機 B 的 IP 地址。若有,就在 ARP 高速緩存中查出對應的 MAC 地址,再把這個硬件地址寫入 MAC 幀。經過局域網把 MAC 幀發往主機B。

當沒法查到 B的 MAC 地址時,主機A自動運行ARP:

  1. ARP進程再本局域網上廣播一個ARP請求分組。分組內容包括源MAC,源IP,目的IP。
  2. 再本局域網上的全部主機上運行的ARP進程都收到此ARP請求分組。
  3. 主機B的IP地址與ARP請求分組中要查詢的IP地址一致,就手下這個ARP請求分組,並向主機A發送ARP響應分組,再分組中寫入本身的MAC地址。
  4. ARP請求時廣播發送,可是ARP響應時普通的單播,即從一個源地址發送到一個目的地址。
  5. 主機收到ARP響應後,就將B的Mac地址寫入ARP高速緩存中。
  6. ARP對保存在高速緩存中的每個映射地址項目都設置生存時間。凡超過生存時間的項目就從高速緩存中刪掉。

請注意,ARP時解決同一個局域網中的主機或路由器的IP地址和MAC地址的映射問題。若是要找的主機和源主機再也不同一個局域網上,就沒法解析出另外一個局域網中主機的MAC地址。此時,主機會將第一跳路由的MAC地址做爲目的MAC。寫入ARP高速緩存

下面概括出ARP的四種典型狀況:

  1. 發送方是主機,要把IP數據報發送到同一個網絡上的另外一臺主機。這時,源主機發送ARP請求分組,找到目的主機的MAC地址。
  2. 發送方是主機,要把數據報發送到另外一個網絡上的主機。這時發送方發送ARP請求分組,找到同網絡上的一個路由器的MAC地址。剩餘的工做由路由器來完成。
  3. 發送方是路由器,要把數據報轉發到同一個網絡中的主機,這時,路由器發送 ARP 請求分組,找到目的主機的 MAC 地址。
  4. 發送方是路由器,要把數據報發送到另外一個網絡上的主機。這時,路由器發送 ARP 請求分組,找到鏈接在同一個網絡上的另外一個路由器的 MAC地址。剩餘工做由目的路由器來完成。

互聯網使用ip而不是mac地址進行通訊的緣由是mac地址結構不一樣,要進行通訊,須要很是負責的轉換。

IP數據報格式

1

一個IP數據報由首部和數據兩部分組成。首部的前一部分是固定長度,共20字節,是全部IP數據報必須具備的。在首部的固定部分之和是一些可選字段,其長度可變。下面介紹首部各字段的含義。

  1. 版本:佔4位,指IP協議的版本通訊雙方使用的IP協議的版本必須一直。
  2. 首部長度:佔4位,可表示的最大十進制數是15。可是,首部長度字段所表示數的單位是32位字。由於IP首部的固定長度爲20字節,所以首部長度字段的最小值爲5.而當首部長度爲最大值時,就代表首部長度達到最大值15個32位字長,即60個字節。當IP分組的首部長度不是4字節的整數倍時,必須利用最後的填充字段加以填充。所以IP數據報的數據部分永遠在4字節的整數倍時開始。
  3. 區分服務:8位,通常不使用。
  4. 總長度:指首部長度和數據長度之和,單位爲字節。總長度字段爲16位,所以數據報的最大長度爲65535個字節。現實中不多有這麼長的數據報。

數據鏈路層的最大傳送單元,MTU(mac幀數據部分的最大長度)。以太網中MTU爲1500字節。IP協議規定,數據報最大長度不超過576字節。從而IP層接收到的數據最大長度不超過512字節,這是假定IP首部爲最大長度60字節,外加4字節冗餘。就獲得576字節。不然,要進行分片。在進行分片時,數據報首部的總長度字段是指分片後每個分片的首部長度與該分片的數據長度的總和。

  1. 標識:佔16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1。當數據報須要分片時,此標識會複製給全部的數據報片的標識字段。相同的標識字段的值使分片後的各數據報片最後能正確地重裝爲原來的數據報。
  2. 標誌:佔3位,但只有兩位有意義。
    • 最低位MF。MF = 1 表示後面還有分片。MF = 0 表示這是若干數據報片的最後一個。
    • 中間一位記爲 DF,意思是不能分片。只有當 DF = 0時才容許分片。
  3. 片偏移:佔13位。片偏移指出;較長的分組在分片後,某片在原分組中的相對位置。也就是說,片偏移以8字節爲偏移單位。也就是說,每片的長度必定是8字節的整數倍。值噹噹前片第一個字節在整個數據部分的序號。序號從0開始。
  4. 生存時間:佔8位,縮寫位TTL,代表數據報在網絡中的壽命。由發出數據報的源點設置這個字段。目前該字段表示跳數限制。路由器在每次轉發數據報以前就把TTL值減1.若TTL值減少到0,就丟棄這個數據報。
  5. 協議:佔8位,協議字段指出此數據報攜帶的數據是使用何種協議,以便目的主機的IP層應將數據部分上交給哪一個協議進行處理。
  6. 首部校驗和:佔16位。這個字段只檢驗數據報的首部,不包括數據部分。由於數據報沒通過一個路由器,路由器都要從新計算首部檢驗和(一些字段,如生存時間,標誌,片偏移可能發生變化)。

IP層轉發分組的流程

分組轉發算法以下:

  1. 從數據報的首部提取目的主機的IP地址 D,獲得目的網絡地址爲N。
  2. 若N就是此路由器直接相連的某個網絡地址,則進行直接交付,不須要通過其餘的路由器,直接把數據交付目的主機(這裏包括把目的主機D轉換爲具體的硬件地址,把數據報封裝爲MAC幀,再發送此幀)。不然就是間接交付。執行下一步。
  3. 若路由表中有目的地址爲D的特定主機路由,則把數據報傳送給路由表中指明的下一條路由;不然執行下一步。
  4. 若路由表中有到達網絡N的路由,則把數據報傳送給路由表中指明的下一跳路由,不然執行下一步。
  5. 若路由表中有默認路由,則把數據報傳送給路由表中指明的默認路由,不然執行下一步。
  6. 報告轉發分組出錯。

劃分子網

二級IP地址到三級IP地址

A類網絡包含的主機號太多,A類網絡中的路由器的路由表太龐大。且不少A、B、C類網絡的主機號利用率不高。

給IP地址增長一個子網號字段,使兩級IP地址變爲三級IP地址。提升IP的利用率。這種作法叫作劃分子網。

劃分子網的思路以下:

  1. 一個擁有許多物理網絡的單位,可將所屬的物理網絡劃分爲若干個子網。劃分子網是網絡內部的事,對外仍然表現爲一個網絡。
  2. 劃分子網的方法是從網絡的主機號借用若干位做爲子網號,固然主機號也就相應減小了一樣的位數。因而兩級IP地址在本單位內部變成了三級IP地址:網絡號、子網號和主機號。
  3. 反射從其餘網絡發送給本單位某臺主機的IP數據報,仍然根據IP數據報的目的網絡號找到鏈接本單位網絡的路由其。但此路由器在收到IP數據報後,再按目的網絡號和子網號找到目的子網,把IP數據報交付給目的主機。
子網掩碼

路由器中爲了提取出子網的網絡地址,須要再路由表中插入一列,對應各自目的IP地址的子網掩碼。從而無論是否採用了子網,都能正確的提取出網絡地址。

無分類編址CIDR(構造超網)

CIDR 消除了傳統的A、B、C類地址以及劃分子網的概念,於是能更加有效地分配ipv4的地址空間。CIDR把32位的IP地址分爲先後兩個部分。前面部分是網絡前綴,用來指明網絡,後面部分用來指明主機。即IP分爲網絡前綴和主機號。

  • CIDR使用斜線記法,即再IP地址後面加上斜線"/",而後寫上網絡前綴所佔的位數。
  • CIDR把網絡前綴都相同的連續的IP地址組成一個CIDR地址塊。可是,通常主機號爲全0或者全1的地址不使用。

CIDR不使用子網是指CIDR並無在32位地址中指明若干位做爲子網字段。但分配到一個CIDR地址塊的單位,仍然能夠在本單位內根據須要劃分子網。

網際控制報文協議 ICMP

ICMP 工做於網絡層。ICMP的報文是封裝在IP數據報中,做爲數據報的數據部分發送。

ICMP 報文分爲差錯報告報文和詢問報文(ping)。

  1. 差錯報告報文分爲四種:
    • 終點不可達:當路由器或主機不能交付數據報時,就向源點發送終點不可達報文。
    • 時間超時:當路由器收到生存時間爲0的數據報時,除丟棄該數據報外,還要向源點發送時間超時報文。當終點在預約時間內不能收到一個數據報的所有數據報片時,就把已收到的數據報片丟棄,並向源點發送時間超時報文。
    • 參數問題:當路由器或目的主機收到的數據報的首部中有的字段值不正確時,就丟棄該報文,並向源點發送時間超時報文。
    • 改變路由(重定向) :路由器把改變路由報文發送給主機,讓主機知道下次應該將數據報發送給另外的路由器。

路由選擇協議

路由選擇協議分爲兩大類:內部網關協議IGP 和外部網關協議EGP。分別稱爲域內路由選擇和域間路由選擇。內部網關協議具體的有:RIP和OSPF。外部網關協議時BGP。

第 5 章 傳輸層

通訊的真正斷電並非主機而是主機中的進程。也就是說,端到端的通訊時應用進程之間的通訊。而網絡層只能將數據傳輸到目的主機,不能交付給目的進程,這須要傳輸層經過識別端口號來完成。

網絡層爲主機之間提供邏輯通訊。運輸層爲應用進程之間提供端到端的邏輯通訊。

傳輸層的協議有兩種:面向鏈接的傳輸控制協議 TCP 和無鏈接的用戶數據報協議 UDP。

TCP 提供面向鏈接的服務。在傳送數據以前必須先創建鏈接,數據傳送結束後要釋放鏈接。TCP 不提供廣播或多播服務。

常見的應用層協議中:HTTP、FTP、SMTP、TELENT是採用TCP進行傳輸的,其餘採用UDP進行傳輸。

TCP 中使用 16 位的端口號來標識不一樣的進程。端口號只具備本地意義,只是爲了標識本計算機應用層中的各個進程。

UDP

UDP 的主要特色是:

  • 無鏈接的。發送數據以前不須要創建鏈接。所以,減小了開銷和發送數據前的時延。
  • 盡最大努力交付,即不保證可靠的交付。
  • 面向報文的。發送方的UDP 對應用程序交下來的報文,在添加首部後就向下交付IP層。UDP對應用層交下來的報文,既不合並,也不拆分,二十保留這些報文的邊界。所以,UDP一次交付一個完整的報文。
  • UDP 沒有擁塞控制。
  • UDP支持一對1、一對多、多對1、多對多的交互通訊。
  • UDP的首部開銷小。

UDP中也有校驗字段。把首部和數據都進行校驗。

TCP

TCP的特色

  • 面向鏈接的運輸層協議。應用在使用TCP 以前必須先創建 TCP 鏈接。在傳送數據完畢後,必須釋放創建的 TCP 鏈接。
  • 每一條 TCP 鏈接只能有兩個端點,每一條 TCP 鏈接都只能是點對點的。
  • TCP 提供可靠交付的服務。通 TCO 鏈接傳送的數據,無差錯、不丟失、不重複,而且按序到達。
  • TCP 提供全雙工通訊。TCP 鏈接的兩端都設有發送緩存和接收緩存,用來臨時存放雙向通訊的數據。在發送時,應用程序在把數據傳送給 TCP 的緩存後,就作本身的事了。TCP 在合適的時候把數據發送出去。在接收時,TCP 把收到的數據放入緩存,上層的應用進程在合適的時候讀取緩存中的數據。
  • 面向字節流。TCP 中的流指的是流入到進程或從進程流出的字節序列。"面向字節流"的含義是:雖然應用程序和TCP 的交互是一次一個數據塊(大小不等),但 TCP 把應用程序交下來的數據僅僅當作是一連串的無結構的字節流。TCP 並不知道所傳送的字節流的含義。

TCP 鏈接的端點是 IP 和端口號構成的套接字 socket。每一條 TCP 鏈接惟一的被通訊兩端的兩個端點(即兩個套接字)所肯定。

可靠傳輸的原理

中止等待協議

發送方每次發送一個分組,等收到對方的應答後,再發送下一個分組。若是在有限時間內沒有收到對方應答,就超時重發。當收到對方的重複應答,就丟掉第二個應答。接收方在收到重複數據時,丟掉重複分組。並返回收到應答信號。這種可靠傳輸協議稱爲自動重傳請求 ARQ。

中止等待協議的信道利用率不高,爲了提升利用率,能夠一次連續發送多個分組。等前面的分組收到後,再滑動發送窗口,持續發送。

接收方採用累計確認的方式。接收方沒必要對收到的每一個分組逐個發送確認,而是再收到幾個分組後,對按序到達的最後一個分組發送確認,這就標識:到這個分組爲止的全部分組都已正確收到了。

累計確認的優勢是:容易實現,即便確認丟失也沒必要重傳。但缺點是不能向發送方反映出接收方已經正確收到的全部分組的信息。例如接收方已經收到1,2,4,5分組,缺失分組3,此時,接收方只能返回2,表示前兩個分組已經收到,此時發送方須要從新發送後3個分組。稱做回退N。

TCP 報文格式包括:

  • 源端口
  • 目的端口
  • 序號:在TCP鏈接中傳送的字節流中每一個字節都按序編號。首部中的序號字段值指的是本報文段所發送數據的第一個字節的序號。
  • 確認號:佔4字節,是指望收到對方下一個報文段的第一個數據字節的序號。若確認號位 = N,則代表:到序號 N - 1爲止的全部數據都已正確收到。
  • 數據偏移:指出TCP 報文段的數據起始處距離TCP報文段開頭的距離,即TCP 首部的長度。
  • 確認ACK標誌位:僅當ACK = 1 時,確認號字段纔有效。TCP規定,在鏈接創建後全部傳送的報文段都必須把 ACK 置1.
  • 同步 SYN:在鏈接創建時用來同步序號。當 SYN = 1,ACK = 0時,表示這是一個鏈接請求報文段。對方若贊成創建鏈接,則應響應的報文段中,SYN = 1, ACK = 1。所以,SYN = 1表示這是一個鏈接請求或鏈接接受報文。
  • 終止 FIN :用來釋放一個鏈接。當 FIN = 1時,代表此報文段的發送方的數據已發送完畢,並要求釋放傳輸鏈接。
  • 窗口:佔2字節。窗口指的是發送本報文段的乙方的接收窗口(而不是本身的發送窗口)。窗口值做爲接收方讓發送方設置其發送窗口的依據。
  • 檢驗和:檢驗和檢驗的範圍包括首部和數據兩部分。

TCP可靠傳輸的實現

以字節爲單位的滑動窗口

TCP的滑動窗口以字節爲單位。發送方根據接收方發過來的響應報文中的確認號和窗口大小,調整本身的發送窗口。發送方還可能根據當時的網絡擁塞狀況適當減少本身的發送窗口數值。

對於不是按序到達的數據,接收方先臨時存放在接收窗口中,等字節流中所缺乏的字節收到後,再按序交付上層的應用進程。

接收方有累計確認的功能,這樣能夠減少傳輸開銷,接收方能夠在合適的時候發送確認,也能夠在本身有數據要發送時把確認信息捎帶上,但不常常發生。

再強調一次:TCP 的通訊是全雙工通訊。通訊中的每一方都在發送和接收報文段。所以,每一方都有本身的發送窗口和接收窗口。

超時重傳的選擇

超時時間是依據當前報文的RTT時間動態調整的。

TCP 流量控制

通常來講,總但願數據傳輸的越快越好。可是若是發送方把數據發送的過快,接收方就可能來不及接收,這就會形成數據的丟失。所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。

利用滑動窗口機制能夠很方便地在 TCP 鏈接上實現對發送方的流量控制。

  • 接收方能夠經過將窗口字段的值設爲0,來通知發送方暫停發送。
  • 等待接收方有接收緩存後,會向發送方發送一個非零窗口的通知。
  • 可是爲了防止接收方的非零窗口通知丟失,發送方在接收到對方發過來的零窗口報文後,設置一個持續計時器。
  • 當持續計時器超時時,發送方會發送一個探測報文給接收方。接收方收到探測報文後,返回當前的窗口值。
  • 若是接收方返回的窗口值仍然爲0,那麼,發送方再收到應答報文後,會重置持續計時器。直到接收方發送一個非零窗口值。

TCP的發送時機

應用進程把數據傳送到 TCP 的發送緩存後,剩下的發送任務就由 TCP 來控制了。能夠用不一樣的機制來控制 TCP 報文段的發送時機。例如:

  • TCP 維持一個遍歷,等於最大報文段。只要緩存中存放的數據達到 最大報文段長度時,就組裝成一個 TCP 報文段發送出去。
  • 第二種機制:由發送方的應用程序指明要求發送報文段。
  • 第三種機制是發送方設置一個計時器,當計時器超時時,就把當前已有的緩存數據裝入報文段,發送出去。

TCP 實現中普遍使用的是 Nagle 算法。算法以下:若發送應用進程把要發送的數據逐個字節地送到 TCP 的發送緩存,則發送方就把第一個數據字節先發送出去,把後面到達的數據字節先緩存起來。當發送方收到對第一個數據字符的確認後,再把發送緩存中的全部數據組裝成第一個報文段發送出去,同時繼續對隨後到達的數據進行緩存。只有再收到對前一個報文段的確認後才繼續發送下一個報文段。Nagle 算法還規定,當到達的數據已達到發送窗口大小的一半或已達到報文段的最大長度時,就當即發送一個報文段,這樣作,能夠有效提升網絡的吞吐量。

TCP 的擁塞控制

在計算機網絡中的鏈路容量(帶寬)、交換結點中的緩存和處理機等,都是網絡的資源。在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變壞。這種狀況就叫作擁塞。

擁塞控制是防止過多的數據注入到網絡中,這樣可使網絡中的路由器或鏈路不致過載。擁塞控制是一個全局性的過程,設計到全部的主機、路由器以及下降網絡傳輸性能相關的全部因素。

流量控制每每是指點對點通訊量的控制,是個端到端的問題。流量控制所要作的就是抑制發送端發送數據的速率,以便接收端來得及接收。

當網絡的實際吞吐量明顯地小於理想的吞吐量時,網絡進入了輕度擁塞的狀態。當提供的負載達到某一數值時,網絡的吞吐量反而隨提供的負載的增大而降低,這時網絡就進入了擁塞狀態。當提供的負載繼續增大時,網絡的吞吐量降低到零,網絡沒法工做,這就是所謂的死鎖。

TCP 的擁塞控制方法

TCP 進行擁塞控制的算法是;慢開始、擁塞避免、快重傳和快恢復。

1.慢開始和擁塞避免

下面討論的擁塞控制也叫作基於窗口的擁塞控制。爲此,發送方維持一個叫作擁塞窗口的狀態變量。擁塞窗口的大小取決於網絡的擁塞成都,而且動態地變化。發送方讓本身的發送窗口等於擁塞窗口。

發送方依據是否存在分組數據超時,來判斷網絡有沒有擁塞。當發送方按時收到分組應答時,就緩慢增大發送窗口。當分組計數器超時時,發送方認爲網絡存在擁塞,減少發送窗口的大小。

慢開始的思路是:初始時,先發送一個報文段,收到確認後,將窗口加倍。重複此過程,直到網絡擁塞,或者達到慢開始門限

慢開始有門限。當窗口大小超過慢開始門限時,就改成擁塞避免算法。

擁塞避免算法:當窗口大小達到慢開始門限後,窗口再也不加倍的擴大窗口大小,而是每次加1。

快重傳算法是爲了儘早讓發送方知道發生了個別報文段的丟失。快重傳算法首先要求接收方不要等待本身發送數據時才進行捎帶確認,而是當即發送確認,即便收到了時許的報文段,也要當即發送對已收到報文段的重複確認。例如,當接收方收到了第 1和2個報文段後,都分別及時發出了確認。現假設接收方沒有收到第3個報文段,卻收到了第4個報文段。原本接收方能夠什麼都不作。可是按照快重傳算法,接收方必須當即發送對 第2個報文段的重複確認,以便讓發送方及早知道本身沒有收到第3個報文段。這樣,發送方總共收到了接收方的4個對第 2個報文段的確認,其中後 3個都是重複確認。快重傳算法規定,發送方只要一連收到3個重複確認,就知道接收方確實沒有收到第 3 個報文段,於是當即進行重傳,稱爲快重傳,這樣就不會出現超時,發送方就不會誤認爲網絡擁塞。

當某個分組出現超時時,發送方執行快恢復算法,當即將發送窗口減半,減少擁塞窗口大小,並執行擁塞避免算法。

發送窗口的門限值爲接收窗口大小和擁塞窗口的較小值。

TCP 傳輸的鏈接管理

傳輸鏈接分爲三個階段:鏈接創建、數據傳送和鏈接釋放。

TCP 鏈接的創建採用客戶服務器方法。主動發起鏈接創建的應用進程稱爲客戶,而被動等待鏈接創建的應用進程叫作服務器。

TCP 的鏈接創建

TCP 創建鏈接的過程稱爲握手,握手須要在客戶和服務器之間交換三個 TCP 報文。

  1. 客戶端先發送一個同步請求報文,請求創建鏈接,報文中,SYN = 1,同時須要消耗一個初始字節序號x。SYN 報文段不能攜帶數據。
  2. 服務端收到同步請求後,返回一個同步應答,表示贊成創建請求,報文內容爲SYN = 1,ACK = 1,ack = x + 1,同時,服務端也要消耗一個字節序號 y。
  3. 發送方收到同步應答後,返回一個應答,應答內容爲ACK = 1,ack = y = 1,若是此應答中包含數據,則須要有字節序號,不然不消耗字節序號。注意因爲同步已經創建,因此此處沒有SYN值。客戶端發送完應答後,進入鏈接階段。服務端收到應答後也進入鏈接階段。

進行第三次握手的緣由是:可能客戶端發送完一個同步請求後,應某種緣由,傳送時延很是大,發送端超時,因而又從新發送同步請求,並傳輸數據。直到傳輸完成,斷開鏈接後,第一次的同步請求才發送到服務端,此時,服務端會誤認爲客戶端想要創建鏈接,因而,打開鏈接等待客戶端傳輸數據。而客戶端此時已關閉鏈接。從而佔用了服務端的鏈接,致使服務端浪費資源。加入第三次握手後,就不會出現這種問題。

TCP 鏈接釋放

數據傳輸結束後,通訊雙方均可釋放鏈接。如今 A 和 B 都處於鏈接創建階段。

  • A進程先向 B發送鏈接釋放報文,並中止發送數據,主動關閉 TCP 鏈接。鏈接釋放報文內容爲 FIN = 1,seq = u,u等於前面已傳輸的數據的最後一個字節加1。這時 A 進入 FIN-WAIT-1(終止等待1)狀態,等待 B的確認。注意,FIN報文段即便不攜帶數據,也要消耗一個序號。
  • B 收到鏈接釋放報文段後,發送確認報文,報文內容爲 FIN = 1,ACK = 1,ack = u + 1,seq = w,w爲B前面已傳送過的數據的最後一個字節的序號加1。而後B 進入 關閉等待狀態。此時 從A 到 B方向的鏈接就釋放了。這時 TCP 處於半關閉狀態,即 A 已經沒有數據要發送了,但 B 若要發送數據,A仍要接收。即從B 到 A 這個方向的鏈接並未關閉。
  • A 收到 B的關閉確認後,進入 關閉-等待-2 狀態,等待 B發出的鏈接釋放報文段。
  • 若B 已經沒有要向A 發送的數據,其應用進程就通知 TCP 釋放鏈接,這時 B 發出的鏈接釋放報文內容爲:FIN = 1,seq = v,ack = u + 1,此時,B必須重複上次已發送過的確認號,這時,B進入最後確認階段,等待A確認。
  • A 收到 B的鏈接釋放報文段後,必須對此發出確認。在確認報文段中 ACK = 1,ack = w + 1,seq = u + 1。而後進入時間等待狀態。請注意,如今的 TCP 鏈接還未釋放掉,必須通過時間等待計時器設置的兩個最大報文段壽命後,A才進入關閉狀態。這是爲了保證A的確認報文能到達B,若是B端沒有及時收到確認報文,會從新發送關閉鏈接的請求報文。A能在關閉前收到,並返回應答,同時重置等待計時器。
  • B 收到 A的 響應報文後,當即關閉鏈接。

進程間通訊方式:管道、信號量、消息隊列、共享存儲、socket。

死鎖產生的四個必要條件:

  • 互斥條件
  • 不可剝奪:一個進程在所得到的資源未使用完畢時,不可被剝奪,只能本身釋放。
  • 請求和保持:進程在請求新資源時,保持已有資源。
  • 循環等待。

破壞死鎖的四個必要條件:

  • 破壞不可剝奪條件:進程資源得不到知足時,會釋放全部資源。
  • 破壞請求和保持:靜態分配每一個進程執行時,就申請須要的所有資源。動態分配即每一個進程在申請須要的資源時,自己不佔用系統資源。
  • 破壞循環等待條件:採用資源有序分配,將系統資源按序編號,稀缺資源序號較大。申請資源時,必須按編號順序進行,一個進程只有得到較小編號的資源才能申請較大編號的資源。

垃圾回收算法:

  • 標記清楚算法。內存碎片比較多。
  • 複製算法。浪費部份內存
  • 標記整理算法。

新生代採用複製算法。老年代採用標記清楚或標記整理算法。

分代回收時間:

  • 新生代:minor gc在新生代沒有足夠的空間知足java對象分配請求時或者full gc也會出發minor gc。
  • 老年代:當每次晉升到老年代對象的平均大小大於老年代的剩餘空間時。新生代存活的大對象超出了老年代的剩餘空間,會觸發full gc。
  • 當永生代或老年代空間不足觸發full gc時,永生代、老年代和新生代後會進行垃圾回收。
  • 永生代主要回收字符串常量和類對象。
相關文章
相關標籤/搜索