計算機網絡總結(一)

 

 

  這兩天把計算機網絡複習了一遍,總結一下,方便之後查看;html

  提及計算機網絡,離不開IOS七層模型和TCP/IP四層模型,這裏我會以IOS七層模型,逐層解釋面試

1、物理層(這一層偏硬件,沒有什麼講的)算法

2、數據鏈路層數據庫

  首先介紹這一層主要三個功能:封裝成幀、透明傳輸和差錯監測;編程

  封裝成幀:是在數據首尾加上幀首部(SOH)和幀尾部(EOT),而後交給物理層傳輸,這裏會涉及到一個最大傳輸單元MTU(Maximum Transmission Unit)的概念,數據鏈路層的數據幀不是無限大的,以太網MTU通常爲1500字節;windows

  透明傳輸:其實就是解決若是在幀數據中也出現了幀首部(SOH)和幀尾部(EOT)標記時,怕引發偏差,破壞數據完整性,加上相似轉義字符,實際處理是,若是提早出現EOT字符,則在前面加上一個ESC字符,若是數據中自己出現了ESC,則多加上一個ESC,相似在windows系統下編程時,字符中用兩個「\\」來處理「\」的問題;緩存

  差錯監測:最簡單的監測方法就是採用奇偶校驗碼,就是簡單的將一個數據的全部0,1比特位求和,看最後是奇數仍是偶數,這種監測比較粗糙,好比若是出現了偶數次差錯,最後的檢驗碼仍然是正確的,針對這個問題,就引入了精確度更加高的循環冗餘校驗碼CRC,首先要選定一個用於校驗的多項式G(x),而後用多項式的係數採用模「2」除法,簡單點理解。就是一次計算多項式最高項次數個比特位,顯然,最高項次數越高,檢測結果越準確,可是計算成本也高,具體計算細節在這就很少介紹了;服務器

  數據鏈路層主要是管理相鄰節點間的數據通訊,利用以太網協議解決數據當前一跳的問題網絡

 

 

  簡單來講,就是在幀數據報首部加上目標MAC地址和源MAC地址,每個路由器內部都有一個MAC地址表,能夠查詢到MAC地址對應的硬件接口,這樣就能夠完成將幀數據今後節點傳送到下一節點的動做;測試

