不作Script Kiddie (網絡原理上篇)

  咱們天天使用互聯網,你是否想過,它是如何實現的?網絡

  全世界幾十億臺電腦,鏈接在一塊兒,兩兩通訊。杭州的某一塊網卡送出信號,紐約的另外一塊網卡竟然就收到了,二者實際上根本不知道對方的物理位置,你不以爲這是很 神奇 的事情嗎?架構

  互聯網的核心是一系列協議,總稱爲 互聯網協議 Internet Protocol Suite。它們對 電腦 以及各類 網絡設備 如何 鏈接組網,作出了詳盡的規定。理解了這些協議,就理解了互聯網的原理。socket

  下面咱們一塊兒來探索 網絡神祕ui

==========================================================設計

五層模型

  互聯網 的實現,分紅好幾層。每一層都有本身的功能,就像建築物同樣,每一層都靠下一層支持code

  用戶接觸到的,只是最上面的一層,也就是 應用層。根本沒有感受到下面的層。要理解互聯網,必須從 最下層 開始,自下而上理解每一層的功能。orm

  如何分層有不一樣的模型,OSI分爲 七層TCP-IP協議羣把互聯網分紅五層,比較容易解釋。 cdn

5

  如圖所示,最底下的一層叫作 物理層 Physical Layer,最上面的一層叫作 應用層 Application Layer,中間的三層分別是 鏈路層 Link Layey, 網絡層 Network Layer傳輸層 Transport Layer。越 下面 的層,越靠近 硬件 ;越 上面 的層,越靠近 用戶blog

層與協議

  每一層都是爲了完成一種功能。爲了實現這些功能,就須要你們都遵照共同的規則。接口

  你們都遵照的 規則,就叫作 協議 protocol

  互聯網每一層,都定義了不少協議。它們是互聯網的核心,咱們依次來探索每一層和每一層所適用的 協議

  • 物理層

  物理層是網絡協議的最底層。

  電腦要組網,第一件事要幹什麼?固然是先把電腦連起來,能夠用 光纜電纜雙絞線無線電波 等方式。

