網路方面的一些挑戰:

  1. 性能: 對於分散式系統,無論是幾臺還是上百臺都是需要通過計算機網路進行數據交換與協調。對於將一件物品從A運輸到B,這樣的物流問題來說,我們更加關心物流的速度,什麼時候能運輸到目的地?而這樣的問題在網路中更加顯的致命。因為網路世界是一個微觀世界,在這樣的世界中,幾秒中的時間就會發生太多的事情。 我們如何去度量一個網路的傳輸性能呢? 我們定義,一個數據從服務提供方生產到客戶端接受消費的整個過程是我們關注的一次網路通信的時間統計範圍。通信時間取決於我們發送的比特長度,與傳輸速率,還有延遲。延遲就是發送與接收的時間消耗。比特長度比上傳輸速率則是網路傳輸時間。二者之和即是一次完整的網路通信的耗時時間,以此度量其性能。
  2. 可伸縮性: 分散式的網路要允許任意的添加和刪除其上的計算機,而不影響整個系統的工作。互聯網的是規模最大的分散式系統,如此之大的分散式系統暴露了現有定址與路由機制的不足。即,定址空間的不足,路由演算法收斂到最佳路由路徑的時間緩慢。
  3. 可靠性: 對於物流來說,我們還要關注的就是,會不會把物件郵寄丟,接受者是否能準確接受完好的物件。在分散式的網路中,這就是可靠性的問題,我們如何保證數據的完整性?
  4. 移動性: 對於移動設備的發展,超乎了人們的想像,網路定址與路由機制都是在移動設備之前制定的,並不能很好的應對這種,在不同子網間歇性切換的移動設備網路。隨著物聯網的普及,勢必要多現網路技術進行升級。
  5. 服務質量: 對於,媒體流等實時性較高的場景的來說,需要網路提供一定的帶寬以及低延遲的網路傳輸環境。
  6. 組播通信: 如何進行一對多的進程通信。這是一個待解決的問題。通常通過向多個進程單獨發送數據實現,但這對性能的開銷很大。

網路的類型

  1. 個域網:所有的計算機設逼通過一個網線相護連接,這個被稱之為一個網段。同時構成的網路,也是最簡單的網路,本地網路中的個域網(PAN)
  2. 區域網:將各個網段通過集線器或者交換機連接,就構成了一個區域網,乙太網就是區域網中的主流網路類型。校園網,公司內網,都是區域網環境。
  3. 廣域網: 跨越距離的,在不同的城市,不同的國家相互將不同的區域網相互連接。通過路由器相互連接,就形成了廣域網。
  4. 城城網: 是對城市網路的優化,使用同軸電纜,光纖的通信硬體設備,連接多個城市之間的網路通信。一般是對媒體流,等對帶寬要求高的場景使用,利用電話線路,高清電視線路等。
  5. 無線個域網:不在使用一個網線,藍牙,個人熱點等。
  6. 無線區域網:wifi等。 7.互聯網路:是一個概念,互聯網就是網路互聯的直接產物,其核心就是無論什麼類型的網路,都可以通過網關獨立路由器與其他網路相互連接。將全世界不同的區域網,廣域網,相互連接。通常個體用戶通過ISP聯入互聯網。

網路原理

  1. 網路通信的基石,被稱為包交換策略,數據間的通信基於一種數據片段,一種數據包。數據包的傳輸是非同步的,從發送方,經過多個中間節點,轉發到接受方。數據包的大小是固定的,這有利於接收方確定接收數據緩衝區的大小,是不會猶豫所傳數據包過大,而長時間佔用連接資源。還對專門的視頻/音頻做了處理,稱之為數據流,這對網路的服務質量提出了新的挑戰。
  2. 交換模式:對於網路來說,如何交換數據是至關重要的,對於網路有四種交換模式:第一,廣播多用於區域網系統,每臺機器不向特定的計算機發布消息,而是所有的計算機發送消息。第二:電路交換,電話網路即是電路交換的代表,每個通信的雙方都通過中央計算機分配數據交換電路。這樣會很快.第三種,就是現在主流採用的交換模型,包交換:是一種存儲轉發網路,利用多個中間節點將包轉換到接收方,類似於物流。第四種,是幀中繼,將數據包劃分為更小的數據片段幀.在中間節點不進行存儲,而是向流一樣直接轉發。
  3. 協議: 對於網路,因其異構的特性,我們需要在不同的進程,不同的系統及必然,不同的硬體環境之上,抽象一種公共統一的數據傳輸層。這就是協議的意義,通過規定,任意兩個進程之間的通信規則,和消息傳遞的格式。建立了一種統一的應用開發模型,並屏蔽了底層的異構性。OSI 開放系統互聯協議就是如此:其規定了7層模型,互聯網的通信協議層即是建立在其之上。
    1. 應用層:留給應該用開放者,制定自己的通信協議,是雙方可以理解的協議格式。只要遵守相同的協議格式,即可對消息編碼解析。
    2. 表示層: 通常對上層協議進行加密處理。
    3. 會話層: 做保持會話的操作。
    4. 傳輸層: 數據在這一層,被MUT進行切分,被封裝為獨立的數據包,包含數據頭與數據體兩個部分。數據頭部中包含,數據包的切分序號,還有進程監聽的埠號。
    5. 網路層: 這一層是對底層網路通信模式的封裝,數據包在這一層有兩種通信方式,數據包報通信,和虛擬電路通信,他們是上層TCP/UDP通信的基礎。
    6. 數據鏈路層: 屏蔽網路通信的硬體異構與細節。
    7. 物理層: 數據的物理傳輸結構,將數字信號,轉換成模擬信號傳輸。 協議層就是在發送方,從上到下的調用協議棧的介面,接受方.從下到上的調用。 其中路由是不會調用的應用層的在網路層解析出IP地址即可。

  4. 路由: 對於路由,我們的設計需求就是,路由演算法必須可以決定出一個數據包從發送源,到目的地的一個轉發路徑。並且,根據一些流量負載,故障診斷信息。不斷的在互聯網上跟新它所掌握的路由信息,並逐步趨近於最佳路徑。互聯網早起採用的就是一種,向量-距離演算法。即: 通過在各個區域網建立獨立的路由器,路由器上維護一張路由表的數據結構,表中有三種數據欄位。目的地,下一跳地址,路徑開銷。當發送方數據轉發到路由器時,路由器按OSI協議層進行解析,物理層將其轉化為數字信號,數據鏈路層將其序列化為位元組數組,網路層解析數據頭部,找到頭部的目的地址IP信息,與路由表中數據匹配。找不到丟棄,找到了,從新給其在網路層封裝並跳轉。路由器還會接收RIP的數據包,用來更新路由中的信息,並將球轉發給自己可以直接訪問的鄰接路由表。路由器週期性的將自己的路由表信息生產概要包含目的地址與開銷值,包裝成RIP數據包發送給鄰接的路由器,當接收到的目的地址是本表沒有的則插入,有則比較開銷值如果開銷更小,則更新新值。當接收到的RIP不是來自鄰接表,而是鏈路轉發的,只要開銷和本地的不同,則以新值為準將其更新。
  5. 擁塞控制: 數據包的傳遞在網路中是非同步的。如果每一個網路存在延遲,就會造成數據包在中間路由節點中阻塞。如果某個路由節點達到它一次性處理數據包數量的上線,就會把數據包插入隊列,進行等待。當更多的數據發送過來,隊列已滿的情況下就會將數據丟棄,這就造成了性能損耗,因為數據白白的被傳遞到這裡,整個網路的吞吐量將嚴重收到影響。這時需要提供一種,擁塞控制機制。TCP就是最好的例子,其通過接收方對數據的接收確認攜帶一些控制發送方數據包發送緩衝的窗口大小。以此來控制整個網路中數據包的數量,來防止出現網路擁塞對網路吞吐量的嚴重影響。

IP協議

ip協議是網路層的協議,其本身解決的就是如何在互聯網上確定一個主機的位置。或者說,其本質就是解決定址問題。對於現有的IP因其設計時錯誤的考慮,存在了過多的弊端。第一 沒有考慮互聯網的爆炸式發展,IPV4使用32位比特位表示一個ip地址,地址空間將嚴重不足,面臨被用盡的風險。儘管採取了很多復用ip的策略,但同樣在面臨著被用盡的危險。第二: ip地址的分配存在效率低下的問題,沒有考慮移動設備大量接入互聯網的問題。在不同子網之間切換ip。同時IP協議本身並不保證數據傳遞的完整性,僅是通過路由演算法包裝。可以找到接受方的主機。IP協議並不能真正的確定主機的地址,ip協議是一個互聯網主機標示而已,在進入數據鏈路層時會調用地址解析模塊,將其進行解析翻譯為主機的物理地址,通過這個地址才能找到真正的主機。地址解析協議,根據不同的底層網路而不同。IPV6時一個128位的比特位,極大的增加了其地址定址空間。並對數據流的處理進行了優化。IPV4遷移IPV6迫在眉睫。

TCP/UDP協議

二者都是對網路層IP協議的封裝,是傳輸層的協議,UDP與ip沒有什麼不同,為了更快的傳輸速度,允許數據包的丟失,並不保證順序。在一些實時性要求高的場景使用。但是大多數情況下我們都比較在意數據傳輸的完整性。TCP協議應運而生,其特性就是數據包接收是有順序的,每一個數據片都是有序號的。當發送一個數據片到接受方後,接受方需要確認,發送方纔會將該數據包清楚緩存,當接收的數據包順序不能匹配前一個數據包時將拒絕。而發送方沒有接收到確認消息,則會在緩存中進行重發。以此保證數據包的完整性有序性。接受方的確認信息中會攜帶,確認需要以及窗口大小,通過由接收方控制窗口,來進行流量控制避免網路擁塞。

