前言:
介於自己的網路方面知識爛的一塌糊塗,所以準備寫相關網路的文章,但是考慮全部寫在一篇太長了,所以分開寫,希望大家能仔細看,最好可以指出我的錯誤,讓我也能糾正。
1.講解相關的整個網路體系結構:
2.講解相關網路的重要知識點,比如很多人都聽過相關網路方面的名詞,但是僅限於聽過而已,什麼tcp ,udp ,socket ,websocket, http ,https ,然後webservice是啥,跟websocket很像,socket和websocket啥關係長的也很像,session,token,cookie又是啥。
Android技能樹 — 網路小結(3)之HTTP/HTTPS
Android技能樹 — 網路小結(4)之socket/websocket/webservice
相關網路知識點小結- cookie/session/token(待寫)
3.相關的第三方框架的原始碼解析,畢竟現在面試個大點的公司,okhttp和retrofit原始碼是必問的。
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體系結構,所有我們可以看到有七層。
不好意思。。。走錯片場了。。。應該是下面的圖片。
其實看上面的圖已經大概有點了解了:
- 物理層: 主要定義物理裝置標準,如網線的介面型別、光纖的介面型別、各種傳輸介質的傳輸速率等。主要作用是將資料最終編碼為用0、1標識的位元流,通過物理介質傳輸,這一層的資料叫做位元。
- 資料鏈路層:主要將接收到的資料進行MAC地址(網路卡地址)的封裝與解封裝。常把這一層的資料叫做幀。這一層常工作的裝置是交換機。
- 網路層:主要將接收到的資料進行 IP 地址的封裝與解封裝。常把這一層的資料叫做資料包。這一層裝置是路由器。
- 傳輸層:定義了一些資料傳輸的協議和埠號。主要將接收的資料進行分段和傳輸,到達目的地址後在進行重組。常把這一層的資料叫做段。
- 會話層:通過傳輸層建立資料傳輸的通路。主要在系統之間發起會話或者接收會話請求。
- 表示層:主要進行對接收資料的解釋、加密與解密、壓縮與解壓縮。 確保一個系統的應用層傳送的資料能被另一個系統的應用層識別。
- 應用層:主要是為一些終端應用程式提供服務。直接面對著使用者的。
來個更具體的圖片:
然後很多人說七層太多了看不懂,然後表示直接放棄,(PS:我自己也表示放棄) 雖然知道封裝了很多東西,但是層數太多,真心不想看下去。所以後來看到還有其他的比較少的層數結構
1.2 TCP / IP的體系結構
TCP / IP的體系結構簡化了計算機網路的結構,由原來的七層編導現在的四層,但是其功能並沒有減少。
是不是一下子少了很多,我們知道一個資料從這邊傳送到另外一個地方,很像寄信一樣,我們就以寄信來說明,更加通俗易懂。寄信無非就是要有這幾個條件:
- 你寄信要先有個郵筒(郵局)吧,然後你把信投進去他們才開始受理。
- 要知道對方在哪個城市(也就是你填的郵編號碼),不然你都不知道這封信傳送到哪個城市,甚至有可能要中轉好幾次(你寄個信到某個城市,有時候一些近的城市可以直達,有時候一些很遠的城市是不是要中轉很多個城市,最後才到了目的地)
- 信送到了這個城市的郵局,但是伴隨著的是很多其他都到這個城市的信,這時候具體要送到這個城市的具體的某個街道,某個小區等。這時候就會根據自己信封上面的具體收件人資訊來確定這封信到底是屬於具體的某個人的。
- 信到了收件人手裡,裡面的信封我們可能是用英文寫的或者中文寫的,又或者是通過某種格式來組成的加密信件(中國特務電視劇看過不),所以收件人在要讀懂這封信,就要請相關的人來幫忙翻譯解釋。(反正寄過來英文信件,我肯定是找個英文厲害的人幫我翻譯翻譯)
所以上面的例子看懂了我們再來看TCP/IP的四層協議(當然我只是講了一個大概,沒有講解詳細,甚至如果講錯了,望指正
):
- 網路介面層:就像郵筒一樣,我們肯定需要有相應的物理層(比如網路相關硬體),同時還會放入一些核心資訊,比如ip等 (這樣郵局才能知道在把你這封信放在哪個城市運輸車裡面)
- 網路層:我們知道了ip,要把資料從一個主機傳到另外一個地方的主機,同時中間可能有中轉 (類似寄信從一個城市到另外一個城市) 。 詳細的可以看:網路層的作用
- 運輸層:一個電腦可能有多個程式同時在使用網路連線,那麼網路包達到主機之後,怎麼區分自己屬於那個程式?(相當於很多信一起運到了這個城市,但是你的信具體屬於哪個人的呢?) 所以傳輸層從網路層接收資料後,必須將資料正確遞交給某個應用程式,也就是傳輸層曾能夠區分不同程式的資料並且加以區分處理。(同時反過來,當處於傳送方的那邊,傳輸層從應用程式接收報文後要封裝在傳輸層的段中再交給網路層傳送)。具體詳細可以參考:傳輸層作用概述
- 應用層:該層包括所有和應用程式協同工作,利用基礎網路交換應用程式專用的資料的協議。應用層是大多數普通與網路相關的程式為了通過網路與其他程式通訊所使用的層。這個層的處理過程是應用特有的;資料從網路相關的程式以這種應用內部使用的格式進行傳送,然後被編碼成標準協議的格式。常用的程式比如電子郵件接收(POP3),遠端登入(TELNET),檔案傳輸訪問(FTP),域名解析服務(DNS),控制信件的傳送和中轉(SMTP)等 (是不是相當於我們收到一個英文信件請英文好的人翻譯,收到加密信件,請破解大師來幫忙翻譯)
1.3 TCP/IP五層體系結構
其實和上面的四層類似,只是最下面的網路介面層拆分成了OSI的最底下的二個層:物理層和資料鏈路層。其他都是一樣的。
1.4 各自的體系對應關係
看了圖片是不是一下子就明白了三者的關係了,類似於TCP/IP的結構更多的是把OSI的七層標準,把某幾層合併簡略成了一層。從而更好的理解。
結語
emmmm.........希望大家輕噴。
參考文章: