网络协议入门(OSI七层和TCP/IC四层协议)
Android網(wǎng)絡(luò)知識(shí)
Android作為一個(gè)移動(dòng)端操作系統(tǒng),是一定會(huì)涉及到網(wǎng)絡(luò)知識(shí)的,會(huì)用不是我們的目標(biāo),深入了解其中的原理才是能讓我們提升的根本。
1.關(guān)于網(wǎng)絡(luò)傳輸
首先,在互聯(lián)網(wǎng)中任何的數(shù)據(jù)傳輸都是基于協(xié)議傳輸?shù)?#xff0c;而傳輸?shù)膮f(xié)議有被分為七層,也有被分為四層,這兩種分層都是常見的分層,那讓我們來分別介紹一些互聯(lián)網(wǎng)中的數(shù)據(jù)傳輸所需要涉及到的協(xié)議。
下方是一張總覽,對(duì)于七層協(xié)議中所包含的部分進(jìn)行詳細(xì)的解釋:
關(guān)于每層協(xié)議中所涉及到的東西,一會(huì)兒我們?cè)賮砑?xì)細(xì)講解,我們先來看一下七層協(xié)議和四層協(xié)議的對(duì)應(yīng)關(guān)系:
我們通俗說的七層模型,其實(shí)就是國際標(biāo)準(zhǔn)組織ISO為網(wǎng)絡(luò)傳輸協(xié)議指定的標(biāo)準(zhǔn),也就是OSI七層網(wǎng)絡(luò)模型,但是這層協(xié)議,已經(jīng)被TCP/IP四層協(xié)議模型而淘汰,并沒有大規(guī)模使用,而大家更加認(rèn)可的就是TCP/IP四層概念模型,這個(gè)網(wǎng)絡(luò)模型也是由多種協(xié)議組成的,其中最重要的協(xié)議是網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議,于是整個(gè)網(wǎng)絡(luò)模型的命名就使用這兩個(gè)協(xié)議來命名,用來突出這兩個(gè)協(xié)議的重要性。
在這里我們還是對(duì)OSI七層模型進(jìn)行拆解,來解釋每層模型所對(duì)應(yīng)的功能,因?yàn)檫@樣更能讓大家深入理解網(wǎng)絡(luò)傳輸?shù)脑怼N覀冎v解的時(shí)候,會(huì)進(jìn)行從底到頂?shù)闹v解,先從最底層的數(shù)據(jù)傳輸來分析,最后到頂層的應(yīng)用。
物理層
所謂物理層,就是電腦互相連接起來的物理手段,那物理手段有什么?那電腦連接起來的物理手段有:光纜、電纜、雙絞線、無線電波等,那物理層就是規(guī)定了網(wǎng)絡(luò)的一些電氣特性,作用主要是負(fù)責(zé)傳送0和1的電信號(hào)。
鏈接層
那我們根據(jù)物理層可以讓兩個(gè)電腦互相傳遞0和1,只能用來控制開和關(guān),而想要執(zhí)行更高級(jí)的操作,必須要對(duì)這些電信號(hào)進(jìn)行解讀,那如何解讀電信號(hào)呢?最早的時(shí)候,各大公司都有自己的解讀方式,漸漸地,一種叫做“以太網(wǎng)"的協(xié)議,占據(jù)了主導(dǎo)地位。
以太網(wǎng)規(guī)定,一組電信號(hào)構(gòu)成一個(gè)數(shù)據(jù)包,叫做“幀”,每一幀分為兩個(gè)部分:Head(標(biāo)頭)和Data(數(shù)據(jù)),也就是這樣:
其中,Head的長度,固定是18個(gè)字節(jié)(每個(gè)字節(jié)有8位),包含了發(fā)送者、接受者、數(shù)據(jù)類型等等信息。
Data的長度,最短是46字節(jié),最長是1518個(gè)字節(jié),包含了數(shù)據(jù)包的具體內(nèi)容。如果數(shù)據(jù)過長,那必須分割為多個(gè)幀進(jìn)行發(fā)送。
上面提到,Head包含了發(fā)送者和接受者,那是如何表示發(fā)送者和接受者的呢?
以太網(wǎng)規(guī)定,連入網(wǎng)絡(luò)的所有設(shè)備,都必須具有"網(wǎng)卡"接口,也就是我們現(xiàn)在所說的Mac地址,而數(shù)據(jù)包的傳遞,需要是從一個(gè)Mac地址,發(fā)送到另一個(gè)Mac地址,每塊網(wǎng)卡出廠的時(shí)候,都有一個(gè)世界上獨(dú)一無二的Mac地址,長度是48個(gè)二進(jìn)制,通常用12個(gè)16進(jìn)制來表示。
示例:
其中,前六位是廠商編號(hào),后6位是廠商的網(wǎng)卡流水號(hào)。
網(wǎng)絡(luò)層
有了地址,僅僅是數(shù)據(jù)傳輸?shù)牡谝徊?#xff0c;那如何傳輸數(shù)據(jù)呢?
以太網(wǎng)采用一種很原始的方法傳輸數(shù)據(jù),它并不是把數(shù)據(jù)直接發(fā)送給接收方,而是發(fā)送給本網(wǎng)絡(luò)內(nèi)所有的計(jì)算機(jī),讓每臺(tái)計(jì)算機(jī)自己判斷是不是接收方,這種方式叫做:廣播。
這種方式有很大的弊端,如果只是依靠Mac地址發(fā)送數(shù)據(jù),理論來說,北京的網(wǎng)卡都能找到迪拜的網(wǎng)卡了。
但是,這是不可行的,因?yàn)檫@種廣播的方式不僅效率低,而且僅限于同一個(gè)網(wǎng)絡(luò)內(nèi)的電腦傳輸。因此,必須找到一個(gè)能夠區(qū)分哪些Mac地址屬于一個(gè)子網(wǎng)絡(luò)的方法,如果是一個(gè)子網(wǎng)絡(luò),就通過廣播發(fā)送,如果不是,就通過“路由“發(fā)送。(路由暫時(shí)不做講解)
僅僅依靠Mac地址,是無法做到這一點(diǎn)的,因?yàn)樗桓袭a(chǎn)的廠商有關(guān)系,而跟所處的網(wǎng)絡(luò)無關(guān)。
而規(guī)定網(wǎng)絡(luò)的協(xié)議,叫做IP協(xié)議,這個(gè)協(xié)議所定義的地址,也就叫做IP地址。IP協(xié)議也正是網(wǎng)絡(luò)層的核心。
目前,使用最廣泛的是IPV4協(xié)議,也就是IP協(xié)議第4版。這個(gè)版本規(guī)定,網(wǎng)絡(luò)地址由32個(gè)2進(jìn)制組成,但是我們習(xí)慣使用4段十進(jìn)制來表示IP地址,從0,0,0,0到255,255,255,255。
IPV4協(xié)議分為兩部分,前一部分代表網(wǎng)絡(luò),后一部分代表主機(jī)。但是一個(gè)IPV4的網(wǎng)絡(luò)部分是前8位,還是前24位,還是前32位,我們但看是看不出來的。
那如何判斷兩個(gè)IP是在同一子網(wǎng)絡(luò)呢?這時(shí)可以通過“子碼掩碼”來判斷。
“子碼掩碼”和IPV4的樣式一樣,假設(shè)IPV4地址是:"192.168.66.77",如果網(wǎng)絡(luò)地址是192.168,主機(jī)地址是66.77,那么子碼掩碼就是“255,255,0,0",而如果網(wǎng)絡(luò)地址是192.168.66,主機(jī)地址是77,那么子碼掩碼就是“255,255,255,0”。
如何判斷兩個(gè)IP地址是不是同一網(wǎng)絡(luò)內(nèi)就是使用兩個(gè)IP地址和兩個(gè)子碼掩碼進(jìn)行AND運(yùn)算,如果網(wǎng)絡(luò)部分一樣,主機(jī)部分都是0就表示是一個(gè)子網(wǎng)絡(luò)。
和“以太網(wǎng)”傳輸用的幀一樣,IP數(shù)據(jù)包也分為Head和Data兩部分,其中Head主要包含版本、長度、IP地址等信息,Data部分包含IP數(shù)據(jù)包的具體內(nèi)容,如下圖所示:
IP數(shù)據(jù)包Head部分長度為20到60個(gè)字節(jié),整個(gè)數(shù)據(jù)包總長度最大字節(jié)是65535字節(jié),所以一個(gè)IP數(shù)據(jù)包可能被打包為多個(gè)以太網(wǎng)數(shù)據(jù)包發(fā)送。那如果IP數(shù)據(jù)包放入以太網(wǎng)數(shù)據(jù)包就是下圖所示的樣式:
而我們這時(shí)知道,如果發(fā)送一個(gè)IP數(shù)據(jù)包,需要知道對(duì)方的IP和Mac地址,IP地址都是已知的,而我們可以通過ARP協(xié)議獲取要發(fā)送的地址的Mac地址。
ARP協(xié)議全稱是:Address Resolution Protocol,也就是地址解析協(xié)議。
ARP協(xié)議也是發(fā)送一個(gè)數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中),其中包含要查詢Mac地址的主機(jī)的IP地址,在對(duì)方Mac地址一欄,填寫“FF:FF:FF:FF:FF:FF”,表示這是一個(gè)"廣播"地址,這個(gè)IP地址所在子網(wǎng)絡(luò)中的每一臺(tái)主機(jī)都會(huì)收到這個(gè)數(shù)據(jù)包,從中取出IP地址,和自身的IP地址進(jìn)行比較,如果相同,則會(huì)發(fā)送自己的Mac地址,否則,自動(dòng)丟棄這個(gè)包。
傳輸層
我們?cè)撻_始傳輸層的內(nèi)容了,有了網(wǎng)絡(luò)層,我們已經(jīng)可以在互聯(lián)網(wǎng)上任意兩臺(tái)主機(jī)之間建立通信了。
但是,一臺(tái)主機(jī)可能同時(shí)和多臺(tái)主機(jī)交互,當(dāng)一個(gè)數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)送過來的時(shí)候,你如何判斷它是哪臺(tái)主機(jī)發(fā)送過來的內(nèi)容呢?
這時(shí)候我們就涉及到了“端口(port)",它其實(shí)是每一個(gè)使用網(wǎng)卡的程序的編號(hào),來自不同程序的數(shù)據(jù)包都能發(fā)送到主機(jī)的特定端口,這樣我們就能判斷哪個(gè)數(shù)據(jù)包是從哪個(gè)程序發(fā)送過來的了。
"端口"介于0—65535之間,其中0到1023的端口被系統(tǒng)占用,用戶只能使用大于1023的端口,一般你使用的網(wǎng)絡(luò)程序會(huì)默認(rèn)選擇一個(gè)空閑的端口和你的主機(jī)進(jìn)行通信。
而傳輸層其實(shí)就是建立與端口對(duì)端口的通信,而網(wǎng)絡(luò)層就是主機(jī)對(duì)主機(jī)的通信。
既然是根據(jù)端口發(fā)送數(shù)據(jù),那我們就得在數(shù)據(jù)包中加入端口的信息,這就需要我們使用新的協(xié)議,也就是傳輸層協(xié)議。
最簡單的傳輸層協(xié)議是UDP協(xié)議,它的格式基本就是在數(shù)據(jù)前面加上端口,也是由Head和Data組成的,其中Head部分定義了發(fā)出的端口和對(duì)方接收的端口,也長這樣:
那把UDP數(shù)據(jù)包放到IP數(shù)據(jù)包中再放到以太網(wǎng)數(shù)據(jù)包中就是以下的樣子:
UDP數(shù)據(jù)包Head部分共8個(gè)字節(jié),Data部分最大為65535字節(jié),正好可以放到一個(gè)IP包里。
而比UDP協(xié)議更加出名的是TCP協(xié)議,因?yàn)閁DP協(xié)議比較簡單,但是缺點(diǎn)是數(shù)據(jù)包發(fā)出后,不知道對(duì)方是否收到。為了提高網(wǎng)絡(luò)安全性,TCP協(xié)議出現(xiàn)了,它的缺點(diǎn)是過程復(fù)雜、實(shí)現(xiàn)困難、消耗資源較多。TCP協(xié)議對(duì)應(yīng)的數(shù)據(jù)包和UDP結(jié)構(gòu)一樣,但是TCP數(shù)據(jù)包沒有長度限制,理論可以無限長,為了保證網(wǎng)絡(luò)的效率,通常TCP數(shù)據(jù)包的長度不會(huì)超過IP數(shù)據(jù)包的長度,以保證單個(gè)TCP數(shù)據(jù)包不必再分割。
在TCP四層模型中,將會(huì)話層、表示層、應(yīng)用層,統(tǒng)看成應(yīng)用層,因?yàn)檫@層主要就是一些高級(jí)協(xié)議,基于底下幾層進(jìn)行不同形式的數(shù)據(jù)傳遞。而這幾層的數(shù)據(jù)都會(huì)放到TCP/UDP協(xié)議包里,通常放完就成了這樣:
會(huì)話層
會(huì)話層對(duì)應(yīng)的協(xié)議主要是SSL(加密發(fā)送的數(shù)據(jù))、SMTP(發(fā)送接收郵件)和DNS協(xié)議。
而DNS協(xié)議我們需要重點(diǎn)介紹一下:
假設(shè)我們?cè)L問Baidu,我們并不知道它的IP地址,我們只是在地址欄輸入了www.baidu.com,就進(jìn)入了百度的主界面,而系統(tǒng)如何通過域名來找到網(wǎng)站的DNS地址呢?
DNS,全稱為Domain Name System,也就是域名系統(tǒng),它會(huì)幫我們把網(wǎng)址轉(zhuǎn)換為IP地址,而具體方式是,發(fā)送這個(gè)域名到你設(shè)置的DNS服務(wù)器,現(xiàn)在各大公司都有自己的DNS服務(wù)器地址。
這時(shí)我們就知道了百度的IP地址是:180.149.132.151
表示層和應(yīng)用層我們?cè)诖讼炔蛔鼋榻B,后面使用中會(huì)慢慢用到。
聲明:本文大部分摘自阮一峰老師的博客,建議大家還是去看一下阮老師寫的,比較詳細(xì),地址:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
轉(zhuǎn)載于:https://www.cnblogs.com/Fill/p/8759398.html
總結(jié)
以上是生活随笔為你收集整理的网络协议入门(OSI七层和TCP/IC四层协议)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高性能优秀的服务框架-dubbo介绍
- 下一篇: [Bzoj4260]Codechef R