Android開發(fā)不得不去了解的網(wǎng)絡(luò)知識

文/Tamic
http://www.itdecent.cn/u/3bbb1ddf4fd5

一 互聯(lián)技術(shù)

雖然作為程序員來講不必過多的去了解網(wǎng)絡(luò)互聯(lián)的相關(guān)技術(shù),但是目前互聯(lián)網(wǎng)已經(jīng)轉(zhuǎn)向了物聯(lián)網(wǎng)時(shí)代,從剛開始的軟件+網(wǎng)絡(luò),成為今天的硬件+軟件+網(wǎng)絡(luò)的模式(即物聯(lián)網(wǎng))
智能家居, 人工智能的實(shí)現(xiàn)模式也是典型的物聯(lián)網(wǎng)產(chǎn)物。因此有網(wǎng)絡(luò)基礎(chǔ)對成為一個(gè)高級軟件架構(gòu)師有著無比輕重的作用,因此接下來幾篇文章我會給大家復(fù)習(xí)下網(wǎng)絡(luò)相關(guān)的知識,

目前主流的互聯(lián)技術(shù)包括小規(guī)模的主機(jī)互聯(lián)(局域網(wǎng))和大規(guī)模的主機(jī)互聯(lián)(廣域網(wǎng))。

主機(jī)互聯(lián)一般基于的通信模式有一對一通信(雙方)和多對多通信(多方)由以下兩種通信方式。

雙方通信

–雙方信息打包后放到通信線路上發(fā)送,就能到達(dá)對方。
–在通信線路上只有兩方,所收到的信息必然是對方發(fā)過來給我的。

多方通信

只將信息打包后就放到通信線路上去發(fā)送,那么就無法知道到是從哪兒發(fā)來的然后到底底是發(fā)給誰的信息。
因此,我們需要給每一個(gè)通信終端都編一個(gè)號,也就是IP地址(IP地址)。
雖然程序員和硬件扯不上太大的關(guān)系,但是我們還是要知道早期的局域網(wǎng)是同過雙絞線和同軸電纜當(dāng)作通信介質(zhì),但是由于介質(zhì)的損耗和帶寬問題,目前已采用光纖通信,
采用光速,不僅提高了傳輸速率,而且減少了損耗。以下兩種介質(zhì)的對比。

二 網(wǎng)絡(luò)基礎(chǔ)

在大致了解網(wǎng)絡(luò)通信前,我們必須了解幾個(gè)概念,IP地址,MAC地址,路由表,TCP/UDP協(xié)議,和網(wǎng)絡(luò)層次模型

OSI 七層模型

計(jì)算機(jī)網(wǎng)絡(luò)通信制定的一個(gè)7層框架,協(xié)議的七層框架,稱為:“OSI/RM"。OSI模型分為七層,依次從底層到上層為,物理層,數(shù)據(jù)鏈路層,傳輸層,會話層,表示層,應(yīng)用層。每個(gè)層此又為上層提供服務(wù),說

TCP/IP 四層模型

20150706225041737.jpeg

TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),分別為:

  • 應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等。
  • 傳輸層:它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負(fù)責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達(dá)并接收。
  • 互連網(wǎng)絡(luò)層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達(dá)目的主機(jī)(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。
  • 網(wǎng)絡(luò)接口層:對實(shí)際的網(wǎng)絡(luò)媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò)(如Ethernet、Serial Line等)來傳送數(shù)據(jù)。
    兩種層次模型的對比圖.