wl

  如圖所示,2臺電腦經過中間媒介的連接就組成了一個最簡單的 區域網 。在這一層中,各類媒介中傳輸的就是咱們熟稱的 比特流,也就是傳送 01 的電信號。

  • 鏈路層

    1. 定義
      單純的0和1沒有任何意義,必須規定解讀方式:多少個電信號算一組?每一個信號位有何意義? 這就是 連接層 的功能,它在 實體層 的上方,肯定了 01分組方式

    2. 以太網協議
      早期的時候,每家公司都有本身的電信號分組方式。逐漸地,一種叫作以太網Ethernet)的協議,佔據了主導地位。
      以太網規定,一組電信號構成一個 數據包,叫作 Frame)。每一幀分紅兩個部分:標頭Head)和 數據Data)。

      幀
      標頭 包含數據包的一些說明項,好比 發送者接受者數據類型等等;數據 則是數據包的 具體內容
      標頭 的長度,固定爲 18 字節。
      數據 的長度,最短爲 46 字節,最長爲 1500 字節。
      所以,整個 最短爲 64 (18+46)字節,最長爲1518(18+1500)字節。
      若是數據很長,就必須分割成多個幀進行發送。

    3. MAC地址
      上面提到,以太網數據包的 標頭,包含了 發送者接受者 的信息。那麼,發送者接受者 是如何標識呢?
      以太網規定,連入網絡的全部設備,都必須具備 網卡 接口。
      數據包必須是從一塊網卡,傳送到另外一塊網卡。網卡 的地址,就是數據包的發送地址和接收地址,這叫作MAC地址。

      mac
      每塊網卡出廠的時候,都有一個全世界 獨一無二MAC 地址,長度是 48 個比特,一般用 12十六進制數 表示。
      mac
      6 個十六進制數是廠商編號,後 6 個是該廠商的網卡流水號。有了 MAC 地址,就能夠 定位網卡和數據包路徑 了。

    4. 廣播
      定義地址只是第一步,後面還有更多的步驟。
      首先,一塊網卡怎麼會知道另外一塊網卡的MAC地址?
      咱們能夠經過ARP協議,能夠解決這個問題。
      其次,就算有了MAC地址,系統怎樣才能把數據包準確送到接收方?
      回答是以太網採用了一種很 原始 的方式,它不是把數據包準確送到接收方,而是向本網絡內全部 網絡設備 發送,讓每臺網絡設備本身判斷,是否爲接收方。【此處存在漏洞,咱們能夠進行攻擊

      arp
      如圖,1號2號 發送一個數據包,同一個子網絡的 3號4號5號 計算機都會收到這個包。它們讀取這個包的 標頭,找到接收方的 MAC 地址,而後與自身的 MAC 地址相比較,若是二者相同,就接受這個包,作進一步處理,不然就丟棄這個包。這種發送方式就叫作 廣播broadcasting)。
      有了數據包的定義、網卡的MAC地址、廣播的發送方式,連接層 就能夠在多臺計算機之間傳送數據了。

  • 網絡層

    1. 網絡層的由來
      以太網協議,依靠MAC地址發送數據。理論上,單單依靠MAC 地址,杭州的網卡就能夠找到紐約的網卡了,技術上是能夠實現的。
      可是,這樣作有一個重大的缺點。以太網 採用 廣播方式 發送數據包,全部成員 人手一包,不只 效率低,並且侷限在發送者所在的 子網絡
      也就是說,若是兩臺計算機不在同一個 子網絡,廣播是傳不過去的。這種設計是合理的,不然互聯網上每一臺計算機都會收到全部包,那會引發災難。
      互聯網是無數子網絡共同組成的一個巨型網絡,很像想象上海和洛杉磯的電腦會在同一個子網絡,這幾乎是不可能的。

      zw

      所以,必須找到一種方法,可以區分哪些MAC地址屬於同一個子網絡,哪些不是。若是是 同一個子網絡,就採用 廣播方式 發送,不然就採用 路由 方式發送。遺憾的是,MAC地址自己沒法作到這一點。它只與廠商有關,與所處網絡無關。
      這就致使了 網絡層 的誕生。它的做用是引進一套新的地址,使得咱們可以區分不一樣的計算機是否屬於同一個子網絡。這套地址就叫作 網絡地址,簡稱 網址
      因而,網絡層 出現之後,每臺計算機有了兩種地址,一種是MAC地址,另外一種是 網絡 地址。兩種地址之間沒有 任何聯繫MAC地址是綁定在 網卡上 的,網絡地址則是系統自動分配的或者管理員指定,它們只是隨機組合在一塊兒。
      網絡地址 幫助咱們肯定計算機所在的子網絡,MAC地址則將數據包送到該子網絡中的目標網卡。所以,從邏輯上能夠推斷,一定是先處理 網絡地址 ,而後再處理MAC地址。

    2. IP協議
      規定網絡地址的協議,叫作IP協議。它所定義的地址,就被稱爲IP地址。
      目前,普遍採用的是IP協議第四版,簡稱IPv4。這個版本規定,網絡地址由 32 個二進制位組成。

      ip
      習慣上,咱們用分紅 四段十進制 數表示IP地址,從0.0.0.0一直到 255.255.255.255
      互聯網上的每一臺網絡設備,都會分配到一個IP地址。這個地址分紅兩個部分,前一部分 表明網絡,後一部分 表明主機。好比,IP地址 172.16.254.1,這是一個32位的地址,假定它的網絡部分是前24位(172.16.254),那麼主機部分就是後8位(最後的那個1)。處於同一個子網絡的電腦,它們IP地址的網絡部分一定是相同的,也就是說172.16.254.2應該與172.16.254.1處在同一個子網絡。
      可是,問題在於單單從IP地址,咱們沒法判斷網絡部分。仍是以172.16.254.1爲例,它的網絡部分,究竟是前24位,仍是前16位,甚至前28位,從IP地址上是看不出來的。
      那麼,怎樣才能從IP地址,判斷兩臺計算機是否屬於同一個子網絡呢?這就要用到另外一個參數 子網掩碼subnet mask)。
      所謂 子網掩碼 ,就是表示 子網絡特徵 的一個參數。它在形式上等同於IP地址,也是一個32二進制數字,它的網絡部分所有爲 1 ,主機部分所有爲 0
      好比,IP地址172.16.254.1,若是已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0
      知道 子網掩碼,咱們就能判斷,任意兩個IP地址是否處在同一個子網絡。方法是將兩個IP地址與 子網掩碼 分別進行AND運算(兩個數位都爲1,運算結果爲1,不然爲0),而後比較結果是否相同,若是是的話,就代表它們在同一個子網絡中,不然就不是。
      好比,已知IP地址172.16.254.1172.16.254.233的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?二者與子網掩碼分別進行AND運算,結果都是172.16.254.0,所以它們在同一個子網絡。

    3. IP數據包
      根據IP協議發送的數據,就叫作IP數據包。不難想象,其中一定包括IP地址信息。
      可是前面說過,以太網數據包 只包含MAC地址,並無IP地址的欄位。那麼是否須要修改數據定義,再添加一個欄位呢?
      回答是不須要,咱們能夠把IP數據包直接放進以太網數據包的 數據 部分,所以徹底不用修改以太網的規格。這就是互聯網分層結構的好處:上層的變更徹底不涉及下層的結構
      具體來講,IP數據包也分爲 標頭數據 兩個部分。

      ip

      標頭 部分主要包括 版本長度IP地址 等信息,數據 部分則是 IP數據包 的具體內容。它放進以太網數據包後,以太網數據包就變成了下面這樣。
      fram
      IP 數據包的 標頭 部分的長度爲2060字節,整個數據包的總長度最大爲65,535字節。
      所以,理論上,一個IP數據包的 數據 部分,最長爲 65,515 字節。
      前面說過,以太網數據包的 數據 部分,最長只有 1500 字節。所以,若是IP數據包超過了1500字節,它就須要分割成 幾個 以太網數據包,分開發送了。

    4. ARP協議。
      由於IP數據包是放在以太網數據包裏發送的,因此咱們必須同時知道兩個地址,一個是對方的MAC地址,另外一個是對方的IP地址。
      一般狀況下,對方的IP地址是已知的,可是咱們不知道它的MAC地址。
      因此,咱們須要一種 機制 ,可以從IP地址獲得MAC地址。

    • 不一樣一個子網
      沒有辦法直接獲得對方的MAC地址,只能把數據包傳送到兩個子網絡鏈接處的 網關gateway),讓網關去處理。
    • 同一個子網
      那麼咱們能夠用ARP協議,獲得對方的MAC地址。
      ARP 協議也是發出一個數據包(包含在以太網數據包中),其中包含它所要查詢主機的IP地址,在對方的 MAC 地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個 廣播 地址。
      它所在子網絡的 每一臺主機 ,都會收到這個數據包,從中取出IP地址,與自身的IP地址進行比較。若是二者相同,都作出回覆,向對方報告本身的MAC地址,不然就 丟棄 這個包。
  • 傳輸層

    1. 傳輸層的由來
      有了MAC地址和IP地址,咱們已經能夠在互聯網上任意兩臺主機上創建通訊。
      接下來的問題是,同一臺主機上有許多 程序 都須要用到網絡,好比,你一邊瀏覽網頁,一邊與朋友在線聊天。當一個數據包從互聯網上發來的時候,你怎麼知道,它是表示 網頁 的內容,仍是表示 在線聊天 的內容?
      也就是說,咱們還須要一個 參數 ,表示這個數據包到底供哪一個程序(進程)使用。這個參數就叫作 端口port),它實際上是每個 使用網卡的程序的編號。每一個 數據包 都發到主機的 特定端口 ,因此不一樣的程序就能取到本身所須要的數據。
      端口 是0到65535之間的一個整數,正好16個二進制位。
      01023 的端口被系統佔用,用戶只能選用 大於1023 的端口。
      傳輸層 的功能,就是創建 端口到端口 的通訊。
      相比之下,網絡層 的功能是創建 主機到主機 的通訊。
      只要肯定 主機端口,咱們就能實現程序之間的交流。
      所以,Unix系統就把 主機+端口,叫作 套接字socket)。有了它,就能夠進行網絡應用程序開發了。

    2. UDP協議
      如今,咱們必須在數據包中加入端口信息,這就須要新的協議。最簡單的實現叫作UDP 協議,它的格式幾乎就是在 數據前面,加上端口號
      UDP 數據包,也是由 標頭數據 兩部分組成。

      udp
      標頭 部分主要定義了 發出端口接收端口數據 部分就是具體的內容。
      而後,把整個UDP數據包放入IP數據包的 數據 部分,而前面說過,IP數據包 又是放在 以太網數據包 之中的,因此整個以太網數據包如今變成了下面這樣:
      upd
      UDP 數據包很是簡單,標頭 部分一共只有 8 個字節,總長度不超過 65,535 字節,正好放進一個IP數據包。

    3. TCP協議
      UDP 協議的優勢是比較 簡單容易實現,可是 缺點可靠性較差,一旦數據包發出,沒法知道對方是否收到。
      爲了解決這個問題,提升網絡可靠性,TCP協議就誕生了。
      這個協議很是複雜,但能夠近似認爲,它就是有 確認機制UDP協議,每發出一個數據包都要求 確認
      若是有一個數據包 遺失,就收不到 確認,發出方就知道有必要 重發 這個數據包了。
      所以,TCP協議可以確保數據 不會遺失。它的 缺點 是過程 複雜實現困難消耗較多的資源
      TCP 數據包和 UDP 數據包同樣,都是內嵌在IP數據包的 數據 部分。
      TCP 數據包沒有 長度限制 ,理論上能夠無限長,可是爲了 保證網絡的效率,一般TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。

  • 應用層

  應用程序 收到 傳輸層 的數據,接下來就要進行 解讀。因爲互聯網是開放架構,數據來源五花八門,必須事先規定好 格式,不然根本沒法解讀。
  應用層 的做用,就是規定應用程序的數據格式。

    舉例來講,TCP協議能夠爲各類各樣的程序傳遞數據,好比EmailWWWFTP等等。那麼,必須有不一樣協議規定 電子郵件網頁FTP數據格式,這些應用程序協議就構成了 應用層

    這是 最高 的一層,直接面對用戶。它的數據就放在TCP數據包的 數據 部分。所以,如今的以太網的數據包就變成下面這樣。

udp

    五層結構就是如此啦,那麼筆者就提個問題吧?那麼,咱們的我的 PC會中 電腦病毒,那麼網絡設備中的 交換機路由器集線器 等設備也會中 電腦病毒 麼?

  願意與你們分享交流各類技術,我的公衆帳號[mindev],以及 知識星球[ 極客世界 ]

geeker
            歡迎訂閱公衆帳號,日更喲~~~
相關文章
相關標籤/搜索