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