其具體功能前我用現(xiàn)實(shí)中的硬件設(shè)備來對比一下.

  • 物理層:網(wǎng)卡,網(wǎng)線,集線器,中繼器,調(diào)制解調(diào)器

  • 數(shù)據(jù)鏈路層:網(wǎng)橋,交換機(jī)

  • 網(wǎng)絡(luò)層:路由器

  • 網(wǎng)關(guān):工作在第四層傳輸層及其以上。
    對于稍微有網(wǎng)絡(luò)基礎(chǔ)的開發(fā)人員來說這些名詞不會太陌生.到這問題又來了什么是網(wǎng)橋,什么是中繼器?

  • 中繼器
    中繼器是局域網(wǎng)環(huán)境下用來延長網(wǎng)絡(luò)距離的最簡單最廉價(jià)的網(wǎng)絡(luò)互聯(lián)設(shè)備,操作在OSI的物理層,中繼器對在線路上的信號具有放大再生的功能,用于擴(kuò)展局域網(wǎng)網(wǎng)段的長度(僅用于連接相同的局域網(wǎng)網(wǎng)段)。
    中繼器(RP repeater)是連接網(wǎng)絡(luò)線路的一種裝置,常用于兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)之間物理信號的雙向轉(zhuǎn)發(fā)工作。中繼器主要完成物理層的功能,負(fù)責(zé)在兩個(gè)節(jié)點(diǎn)的物理層上按位傳遞信息,完成信號的復(fù)制、調(diào)整和放大功能,以此來延長網(wǎng)絡(luò)的長度。
    也就說類似生活中變電的變壓器功能。

  • 網(wǎng)橋
    網(wǎng)橋不是真實(shí)的物質(zhì)東西,而是一個(gè)作用域的代名詞,網(wǎng)橋(Bridge)像一個(gè)聰明的中繼器。中繼器從一個(gè)網(wǎng)絡(luò)電纜里接收信號, 放大它們,將其送入下一個(gè)電纜。相比較而言,網(wǎng)橋?qū)年P(guān)卡上傳下來的信息更敏銳一些。網(wǎng)橋是一種對幀進(jìn)行轉(zhuǎn)發(fā)的技術(shù),根據(jù)MAC分區(qū)塊,可隔離碰撞。網(wǎng)橋?qū)⒕W(wǎng)絡(luò)的多個(gè)網(wǎng)段在數(shù)據(jù)鏈路層連接起來。
    網(wǎng)橋也叫橋接器,是連接兩個(gè)局域網(wǎng)的一種存儲/轉(zhuǎn)發(fā)設(shè)備,它能將一個(gè)大的LAN分割為多個(gè)網(wǎng)段,或?qū)蓚€(gè)以上的LAN互聯(lián)為一個(gè)邏輯LAN,使LAN上的所有用戶都可訪問服務(wù)器

  • 交換機(jī)
    交換機(jī)就是用來進(jìn)行報(bào)文交換的機(jī)器。多為鏈路層設(shè)備(二層交換機(jī)),能夠進(jìn)行地址學(xué)習(xí),采用存儲轉(zhuǎn)發(fā)的形式來交換報(bào)文.。

  • 路由器
    路由器用來連通不同的網(wǎng)絡(luò),另一個(gè)作用是選擇信息和分發(fā)傳送的線路功能。選擇通暢快捷的近路,能大大提高通信速度,減輕網(wǎng)絡(luò)系統(tǒng)通信負(fù)荷,節(jié)約網(wǎng)絡(luò)系統(tǒng)資源,提高網(wǎng)絡(luò)系統(tǒng)暢通率。
    具有多個(gè)接口,用于連接多個(gè)IP子網(wǎng)及多種鏈路,并實(shí)現(xiàn)其互聯(lián)互通的網(wǎng)絡(luò)設(shè)備。工作在OSI第三層,其主要工作任務(wù)是在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)IP數(shù)據(jù)包

3 MAC地址

Mac地址即設(shè)備物理地址,他類似人類的身份證,每個(gè)人出生就開始編制了號碼,其互聯(lián)網(wǎng)設(shè)備出廠也會標(biāo)志唯一的mac地址,物理地址由IEEE統(tǒng)一指定和分配,比如聯(lián)想和惠普就有不同的區(qū)段范圍的mac地址,其原理和規(guī)則是: MAC統(tǒng)一編址,MAC地址長6個(gè)字節(jié)(48位),全球唯一。前24為OUI,由IEEE分配給各網(wǎng)絡(luò)廠家。后24位為EUI,由廠家自行分配。

4 路由表

又稱全局路由表,存儲在路由器的內(nèi)存中,用于指示路由器發(fā)送IP數(shù)據(jù)包轉(zhuǎn)發(fā)至正確目的地的信息表。列如,生活中我們?nèi)コ嘶疖嚕覀冎魂P(guān)心目的城市,從上車之前我們并不知道其最近路線,二路由器就里面就保存著我們下一站的信息,火車沒到一個(gè)站,都要經(jīng)過鐵路公司的統(tǒng)一安排開始進(jìn)入對應(yīng)的股道,而路由器就是鐵路中的小樞紐站一樣。

5 TCP/IP

上面提到Tcp /IP是一種互聯(lián)網(wǎng)通信協(xié)議,它包括四層模型,各自進(jìn)行自己的職責(zé)。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?/p>

  • IP
    IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒有做任何事情來確認(rèn)數(shù)據(jù)包是否按順序發(fā)送的或者有沒有被破壞,IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。
    高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務(wù)來說,使用了該選項(xiàng)的IP包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的,而不是來自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常是被禁止的連接。那么,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn)生問題并且會被非法入侵。

  • TCP

TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時(shí)要拆除連接,由于TCP是面向連接的所以只能用于端到端的通訊。
TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用“帶重傳的肯定確認(rèn)”技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃?。TCP還采用一種稱為“滑動窗口”的方式進(jìn)行流量控制,所謂窗口實(shí)際表示接收能力,用以限制發(fā)送方的發(fā)送速度。
如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動程序和物理介質(zhì),最后到接收方。
面向連接的服務(wù)(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫),但使用UDP傳送有關(guān)單個(gè)主機(jī)的信息。

常見Tcp的端口號

EC213DC8-7090-4E97-944C-742785D2E4F0.png
  • UDP
    UDP是面向無連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號和源端口號信息,由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送(單播、廣播、組播)。
    UDP通訊時(shí)不需要接收方確認(rèn),屬于不可靠的傳輸,可能會出現(xiàn)丟包現(xiàn)象,實(shí)際應(yīng)用中要求程序員編程驗(yàn)證。
    UDP與TCP位于同一層,但它不管數(shù)據(jù)包的順序、錯(cuò)誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢---應(yīng)答的服務(wù),例如NFS。相對于FTP或Telnet,這些服務(wù)需 要 交換的信息量較小。使用UDP的服務(wù)包括NTP(網(wǎng)絡(luò)時(shí)間協(xié)議)和DNS(DNS也使用TCP)。
    欺騙UDP包比欺騙TCP包更容易,因?yàn)閁DP沒有建立初始化連接(也可以稱為握手)(因?yàn)樵趦蓚€(gè)系統(tǒng)間沒有虛電路),也就是說,與UDP相關(guān)的服務(wù)面臨著更大的危險(xiǎn)。

文/Tamic
http://www.itdecent.cn/u/3bbb1ddf4fd5
常見Tcp的端口號:

8E4F312C-C7FE-412F-B495-DC1B6E44AE5A.png
  • ICMP

ICMP與IP位于同一層,它被用來傳送IP的控制信息。它主要是用來提供有關(guān)通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機(jī)通向其他系統(tǒng)的更準(zhǔn)確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務(wù)。

  • 端口
    TCP和UDP服務(wù)通常有一個(gè)客戶/服務(wù)器的關(guān)系,例如,一個(gè)Telnet服務(wù)進(jìn)程開始在系統(tǒng)上處于空閑狀態(tài),等待著連接。用戶使用Telnet客戶程序與服務(wù)進(jìn)程建立一個(gè)連接??蛻舫绦蛳蚍?wù)進(jìn)程寫入信息,服務(wù)進(jìn)程讀出信息并發(fā)出響應(yīng),客戶程序讀出響應(yīng)并向用戶報(bào)告。因而,這個(gè)連接是雙工的,可以用來進(jìn)行讀寫。
    兩個(gè)系統(tǒng)間的多重Telnet連接是如何相互確認(rèn)并協(xié)調(diào)一致呢?TCP或UDP連接唯一地使用每個(gè)信息中的如下四項(xiàng)進(jìn)行確認(rèn):

*源IP地址 發(fā)送包的IP地址。
*目的IP地址 接收包的IP地址。
*源端口 源系統(tǒng)上的連接的端口。

  • 目的端口 目的系統(tǒng)上的連接的端口。

    端口是一個(gè)軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來發(fā)送和接收信息。一個(gè)端口對應(yīng)一個(gè)16比特的數(shù)。服務(wù)進(jìn)程通常使用一個(gè)固定的端口,例如,SMTP使用25、Xwindows使用6000。Tomcat的端口:8080,這些端口號是‘廣為人知’的,因?yàn)樵诮⑴c特定的主機(jī)或服務(wù)的連接時(shí),需要這些地址和目的地址進(jìn)行通訊,列如我們?nèi)ソ⒘奶焱ㄓ嵉闹付ǖ淖远x端口(8090)。

  • 數(shù)據(jù)格式

數(shù)據(jù)幀:幀頭+IP數(shù)據(jù)包+幀尾 (幀頭包括源和目標(biāo)主機(jī)MAC初步地址及類型,幀尾是校驗(yàn)字)
IP數(shù)據(jù)包:IP頭部+TCP數(shù)據(jù)信息(IP頭包括源和目標(biāo)主機(jī)IP地址、類型、生存期等)
TCP數(shù)據(jù)信息:TCP頭部+實(shí)際數(shù)據(jù) (TCP頭包括源和目標(biāo)主機(jī)端口號、順序號、確認(rèn)號、校驗(yàn)字等)
常見的以太幀結(jié)構(gòu)

  • IP地址