3、網絡層

  • IP協議

  網絡層主要解決數據在網絡中具體傳輸路徑的問題,首先看IP協議的位置和具體組成:

 

 

 

 

 

 

 

 

 

  咱們來依次解釋各關鍵部分表明的意思:

  4位版本:指的是IP協議的版本,通訊雙方必須版本一致,當前主流版本是4,即IPv4,也有IPv4;

  4位首部長度:能夠表示的最大數值是15,表示的是IP協議首部長度,單位是「4字節」,也就能夠計算出IP協議首部最長也只能是60字節;

  16位總長度:最大數值是65535,表示的是IP數據報的總長度(IP首部+IP數據);

  16位標識:用來惟一地標識主機發送的每一份數據報。一般每發一份報文,它的值會加1;

  3位標識:標誌一份數據報是否要求分段。

  13位位偏移:若是一份數據報要求分段的話,此字段指明該段偏移距原始數據報開始的位置。

  8位生存時間(TTL:Time to Live):用來設置數據報最多能夠通過的路由器數。由發送數據的源主機設置,一般爲3二、6四、128等。每通過一個路由器,其值減1,直到0時該數據報被丟棄。

  8位協議:佔8比特。指明IP層所封裝的上層協議類型,如ICMPIGMPTCPUDP等。

  源IP地址、目標IP地址:各佔32比特。用來標明發送IP數據報文的源主機地址和接收IP報文的目標主機地址。

  可選項:佔32比特。用來定義一些任選項:如記錄路徑、時間戳等。這些選項不多被使用,同時並非全部主機和路由器都支持這些選項。可選項字段的長度必須是32比特的整數倍,若是不足,必須填充0以達到此長度要求。

  總的來講,IP協議主要包含了我從哪裏來(源IP),要到哪裏去(目標IP),我能存活多久,我是什麼等這些問題,這裏的IP地址和以太網的MAC地址不一樣,在以太網協議中,在每一跳中,MAC地址都是變化的,指向當前節點和下一節點,可是IP協議的地址不發生變化,一直是發送方和接收方的IP地址;

  • ARP協議和RARP協議

  那麼我知道了目標的IP地址,可是我不知道他的MAC地址,如何解決IP地址和MAC地址相互映射的問題呢?接下來就要談到ARP協議(地址解析協議)和RARP協議(反向地址轉換協議)協議了;

  這裏就要介紹ARP緩存表了,ARP緩存表記錄了IP地址和MAC地址的映射關係,當某一節點接受到消息以後,就會從IP協議中獲得目標的IP地址,此時查詢ARP緩存表,若是其中有對應的MAC地址,就直接獲得了MAC地址,若是沒有找到,則會廣播發出包含ARP協議的信息,直到信息傳達到目標的IP地址,此時接收方就會對該節點單一回傳一個包含本身MAC地址的信息,而後再在ARP緩存表中記錄上此條映射關係,簡單點說,就是兄弟(接收方),我想給你寄快遞,可是我不知道你的地址,我只知道你叫什麼,能夠把你的地址告訴我麼,而後把這條信息廣播出去,等到你兄弟接受到這條信息以後,他會偷偷告訴你一我的,他的地址;

 

  而RARP協議主要是設置一臺新的機器時,只有新機器的MAC地址,而沒有IP地址時,向路由器發送一個包含RARP協議的信息,而後路由器返回他的IP地址給你,就是你的IP地址了。好比咱們的電腦在家,在辦公室,在公共場所連入WIFI時,都會使用到這個協議,簡單點說,就是兄弟(路由器),我買新房子了,可是我知道我這小區叫什麼名字,你告訴我一下唄,而後兄弟告訴你,這個小區叫什麼;

  • ICMP協議

  從上面咱們能夠知道IP協議並不提供可靠傳輸,發送方傳送出去的東西,並不知道接收方究竟是否接收到了,若是沒接收到,那麼沒接收到的緣由是什麼,好比關機等等,此時就要用到ICMP協議了,

  一個新搭建好的網絡,每每須要先進行一個簡單的測試,來驗證網絡是否暢通;可是IP協議並不提供可靠傳輸。若是丟包了,IP協議並不能通知傳輸層是否丟包以及丟包的緣由。 因此咱們就須要一種協議來完成這樣的功能–ICMP協議。

 

  ICMP協議的功能主要有:

  1. 確認IP包是否成功到達目標地址
  2. 通知在發送過程當中IP包被丟棄的緣由

 

 

 

 

  簡單點說,就是兄弟,我想給你寄快遞,你那邊能夠收到麼?要是不能收到,是什麼緣由呢?是你不在家,仍是怎麼?

  對於ICMP協議最常的應用就是Ping命令和Traceroute命令(Windows 系統下是Tracert);

  • 路由表

  最後,咱們來解決最關鍵的問題,知道了目標IP地址,目標MAC地址,網絡狀況良好,萬事具有了,那咱們的信息在網絡層到底按照什麼路線來傳遞呢,接下來咱們介紹路由表和相應的路由算法;

  路由表主要記錄目的IP地址和下一跳的IP地址的映射關係,在網絡層中,每個點表明一個網絡、路由器或者計算機,每一條邊表示一條網絡路徑,路由算法實際就是圖論算法,可是因爲網絡環境複雜,因此比圖論算法要複雜一些,

   首先引入自治系統(AS:autonomous system)的概念,一個自治系統就是處於一個管理機構控制之下的路由器和網絡羣組,在自治系統內部的網關協議稱爲內部網關協議(RIP、OSPF),在自治系統外部的網關協議稱爲外部網關協議(BGP);

  • RIP協議  

  RIP協議採用的距離矢量(DV)算法,此算法的核心公式就是Dij = min(Dix+Dxj) = Dix + min{Dxj};這個公式的含義就是從節點i到達節點j,路徑節點x時,此時的距離等於從節點i到達節點x的距離加上從x到達j的全部路徑中的最短距離;

  不過RIP協議是將網絡的跳數做爲DV算法的距離,RIP協議認爲跳數大於15時的路由爲不可達路由,DV算法實現簡單,開銷也很小,具體算法細節就不在這裏展開了,不過這個算法的缺點也是顯而易見的,跳數最多爲15,限制網絡的規模,「壞消息」(如某處節點損壞),須要跳數大於15時,纔將此節點設置爲不可達,更新收斂時間過長;

  • OSPF協議

  OSPF協議採用的算法是Dijkstra算法,它是一個著名的圖算法,其實核心就是廣度優先搜索(BFS)算法和貪心算法的結合,簡單點說就是劃分連個集合S一、S2,初始時以發送方單一節點爲集合S1,其餘全部節點爲集合S2,爲發送點爲中心的可見點(僅一跳可達的節點)中,距離最近的點,加入到集合S1中,而後再以集合S1中的節點的全部可見點中,重複此操做,直到S2爲空集時中止;

  OSPF協議使用的是鏈路狀態協議(LS),鏈路狀態協議就是基於Dijkstra算法,若是說距離矢量路由協議提供的是路標,那麼鏈路狀態路由協議提供的就是地圖,每個路由器都包含整個網絡拓撲信息,而地圖的搭建就是經過OSPF協議完成的,

  OSPF的包類型:

  1. Hello包:用於發現和維護鄰居關係。選舉DR(指定路由器)和BDR(備用指定路由器)
  2. 數據庫描述包(DBD):用於向鄰居發送摘要信息以同步鏈路狀態數據庫
  3. 鏈路狀態請求包(LSR):在路由器收到包含新信息的DBD後發送,用於請求更詳細的信息
  4. 鏈路更新包(LSU):收到LSR後發送鏈路狀態通告(LSA),一個LSU數據包可能包含幾個LSA
  5. 鏈路狀態確認包(LSAck):確認已經LSU,每一個LSA須要被分別確認

    RIP協議和OSFP協議的對比

 

 

  •  BGP協議

  外部網關協議就是在每一個自治系統內部,選出兩個BGP發言人,簡單點說,就是選兩個話事人,信息能不能傳輸進個人自治系統,按照什麼規則傳入,都是由這兩個話事人說了算;

  最後總結一下,在網絡層中一共提到三個表:

  1. MAC地址表:MAC地址和對應硬件接口的映射關係
  2. ARP緩存表:IP地址和MAC地址的映射關係
  3. 路由表:目的IP地址和下一跳IP地址的映射關係

  某條數據到達某一節點,該節點先從IP協議頭部獲得目的IP地址,查詢路由表獲得下一跳的IP地址,而後查詢ARP緩存表獲得下一跳的MAC地址,而後封裝成幀,查詢MAC地址表獲得對應的硬件接口,這三個表的配合使用,就能完成一條數據從發送方傳送的接收方的完整操做。

4、傳輸層

  傳輸層是管理端到端的通訊鏈接,這裏的端是端口的意思,不是指物理端口,而是指每個進程的端口號,因此傳輸層解決的是進程與進程之間通訊鏈接的問題,經常使用的端口號:FTP(21),HTTP(80),HTTPS(443),DNS(53)等等。

  傳輸層的兩大協議分別是UDP(User Datagram Protocol)協議和TCP(Transmission Control Protocol)協議;

  • UDP協議

  UDP協議是一個很是簡單的協議,它是一種無鏈接協議,不能保證可靠的交付數據,「想發就發」,沒法保證數據是否在網絡中丟失,它是一種面向報文傳輸的,首部開銷很小。

  

 

 

  • TCP協議

  TCP協議是計算機網絡中很是複雜的一個協議,他是一個面向鏈接的協議,提供可靠的傳輸服務,TCP協議是面向字節流的協議。

 

  

 

   關於TCP頭部各部分的解釋細節,網上有不少,我就簡單的說一下,源端口,目的端口號沒啥說的,序號,指的是此條數據是相對於字節流的首字節序號,確認號是相對於發送方的,TCP是雙向鏈接的協議,發送方和接收方是相對的,確認號就是告訴對方,在這個確認號以前的信息我已經收到了,我指望收到確認號以後的信息,數據偏移是指數據偏離首部的位置,其實也就是代表了TCP首部的實際長度,保留字段是預留出來的字段,方便之後開發新功能,TCP標記,URG=1表示緊急數據,優先傳送,ACK=1表示確認號生效,RST=1表示從新創建鏈接,SYN=1表示鏈接請求報文,FIN=1表示釋放鏈接,窗口大小表示容許對方發送的數據量,檢驗和是檢驗TCP頭部是否傳輸錯誤,緊急指針是配合URG標記使用的,指定緊急數據在報文中的位置;選項最多40字節,支持將來拓展。

  這裏介紹兩個概念:中止等待協議連續ARQ協議

  中止等待協議簡單來講就是發送方傳送一條數據,而後停下來等待,等接收方接收到消息以後,回傳確認信息,發送方接收到確認消息以後,再接着傳送下一條信息,如此反覆,顯然這個對信道的利用率很低,而連續ARQ協議則不一樣,它會設置一個滑動窗口,在窗口大小內的數據都能傳輸,採用累積確認的方式,這樣極大提升的對信道的利用效率,TCP協議採用的就是連續ARQ協議,滑動窗口以字節爲單位;

  接下來介紹TCP協議的幾個重要功能:

  1. 流量控制:經過調整滑動窗口大小,來控制發送方的發送速率(這裏添加一個堅持定時器介紹,當某個滑動窗口爲0時,發送方啓動堅持定時器,堅持計時器重要是爲了防止接收方發送的調整窗口的大小信息丟失,接收方和發送方同時進入等待狀態,造成死鎖的局面,發送方每隔一段時間向接收方發送窗口探測報文);
  2. 擁塞控制:採用慢啓動算法,由小到大逐漸增長髮送數據量,採用指數增加,當到達慢啓動閾值時,啓動擁塞避免算法,維護一個擁塞窗口變量,只要網絡不擁塞,就試探性的增大窗口,每次加一;

  最後是TCP鏈接的創建,也就是常常說的「三次握手,四次釋放」;

 

 

  

    

 

 

 

 
  上面的兩幅圖完整解釋了整個過程,簡單點來講,打個比方,就是兩我的創建戀愛關係和分手的過程;
  男:我想你談戀愛;(一次握手)
  女:好吧,我也想和你談戀愛;(兩次握手)
  男:能夠,那咱們開始戀愛吧;(三次握手)
  等到整個戀愛過程結束後;
  男:我想你和分手了,能夠嗎?(一次釋放)
  女:好的,我知道了;(兩次釋放)
  女:我也想和你分手了。能夠嗎?(三次釋放)
  男:好的,我知道了;(四次釋放)   
  這就是整個過程,這裏面試常問的問題就是爲何要三次握手,由於發送方最先創建鏈接的請求可能在網絡中傳輸好久纔到達接收方,也就是已經失效的鏈接請求傳送到接收方,兩次握手就造成鏈接的話,就會發生錯誤,若是兩邊實際都沒有發送數據的需求,兩邊就會一直處於創建鏈接的狀態,形成資源浪費;
  還有就是爲何要四次釋放,由於某一方數據傳輸完成後,發送FIN=1的釋放請求,另外一方回覆後,可是另外一方不必定完成了數據的傳輸,一直等到另外一方數據傳輸完成以後,再發送FIN=1的釋放請求,並對這個請求回覆後,才完成關閉鏈接的操做,
  這裏介紹主動釋放鏈接的一方有一個等待計時器(Time-Wait),持續的時間是2MSL(Maximum Segment Lifetime:報文最大生存時間),通常網絡是2min,爲了防止第四次釋放的信息接收方並未受到,接收方會啓動超時重傳的機制,從新發送第三次釋放的報文,在2MSL裏面,能夠保證接收方仍然能就收到此條報文,再次進行第四次釋放的操做,同時,等待2MSL,能夠確保當前鏈接的全部報文都過時。
  總結一下其中涉及到了幾個計時器:
  1. 重傳計時器:發送方發送數據後,等待接收方的回覆,若是在2RTT(Round-Trip Time:往返時延)內未收到回覆消息,就會啓動超時重傳機制,認定該條數據丟失,從新發送該條數據;
  2. 堅持計時器:是TCP協議在流量控制中,當滑動窗口設置爲0時,啓動堅持定時器,詢問窗口是否開啓;
  3. 時間等待計時器:確保第四次釋放能順利完成,等待2MSL時間;
  4. 保活計時器:具體介紹一下,每當服務器收到客戶的信息,就將保活計時器復位,超時一般設置2小時,若服務器超過2小時尚未收到來自客戶的信息,就發送探測報文段,若發送了10個探測報文段(沒75秒發送一個)還沒收到響應,則終止鏈接。好比某一方忽然死機了,等到保活計時器到時間了,就會發送探測報文,來決定是否釋放鏈接;

  下接計算機網絡總結(二)

參考:

  1. 慕課網精英講師咚咚嗆課件
  2. 百度百科
  3. 以及遇到不懂問題時,查閱的各路大神的博客
相關文章
相關標籤/搜索