Android網(wǎng)絡(luò)編程(一)-協(xié)議分層

一、通信協(xié)議的分層:

OSI七層協(xié)議分層:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。

TCP/IP四層協(xié)議分層:網(wǎng)絡(luò)接口層、網(wǎng)際層、運(yùn)輸層、應(yīng)用層。

五層協(xié)議分層:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層、應(yīng)用層。

下面對五層協(xié)議分層進(jìn)行簡單分析:

物理層:把電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式。以01的電信號傳播

數(shù)據(jù)鏈路層:單純的0和1沒有任何意義,必須規(guī)定解讀方式:多少個(gè)電信號算一組?每個(gè)信號位有何意義?

1、以太網(wǎng)協(xié)議,作為電信號的分組方式:“標(biāo)頭”包含數(shù)據(jù)包的一些說明項(xiàng),比如發(fā)送者、接受者、數(shù)據(jù)類型等等;”數(shù)據(jù)”則是數(shù)據(jù)包的具體內(nèi)容。

2、MAC地址:以太網(wǎng)規(guī)定,連入網(wǎng)絡(luò)的所有設(shè)備,都必須具有”網(wǎng)卡”接口。數(shù)據(jù)包必須是從一塊網(wǎng)卡,傳送到另一塊網(wǎng)卡。網(wǎng)卡的地址,就是數(shù)據(jù)包的發(fā)送地址和接收地址,這叫做MAC地址。每塊網(wǎng)卡出廠的時(shí)候,都有一個(gè)全世界獨(dú)一無二的MAC地址。有了MAC地址,就可以定位網(wǎng)卡和數(shù)據(jù)包的路徑了。

3、廣播:一塊網(wǎng)卡怎么會知道另一塊網(wǎng)卡的MAC地址?ARP協(xié)議,可以解決這個(gè)問題。以太網(wǎng)數(shù)據(jù)包必須知道接收方的MAC地址,然后才能發(fā)送。就算有了MAC地址,系統(tǒng)怎樣才能把數(shù)據(jù)包準(zhǔn)確送到接收方?回答是以太網(wǎng)采用了一種很”原始”的方式,它不是把數(shù)據(jù)包準(zhǔn)確送到接收方,而是向本網(wǎng)絡(luò)內(nèi)所有計(jì)算機(jī)發(fā)送,讓每臺計(jì)算機(jī)自己判斷,是否為接收方。

有了數(shù)據(jù)包的定義、網(wǎng)卡的MAC地址、廣播的發(fā)送方式,”鏈接層”就可以在多臺計(jì)算機(jī)之間傳送數(shù)據(jù)了。

網(wǎng)絡(luò)層:解決廣播的弊端:以太網(wǎng)采用廣播方式發(fā)送數(shù)據(jù)包,所有成員人手一”包”,不僅效率低,而且局限在發(fā)送者所在的子網(wǎng)絡(luò)。,必須找到一種方法,能夠區(qū)分哪些MAC地址屬于同一個(gè)子網(wǎng)絡(luò),哪些不是。如果是同一個(gè)子網(wǎng)絡(luò),就采用廣播方式發(fā)送,否則就采用”路由”方式發(fā)送。它的作用是引進(jìn)一套新的地址,使得我們能夠區(qū)分不同的計(jì)算機(jī)是否屬于同一個(gè)子網(wǎng)絡(luò)。這套地址就叫做”網(wǎng)絡(luò)地址”,簡稱”網(wǎng)址”。網(wǎng)絡(luò)地址幫助我們確定計(jì)算機(jī)所在的子網(wǎng)絡(luò),MAC地址則將數(shù)據(jù)包送到該子網(wǎng)絡(luò)中的目標(biāo)網(wǎng)卡。因此,從邏輯上可以推斷,必定是先處理網(wǎng)絡(luò)地址,然后再處理MAC地址。

1、IP協(xié)議:規(guī)定網(wǎng)絡(luò)地址的協(xié)議,叫做IP協(xié)議。它所定義的地址,就被稱為IP地址。目前主要是IPv4 IPv6,前者是4個(gè)字節(jié),后者是8個(gè)字節(jié)。

