Android技能樹 — 網絡小結(1)之網絡體系結構

前言:

介於本身的網絡方面知識爛的一塌糊塗,因此準備寫相關網絡的文章,可是考慮所有寫在一篇太長了,因此分開寫,但願你們能仔細看,最好能夠指出個人錯誤,讓我也能糾正。web

1.講解相關的整個網絡體系結構:面試

Android技能樹 — 網絡小結(1)之網絡體系結構api

2.講解相關網絡的重要知識點,好比不少人都聽過相關網絡方面的名詞,可是僅限於聽過而已,什麼tcp ,udp ,socket ,websocket, http ,https ,而後webservice是啥,跟websocket很像,socket和websocket啥關係長的也很像,session,token,cookie又是啥。bash

Android技能樹 — 網絡小結(2)之TCP/UDP服務器

Android技能樹 — 網絡小結(3)之HTTP/HTTPSwebsocket

Android技能樹 — 網絡小結(4)之socket/websocket/webservicecookie

相關網絡知識點小結- cookie/session/token(待寫)網絡

3.相關的第三方框架的源碼解析,畢竟如今面試個大點的公司,okhttp和retrofit源碼是必問的。session

Android技能樹 — 網絡小結(6)之 OkHttp超超超超超超超詳細解析數據結構

Android技能樹 — 網絡小結(7)之 Retrofit源碼詳細解析

網絡這塊知識其實不少開發估計都很薄弱,不少開發一直都是使用一些框架,而後和後臺約定好返回的數據結構,而後就能夠幹活了。好比咱們知道了retrofit調用的api後,填入相關的http url及要傳給服務器的指定參數,咱們就能夠拿到相關的返回JSON:

{
    "success":true,
    "msg":"xxxx",
    "data":{
        "key1":value1,
        "key2":value2
    }
}
(固然其中的``success``通常的也是會用``code``值來返回,
而後移動端來判斷是不是200便可。)
複製代碼

而後經過相似FastJson或者Gson等轉換成對象,而後用在咱們的app中便可。

因此在不少時候,咱們發現咱們對於網絡的東西一竅不通,照樣能作出一個app來。並且提及來也是頭頭是道,可是一旦去面試大點的公司,問的稍微詳細點,就直接啞口無言,而後基本就面試GG了。

而介於個人網絡基礎也是超級爛,因此此次是參考別人的文章,本身理解,而且作了總結,文章最後會附上相關連接,而且一些圖也是直接參考這些大佬們的文章裏面的配圖。(因此不要噴我直接盜圖)。

1.網絡體系結構

不知道你們小時候有沒有寫過信,經過郵局寄出去,可是那時候咱們要手動的把真正寫的內容寫在紙上,而後塞入信封中,而後在信封上寫上相關發件人信息,收件人信息,郵編等,而後才能順利的寄到目的地。而收件人最關心的確定是裏面的真正內容的紙張,甚至能夠不看信封的信息。

那咱們在平時發送相關的信息的時候其實也跟寄信有點像,咱們也只是寫了相關的主要信息,可是最後卻能發送到指定的地點,由於幫咱們一層層封裝了數據(有點像幫忙寫了信封上的信息)。而後對方收到信息的時候,也只看到了咱們發給他的主要信息(有點像幫忙打開了信封,拿出來裏面的主要內容)。

看這個圖是否是感受很像剛纔寄信,咱們主要的DATA內容被一層層封裝,而後到了接收方後,一層層解封裝。

有些人可能會問,那這一層層的,到底具體作了什麼呢,其實讓你如今想象你也大概知道一些,好比對方的地址和你的地址;各類約定好的協議(好比咱們信封上面的郵編號也算是規定的協議);好比你用的是英文寫的,或者用的中文寫的,對方也要會看懂,你們最好也是要相互約定,這樣寄信過去後才能更方面讓對方讀懂等等。

咱們一步步具體來看:

1.1 OSI體系結構

其實上面那個圖用的是OSI體系結構,全部咱們能夠看到有七層。

很差意思。。。走錯片場了。。。應該是下面的圖片。

其實看上面的圖已經大概有點了解了:

  1. 物理層: 主要定義物理設備標準,如網線的接口類型、光纖的接口類型、各類傳輸介質的傳輸速率等。主要做用是將數據最終編碼爲用0、1標識的比特流,經過物理介質傳輸,這一層的數據叫作比特。
  2. 數據鏈路層:主要將接收到的數據進行MAC地址(網卡地址)的封裝與解封裝。常把這一層的數據叫作幀。這一層常工做的設備是交換機。
  3. 網絡層:主要將接收到的數據進行 IP 地址的封裝與解封裝。常把這一層的數據叫作數據包。這一層設備是路由器。
  4. 傳輸層:定義了一些數據傳輸的協議和端口號。主要將接收的數據進行分段和傳輸,到達目的地址後在進行重組。常把這一層的數據叫作段。
  5. 會話層:經過傳輸層創建數據傳輸的通路。主要在系統之間發起會話或者接收會話請求。
  6. 表示層:主要進行對接收數據的解釋、加密與解密、壓縮與解壓縮。 確保一個系統的應用層發送的數據能被另外一個系統的應用層識別。
  7. 應用層:主要是爲一些終端應用程序提供服務。直接面對着用戶的。