在因特網(wǎng)上連接的所有計(jì)算機(jī),從大型機(jī)到微型計(jì)算機(jī)都是以獨(dú)立的身份出現(xiàn),我們稱它為主機(jī)。為了實(shí)現(xiàn)各主機(jī)間的通信,每臺主機(jī)都必須有一個(gè)唯一的網(wǎng)絡(luò)地址。就好像每一個(gè)住宅都有唯一的門牌一樣,才不至于在傳輸資料時(shí)出現(xiàn)混亂。
Internet的網(wǎng)絡(luò)地址是指連入Internet網(wǎng)絡(luò)的計(jì)算機(jī)的地址編號。所以,在Internet網(wǎng)絡(luò)中,網(wǎng)絡(luò)地址唯一地標(biāo)識一臺計(jì)算機(jī)。我們都已經(jīng)知道,Internet是由幾千萬臺計(jì)算機(jī)互相連接而成的。而我們要確認(rèn)網(wǎng)絡(luò)上的每一臺計(jì)算機(jī),靠的就是能唯一標(biāo)識該計(jì)算機(jī)的網(wǎng)絡(luò)地址,這個(gè)地址就叫做IP(Internet Protocol的簡寫)地址,即用Internet協(xié)議語言表示的地址。
在Internet里,IP地址是一個(gè)32位的二進(jìn)制地址,為了便于記憶,將它們分為4組,每組8位,由小數(shù)點(diǎn)分開,用四個(gè)字節(jié)來表示,而且,用點(diǎn)分開的每個(gè)字節(jié)的數(shù)值范圍是0~255,如202.116.0.1,這種書寫方法叫做點(diǎn)數(shù)表示法。

IP包的頭文件結(jié)構(gòu):

20150706232417667.png
 對有著開發(fā)經(jīng)驗(yàn)的程序員來說,概念或許你并不知道,但是你知道socket建立時(shí)我需要指定目標(biāo)地址,和主機(jī)端口號。而這些是怎么IP協(xié)議發(fā)送過去的呢,首先發(fā)送方進(jìn)行封包,路由器進(jìn)行不斷轉(zhuǎn)發(fā),最后找到目標(biāo)主機(jī)進(jìn)行拆包,然后讀取信息。
網(wǎng)絡(luò)建立連接有個(gè)三次握手協(xié)議,通俗講,小時(shí)候你出去玩了,你很餓,你就喊媽媽,問媽媽飯最好了嗎,你媽媽說好了,你說可以過去吃飯嗎,媽媽說可以了,這樣你才能回家吃飯。計(jì)算機(jī)通信也是這樣。

如下圖,A向B請求,B收到后應(yīng)答給A,然后A收到B的應(yīng)答信息后再繼續(xù)應(yīng)答B(yǎng), B收到后雙方建立連接。 注意:后面我們程序的非對稱加密協(xié)議和網(wǎng)網(wǎng)絡(luò)連接一樣類似,后面我會講到。

20150706233452808-1.png

當(dāng)我的連接建立時(shí)我通常開始主機(jī)A的封包和主機(jī)B的解包,當(dāng)然解包是封包的逆過程,通常稱為完整的一次連接。

20150706234100069.png

這里我們還需要知道兩個(gè)概念DNS和ARP

  • DNS
    提供域名解析服務(wù)將URL中的域名解析成IP地址
  • ARP
    將IP地址解析成MAC地址

通過今天的學(xué)習(xí),我們可以大概了解下TCP/IP的架構(gòu)分布和傳輸協(xié)議,以及網(wǎng)絡(luò)通訊的術(shù)語和各自功能,包括幾種連接方式,其建立成功連接需要的必要數(shù)據(jù)結(jié)構(gòu),曾經(jīng)記得有次面試
遇到了有關(guān)網(wǎng)絡(luò)的面試題,有可能面試官懂點(diǎn)網(wǎng)絡(luò)基礎(chǔ),想來虐虐我,最后沒想到我從頭講到尾,但遺憾的是我還是未被錄取。在下面的幾篇文章中,我大致會給大家介紹下網(wǎng)絡(luò)分布拓?fù)浜?br> 網(wǎng)絡(luò)安全知識和數(shù)據(jù)加解密的有關(guān)知識,但只限于作為程序員來講方面的知識。歡迎閱讀。

文/Tamic
http://www.itdecent.cn/u/3bbb1ddf4fd5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容