IP地址分為:

A類網(wǎng):network host host host

B類網(wǎng):networknetworkhosthost

C類網(wǎng):networknetworknetworkhost

如何判斷是否屬于同一個(gè)網(wǎng)絡(luò):子網(wǎng)掩碼。它的網(wǎng)絡(luò)部分全部為1,主機(jī)部分全部為0

判斷任意兩個(gè)IP地址是否處在同一個(gè)子網(wǎng)絡(luò)。方法是將兩個(gè)IP地址與子網(wǎng)掩碼分別進(jìn)行AND運(yùn)算(兩個(gè)數(shù)位都為1,運(yùn)算結(jié)果為1,否則為0),然后比較結(jié)果是否相同,如果是的話,就表明它們在同一個(gè)子網(wǎng)絡(luò)中,否則就不是。

總結(jié)一下,IP協(xié)議的作用主要有兩個(gè),一個(gè)是為每一臺計(jì)算機(jī)分配IP地址,另一個(gè)是確定哪些地址在同一個(gè)子網(wǎng)絡(luò)。

2、IP數(shù)據(jù)包:IP數(shù)據(jù)包也分為”標(biāo)頭”和”數(shù)據(jù)”兩個(gè)部分。

“標(biāo)頭”部分主要包括版本、長度、IP地址等信息,”數(shù)據(jù)”部分則是IP數(shù)據(jù)包的具體內(nèi)容。它放進(jìn)以太網(wǎng)數(shù)據(jù)包后,以太網(wǎng)數(shù)據(jù)包就變成了下面這樣。

因?yàn)镮P數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包里發(fā)送的,所以我們必須同時(shí)知道兩個(gè)地址,一個(gè)是對方的MAC地址,另一個(gè)是對方的IP地址

所以,我們需要一種機(jī)制,能夠從IP地址得到MAC地址

這里又可以分成兩種情況。

第一種情況,如果兩臺主機(jī)不在同一個(gè)子網(wǎng)絡(luò),那么事實(shí)上沒有辦法得到對方的MAC地址,只能把數(shù)據(jù)包傳送到兩個(gè)子網(wǎng)絡(luò)連接處的”網(wǎng)關(guān)”(gateway),讓網(wǎng)關(guān)去處理。

第二種情況,如果兩臺主機(jī)在同一個(gè)子網(wǎng)絡(luò),那么我們可以用ARP協(xié)議,得到對方的MAC地址。ARP協(xié)議也是發(fā)出一個(gè)數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中),其中包含它所要查詢主機(jī)的IP地址,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個(gè)”廣播”地址。它所在子網(wǎng)絡(luò)的每一臺主機(jī),都會收到這個(gè)數(shù)據(jù)包,從中取出IP地址,與自身的IP地址進(jìn)行比較。如果兩者相同,都做出回復(fù),向?qū)Ψ綀?bào)告自己的MAC地址,否則就丟棄這個(gè)包。

總之,有了ARP協(xié)議之后,我們就可以得到同一個(gè)子網(wǎng)絡(luò)內(nèi)的主機(jī)MAC地址,可以把數(shù)據(jù)包發(fā)送到任意一臺主機(jī)之上了。

傳輸層:有了MAC地址和IP地址,我們已經(jīng)可以在互聯(lián)網(wǎng)上任意兩臺主機(jī)上建立通信。

接下來的問題是,同一臺主機(jī)上有許多程序都需要用到網(wǎng)絡(luò),比如,你一邊瀏覽網(wǎng)頁,一邊與朋友在線聊天。當(dāng)一個(gè)數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)來的時(shí)候,你怎么知道,它是表示網(wǎng)頁的內(nèi)容,還是表示在線聊天的內(nèi)容?

也就是說,我們還需要一個(gè)參數(shù),表示這個(gè)數(shù)據(jù)包到底供哪個(gè)程序(進(jìn)程)使用。這個(gè)參數(shù)就叫做”端口”(port),它其實(shí)是每一個(gè)使用網(wǎng)卡的程序的編號。每個(gè)數(shù)據(jù)包都發(fā)到主機(jī)的特定端口,所以不同的程序就能取到自己所需要的數(shù)據(jù)。