域名

域名解決的是 一串有意義的字元與ip地址映射。當使用域名時,先在本地尋找是否有緩存的映射信息,沒有則訪問本地的域名伺服器,如果本地也沒有,則訪問上一級伺服器,域名的解析是從右向左的。域名是一個樹狀的結構。

防火牆

防火牆可以,作為區域網的網關,用來控制流量的訪問,以此監訪問的安全性。防火牆牆通常是一個獨立的進程,運行在跳板機或獨立的路由器上。

一些問題的積累與總結:

  • 什麼是互聯網? 互聯網是網路的網路,主機與主機之間通過物理通信線路,路由器,交換機相連接形成網路。而世界各地的計算機網路組成了互聯網。
  • 什麼是ISP? 互聯網設備提供商,ISP是層次結構關係。通過IXP互聯網介面任意層次的ISP可相互連接。 ISP從互聯網管理機構獲得公用的全球唯一的IP,並提供物理線路與路由器將購買服務的個人或企業接入互聯網。
  • 主機之間的通信方式有哪些? 客戶端/伺服器。點對點。
  • 通信傳輸方式有哪些? 電路交換,分組交換。電路交換是每個主機通信都要佔用一個獨立的物理通信線。而分組交換是一種存儲轉發的過程。數據包含,信源以及目的地,有經過網路上的交換機進行存儲轉發。
  • 什麼是時延?
    • 傳輸延遲,傳播延遲,處理延遲,排隊延遲。
  • 計算機的網路體系是什麼樣的?
    • ISO七層網路模型:
  1. 物理層: 解決網路比特流的傳輸問題,將數字信號轉化為模擬信號進行傳輸。封裝了,物理線路等硬體設備。
  2. 數據鏈路層: 解決了主機與主機之間的網路通信問題,同一條數據鏈路上的主機可以相互通信。將數據報封裝為數據幀進行傳輸,封裝了網路通信的底層細節,是對物理硬體設備的控制抽象。
  3. 網路層: 使用IP協議,將數據封裝為分組進行傳輸。解決了網路傳輸中,確定傳輸數據的雙方全局位置的問題。
  4. 傳輸層: 負載進程與進程間的數據傳輸。利用TCP/UDP協議將數據以數據報文的形式進行傳輸。解決瞭如何將數據可靠的傳輸給主機的問題.TCP 面向連接的 保障順序的可靠數據傳輸協議,UDP是數據報協議,盡最大努力進行交付,但不保證數據傳輸的可靠性。但速度更快,實時性更強。
  5. 會話層: 用於保持連接保持以及會話管理。
  6. 表示層: 對數據進行壓縮加密,格式統一轉換的一層。
  7. 應用層: HTTP協議,定義應用程序與應用程序之間的通信層。 其中,物理層與數據鏈路層可統一稱為網路介面層。應用層,表示層,會話層可統一為應用層,這樣的劃分就是TCP/IP網路通信模型。
  • 數據鏈路層的基本問題:如何封裝成幀? 如何透明傳輸?如何差錯檢驗?
    • 給數據的添加協議頭與協議尾。開始標誌可能在數據中存在,這就需要進行轉義。 轉義是對用戶透明的。使用COC 循環冗餘檢測演算法,利用多項式的乘積檢測數據傳輸是否有差錯。 還可以使用 奇偶檢驗,累加校驗。
  • 信道復用技術有哪些?
    • 分時復用,分頻復用,分波復用
  • 什麼是mac地址?
    • 全局唯一的網路適配器的地址,數據鏈路層的唯一標識。
  • 什麼是區域網?乙太網?交換機?
    • 非互聯網就可以稱為區域網,乙太網就是利用以太交換機的區域網,交換機是一種將ip地址與交換介面進行映射的裝置。
  • 什麼是虛擬專用網路VPN?
    • 兩個區域網通過類似互聯網的方式進行連接,使用一種隧道技術。
  • 路由器是如何實現的?
    • 路由器是有兩個功能,路由選擇,分組轉發。使用路由表,將目的IP與下一跳的IP進行映射。分組轉發就將輸入介面與輸出介面進行映射。
  • TCP的首部格式是什麼?
    • 有最重要的兩個欄位,序號,確認號。這是實現TCP數據傳輸順序的關鍵。
  • TCP的三次握手過程是什麼?為什麼進行第三次握手?
    1. 客戶端發起建立TCP連接請求,SYN = 1 ACK = 0 seq = x
    2. 服務端收到請求並確認SYN = 1 ACK = x +1 seq = y
    3. 客戶端再次發送確認請求 SYN = 1 ACK = y+1 seq = x+1 客戶端進行第三次握手的原因就是,當存在網路延遲時,客戶端沒有收到服務端的ack消息,導致其重新發送建立TCP的請求申請。這樣當網路延遲結束,客戶端與服務端就會建立兩個TCP連接。
    • TCP四次揮手的過程是什麼?為什麼進行四次揮手?TIME_WAIT的作用是什麼?
    1. 客戶端發送釋放連接申請FIN = 1
    2. 服務端進行確認,進入CLOSE-WAIT狀態,在這樣的狀態中,將不再接收客戶端發送的數據。
    3. 客戶端接收到確認信息後,再次發送確認消息並進入TIME_WAIT狀態,等待2MSL時間後釋放連接。
    4. 服務端接收到確認消息,釋放連接。 保證在傳輸數據的完整性,客戶端發起連接釋放,證明客戶端確定自己沒有數據再次發送了,但這不代表服務端沒有數據繼續發送,這就有了CLOSE_WAIT的狀態。進而有了 四次揮手。 客戶端的TIME_WAIT 狀態是為了保證客戶端的確認消息被服務端準確接收.並且保證再次過程中,網路中已經沒有數據傳輸了。
    • TCP 如何保證數據報文有序確認被接收?
      • TCP使用滑動窗口技術,服務端通過ACK報文的報頭攜帶,窗口大小。客戶端接收後,根據這個窗口的大小設置自己的窗口大小。窗口是一個數組,一個緩衝數據結構。將要發送的數據報文會被事先緩存在這裡。當客戶端發送一個報文位元組後,服務端接收校驗是否是自己期待的確認序號,是則放入窗口中發送確認消息。如果不是,則發送之前的確認序號。將其數據丟棄。 當客戶端接收到確認後,將發送指針向右移動 ,即始終維持左邊第一個位元組為發送並確認的報文。以此保證數據傳輸的完整性。
    • TCP如何協調發送方與接收方處理傳輸數據速度不一致的問題?
      • 由服務端來確定滑動窗口的大小,客戶端的窗口根據ack信息來設置大小,這樣客戶端的發送數據的速度將收到自己窗口的限制.將由服務的接收數據的速度來控制。
    • TCP如何解決網路擁塞? 網路是不可靠的,存在延遲的。所以數據報文的處理可能將要排隊,形成擁塞。TCP使用擁塞窗口,也就是一個標誌位來解決此問題。
      • 慢開始:擁塞窗口初始值為1,也就是當沒有流量控制時,客戶端的發送窗口將發送一個位元組。當一個位元組被確認後,擁塞窗口的值翻倍,變為2,每一輪翻一倍。
      • 擁塞避免: 當其值非常大的時候,發送速度很快,就很容易出現擁塞,這時擁塞窗口就會在達到閾值後每次增加1。
      • 超時:如果客戶端發送窗口太大,則出現超時消息,這是擁塞窗口減半其值。
      • 快重傳:當一次消息確認連續三次都是一個位元組序號時,則立刻重新發送上一個序號的數據。
      • 快恢復: 快重傳後,直接進入避免擁塞,跳過慢開始。

    • 如何更詳細的描述一個WEB頁面的請求過程?
    1. 當客戶端沒有IP地址時,需要在當前網路中獲取IP,基於DHCP協議服務。獲取公網IP,子網掩碼,DNS服務IP地址。將這些信息與當前網卡信息進行配置。
    2. 獲取路由器的MAC地址信息,建立數據鏈路層的通信基礎。
    3. 瀏覽器建立TCP套接字,訪問DNS服務解析域名,通過域名解析器,從根域名,二級域名,依次解析,返回瀏覽器獲得一個目的地的IP地址及埠信息。使用這些信息,創建TCP套接字訪問遠端的伺服器。
    4. TCP套接字創建HTTP請求,給請求調假報頭,逐一經過7層轉換。變成比特信息流傳輸,經過路由器,對報頭進行解析,僅解析物理層,數據鏈路層,網路層,會的目的地址IP即可。
    5. 然後根據路由轉發規則繼續訪問下一跳IP地址的機器,可能是路由器也可能是目標主機。經過反覆幾次(最高15次,超過不可達),到達主機。
    6. 主機監聽埠號,接受到請求。 建立TCP連接,一層層解析報文,最後獲得HTTP請求,應用程序解析HTTP請求,路由到業務函數,執行響應的業務邏輯,後封裝HTML頁面到HTTP響應的Body中,添加報頭,在TCP連接中進行傳輸。
    7. 瀏覽器獲得響應結構,解析報文。最哈偶獲得HTML數據,使用視圖渲染,展示給用戶觀看。

    推薦閱讀:

    查看原文 >>
    相關文章