來個更具體的圖片:

而後不少人說七層太多了看不懂,而後表示直接放棄,(PS:我本身也表示放棄) 雖然知道封裝了不少東西,可是層數太多,真心不想看下去。因此後來看到還有其餘的比較少的層數結構

1.2 TCP / IP的體系結構

TCP / IP的體系結構簡化了計算機網絡的結構,由原來的七層編導如今的四層,可是其功能並無減小。

是否是一會兒少了不少,咱們知道一個數據從這邊發送到另一個地方,很像寄信同樣,咱們就以寄信來講明,更加通俗易懂。寄信無非就是要有這幾個條件:

  1. 你寄信要先有個郵筒(郵局)吧,而後你把信投進去他們纔開始受理。
  2. 要知道對方在哪一個城市(也就是你填的郵編號碼),否則你都不知道這封信發送到哪一個城市,甚至有可能要中轉好幾回(你寄個信到某個城市,有時候一些近的城市能夠直達,有時候一些很遠的城市是否是要中轉不少個城市,最後纔到了目的地)
  3. 信送到了這個城市的郵局,可是伴隨着的是不少其餘都到這個城市的信,這時候具體要送到這個城市的具體的某個街道,某個小區等。這時候就會根據本身信封上面的具體收件人信息來肯定這封信究竟是屬於具體的某我的的。
  4. 信到了收件人手裏,裏面的信封咱們多是用英文寫的或者中文寫的,又或者是經過某種格式來組成的加密信件(中國特務電視劇看過不),因此收件人在要讀懂這封信,就要請相關的人來幫忙翻譯解釋。(反正寄過來英文信件,我確定是找個英文厲害的人幫我翻譯翻譯)

因此上面的例子看懂了咱們再來看TCP/IP的四層協議(固然我只是講了一個大概,沒有講解詳細,甚至若是講錯了,望指正):

  1. 網絡接口層:就像郵筒同樣,咱們確定須要有相應的物理層(好比網絡相關硬件),同時還會放入一些核心信息,好比ip等 (這樣郵局才能知道在把你這封信放在哪一個城市運輸車裏面)
  2. 網絡層:咱們知道了ip,要把數據從一個主機傳到另一個地方的主機,同時中間可能有中轉 (相似寄信從一個城市到另一個城市) 。 詳細的能夠看:網絡層的做用
  3. 運輸層:一個電腦可能有多個進程同時在使用網絡鏈接,那麼網絡包達到主機以後,怎麼區分本身屬於那個進程?(至關於不少信一塊兒運到了這個城市,可是你的信具體屬於哪一個人的呢?) 因此傳輸層從網絡層接收數據後,必須將數據正確遞交給某個應用程序,也就是傳輸層曾可以區分不一樣進程的數據而且加以區分處理。(同時反過來,當處於發送方的那邊,傳輸層從應用程序接收報文後要封裝在傳輸層的段中再交給網絡層發送)。具體詳細能夠參考:傳輸層做用概述
  4. 應用層:該層包括全部和應用程序協同工做,利用基礎網絡交換應用程序專用的數據的協議。應用層是大多數普通與網絡相關的程序爲了經過網絡與其餘程序通訊所使用的層。這個層的處理過程是應用特有的;數據從網絡相關的程序以這種應用內部使用的格式進行傳送,而後被編碼成標準協議的格式。經常使用的程序好比電子郵件接收(POP3),遠程登陸(TELNET),文件傳輸訪問(FTP),域名解析服務(DNS),控制信件的發送和中轉(SMTP)等 (是否是至關於咱們收到一個英文信件請英文好的人翻譯,收到加密信件,請破解大師來幫忙翻譯)

1.3 TCP/IP五層體系結構

其實和上面的四層相似,只是最下面的網絡接口層拆分紅了OSI的最底下的二個層:物理層和數據鏈路層。其餘都是同樣的。

1.4 各自的體系對應關係

看了圖片是否是一會兒就明白了三者的關係了,相似於TCP/IP的結構更多的是把OSI的七層標準,把某幾層合併簡略成了一層。從而更好的理解。

結語

emmmm.........但願你們輕噴。

參考文章:

傳輸層做用概述

網絡層的做用

網絡基礎之一:網絡體系結構詳解

網絡模型(7層網絡模型)

淺談Android網絡通訊的前世此生--網絡基礎

這是一份詳細 & 清晰的計算機網絡基礎 學習指南

相關文章
相關標籤/搜索