“端口”是0到65535之間的一個(gè)整數(shù),正好16個(gè)二進(jìn)制位。0到1023的端口被系統(tǒng)占用,用戶只能選用大于1023的端口。不管是瀏覽網(wǎng)頁還是在線聊天,應(yīng)用程序會隨機(jī)選用一個(gè)端口,然后與服務(wù)器的相應(yīng)端口聯(lián)系。

“傳輸層”的功能,就是建立”端口到端口”的通信。相比之下,”網(wǎng)絡(luò)層”的功能是建立”主機(jī)到主機(jī)”的通信。只要確定主機(jī)和端口,我們就能實(shí)現(xiàn)程序之間的交流。因此,Unix系統(tǒng)就把主機(jī)+端口,叫做”套接字”(socket)。有了它,就可以進(jìn)行網(wǎng)絡(luò)應(yīng)用程序開發(fā)了。

1、UDP:不可靠連接,傳數(shù)據(jù)報(bào),UDP協(xié)議的優(yōu)點(diǎn)是比較簡單,容易實(shí)現(xiàn),但是缺點(diǎn)是可靠性較差,一旦數(shù)據(jù)包發(fā)出,無法知道對方是否收到。

整個(gè)以太網(wǎng)數(shù)據(jù)包現(xiàn)在變成了下面這樣:

2、TCP:可靠連接,傳字節(jié)流,TCP協(xié)議能夠確保數(shù)據(jù)不會遺失。它的缺點(diǎn)是過程復(fù)雜、實(shí)現(xiàn)困難、消耗較多的資源。

3次握手和4次揮手:

應(yīng)用層:規(guī)定應(yīng)用程序的數(shù)據(jù)格式。舉例來說,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù),比如Email、WWW、FTP等等。那么,必須有不同協(xié)議規(guī)定電子郵件、網(wǎng)頁、FTP數(shù)據(jù)的格式,這些應(yīng)用程序協(xié)議就構(gòu)成了”應(yīng)用層”。

這是最高的一層,直接面對用戶。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的”數(shù)據(jù)”部分。因此,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣。

總結(jié):TCP/IP分層:

1、應(yīng)用層:規(guī)定應(yīng)用程序的數(shù)據(jù)格式

2、傳輸層:1)確定端口-端口的通信;

2)確定傳輸方式:TCP 還是?UDP

3、網(wǎng)絡(luò)層:確定主機(jī)-主機(jī)的通信

1)為計(jì)算機(jī)分配獨(dú)一無二的IP地址

2)確定哪些地址是同一個(gè)網(wǎng)絡(luò)

4、數(shù)據(jù)鏈路層:以以太網(wǎng)協(xié)議作為電信的分組方式,并通過MAC地址實(shí)現(xiàn)網(wǎng)卡傳輸

5、物理層:以光纜、電纜、雙絞線、無線電波等方式,以01電信號的方式傳播。

A傳數(shù)據(jù)給B電腦:先A 1-2-3-4-5 再B 5-4-3-2-1;

最后編輯于
?著作權(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)容

  • 1.這篇文章不是本人原創(chuàng)的,只是個(gè)人為了對這部分知識做一個(gè)整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,383評論 6 174
  • 個(gè)人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,200評論 0 8
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 6,088評論 1 13
  • 為什么你包餃子不放蔥花,因?yàn)槲铱紤]到了狗的感受。 狗突然停了下來,無論怎么使勁拉繩子,使鐵鏈狠狠勒住它的脖頸,它巋...
    煜煙閱讀 615評論 0 0
  • 月光 灑進(jìn)漫漫長夜 雕花窗格 投影在夜幕中的白墻 我以熱情的棋子 填補(bǔ)每一個(gè)空白格 月 在夜更深處入睡 在一個(gè)十五...
    奈落菖蒲閱讀 125評論 1 3

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