TCP/IP五層模型詳解

   將應用層,表示層,會話層並做應用層,從tcp/ip五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議就理解了整個互聯網通訊的原理。python

  首先,用戶感知到的只是最上面一層應用層,自上而下每層都依賴於下一層,因此咱們從最下一層開始切入,比較好理解每層都運行特定的協議,越往上越靠近用戶,越往下越靠近硬件編程

  

1、物理層

  物理層由來:孤立的計算機之間必須完成組網。安全

  

  物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0服務器

2、數據鏈路層

  數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麼意思網絡

  數據鏈路層的功能:定義了電信號的分組方式socket

一、以太網協議

  分組方式後來造成了統一的標準,即以太網協議ethernettcp

(1)ethernet規定:

  • 一組電信號構成一個數據包,叫作「幀」
  • 每一數據幀分紅:報頭head和數據data兩部分
       head                        data                             

 

(2)head包含:(固定18個字節)

  • 發送者/源地址,6個字節
  • 接收者/目標地址,6個字節
  • 數據類型,6個字節

(3)data包含:(最短46字節,最長1500字節)

  • 數據包的具體內容

head長度+data長度=最短64字節(18+46),最長1518字節,超過最大限制就分片發送工具

二、mac地址:(局域網內廣播時,根據mac地址定位)

  head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具有網卡,發送端和接收端的地址即是指網卡的地址,即mac地址oop

  mac地址:每塊網卡出廠時都被燒製上一個世界惟一的mac地址,長度爲48位2進制,一般由12位16進制數表示(前六位是廠商編號後六位是流水線號):spa

  

三、廣播

  有了mac地址,同一網絡內的兩臺主機就能夠通訊了(一臺主機經過arp協議獲取另一臺主機的mac地址)

  ethernet採用最原始的方式,基於MAC地址廣播的方式進行通信,即計算機通訊基本靠吼。

  

3、網絡層

  網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就能夠彼此通訊了,問題是世界範圍的互聯網是由

一個個彼此隔離的小的局域網組成的,那麼若是全部的通訊都採用以太網的廣播方式,那麼一臺機器發送的包全世界都會收到,

這就不只僅是效率低的問題了,這會是一種災難。

  世界大網絡是由一個個彼此隔離的局域網組成,以太網包只能在局域網內發送,一個局域網是一個廣播域。

  以太網的廣播包只能在一個廣播域內發送,跨廣播域通訊只能經過路由轉發

  

  上圖說明:須要方法區分哪些計算機是同一廣播域,同一廣播域則採用廣播方式發送,不然採用路由方式(向不一樣廣播域/子網分發數據包)。

       mac地址是沒法區分的,它只跟廠商有關。

  網絡層功能引入一套新的地址用來區分不一樣的廣播域/子網,這套地址即網絡地址

一、IP協議

  IP協議概念:規定網絡地址的協議叫ip協議,它定義的地址稱之爲ip地址,普遍採用的v4版本即ipv4,它規定網絡地址由32位2進製表示。

  IP協議的主要做用:

    一個是爲每一臺計算機分配IP地址;另外一個是肯定哪些地址在同一個子網絡

二、子網掩碼

  所謂」子網掩碼」,就是表示子網絡特徵的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分所有爲1,主機部分所有爲0。好比,IP地址172.16.10.1,若是已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

(1)子網掩碼做用

  知道」子網掩碼」,咱們就能判斷,任意兩個IP地址是否處在同一個子網絡

(2)是否在同一個子網絡判斷方法

  方法是將兩個IP地址與子網掩碼分別進行AND運算(兩個數位都爲1,運算結果爲1,不然爲0),而後比較結果是否相同,若是是的話,就代表它們在同一個子網絡中,不然就不是。

好比,已知IP地址172.16.10.1和172.16.10.2的子網掩碼都是255.255.255.0,請問它們是否在同一個子網絡?二者與子網掩碼分別進行AND運算,

172.16.10.1:10101100.00010000.00001010.000000001

255255.255.255.0:11111111.11111111.11111111.00000000

AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0

 

172.16.10.2:10101100.00010000.00001010.000000010

255255.255.255.0:11111111.11111111.11111111.00000000

AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0

結果都是172.16.10.0,所以它們在同一個子網絡。

三、IP地址

  IP地址範圍:0.0.0.0-255.255.255.255
  IP地址格式:一個ip地址一般寫成四段十進制數,例:172.16.10.1

(1)ip地址分兩個部分

  • 網絡部分:標識子網
  • 主機部分:標識主機

  區分網絡位和主機位是爲了劃分子網,劃分子網主要是爲了避免廣播風暴和地址浪費

  注意:單純的ip地址段只是標識了ip地址的種類,從網絡部分或主機部分都沒法辨識一個ip所處的子網。例:172.16.10.1與172.16.10.2並不能肯定兩者處於同一子網

(2)ip地址分類

  A類IP地址:一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是「0」, 地址範圍從1.0.0.0 到126.0.0.0。可用的A類網絡有126個,每一個網絡能容納1億多個主機。

  B類IP地址:一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是「10」,地址範圍從128.0.0.0到191.255.255.255。可用的B類網絡有16382個,每一個網絡能容納6萬多個主機 。

  C類IP地址:一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是「110」。範圍從192.0.0.0到223.255.255.255。C類網絡可達209萬餘個,每一個網絡能容納254個主機。

  D類IP地址:D類地址第一個字節以「1110」開始,它是一個專門保留的地址。它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機

  E類IP地址:以「llll0」開始,爲未來使用保留。

(3)特殊地址

  全零地址:"0.0.0.0"對應當前地址。

  全「1」地址:"255.255.255.255"是當前子網的廣播地址。

  迴環地址:"127.0.0.1"即本機地址

(4)127.0.0.1與0.0.0.0區別

  環回接口(loopback):

  • 傳給環回地址(通常是127.0.0.1)的任何數據均做爲IP輸入。
  • 傳給廣播地址或多播地址的數據報復制一份傳給環回接口,而後送到以太網上。這是 由於廣播傳送和多播傳送的定義包含主機自己。
  • 任何傳給該主機IP地址的數據均送到環回接口。

四、IP報文

  IP協議是TCP/IP協議的核心,全部的TCP,UDP,IMCP,IGCP的數據都以IP數據格式傳輸,要注意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種數據未傳達之後的處理機制--這被認爲是上層協議--TCP或UDP要作的事情。因此這也就出現了TCP是一個可靠的協議,而UDP就沒有那麼可靠的區別。

    

  ip數據包也分爲head和data部分,無須爲ip包定義單獨的欄位,直接放入以太網包的data部分。

  head:長度爲20到60字節

  data:最長爲65,515字節。

  而以太網數據包的」數據」部分,最長只有1500字節。所以,若是IP數據包超過了1500字節,它就須要分割成幾個以太網數據包,分開發送了。

五、ARP協議

  arp協議介紹:計算機通訊依靠廣播的方式,全部上層的包到最後都要封裝以太網頭,而後經過以太網協議發送。通訊是基於mac的廣播方式實現,可是計算機在發包時,如何獲取目標主機的mac就須要經過arp協議。

  arp協議功能:廣播的方式發送數據包,獲取目標主機的mac地址。

  協議工做方式:每臺主機ip都是已知的

  在以太網環境,爲了正確地向目的主機傳送報文,必須把目的主機的32位IP地址轉換成爲目的主機48位以太網的地址(MAC地址)。這就須要在互聯層有一個服務或功能將IP地址轉換爲相應的物理地址(MAC地址),這個服務或者功能就是ARP協議。

  所謂的「地址解析」,就是主機在發送幀以前將目標IP地址轉換成目標MAC地址的過程。ARP協議的基本功能就是經過目標設備的IP地址,查詢目標設備的MA地址,以保證主機間相互通訊的順利進行。

(1)ARP工做示例

  例如:主機172.16.10.10/24訪問172.16.10.11/24

  首先經過ip地址和子網掩碼區分出本身所處的子網

場景 數據包地址
同一子網 目標主機mac,目標主機ip
不一樣子網 網關mac,目標主機ip

 

 

 

  而後分析172.16.10.10/24與172.16.10.11/24處於同一網絡(若是不是同一網絡,那麼下表中目標ip爲172.16.10.1,經過arp獲取的是網關的mac)

  源mac 目標mac 源ip 目標ip 數據部分
發送端主機 發送端mac FF:FF:FF:FF:FF:FF 172.16.10.10/24 172.16.10.11/24 數據

 

 

  最後這個包會以廣播的方式在發送端所處的自網內傳輸,全部主機接收後拆開包,發現目標ip爲本身的,就響應,返回本身的mac

 六、ICMP協議

  當傳送IP數據包發生錯誤--好比主機不可達,路由不可達等等,ICMP協議將會把錯誤信息封包,而後傳送回給主機。給主機一個處理錯誤的機會.

  ICMP(網絡控制報文)協議通常用於檢測網絡是否通暢,基於ICMP協議的工具主要有Ping和traceroute。

(1)ping

  單詞源自聲納定位,而這個程序的做用也確實如此,它利用ICMP協議包來偵測另外一個主機是否可達。原理是用類型碼爲0的ICMP發請求,受到請求的主機則用類型碼爲8的ICMP迴應。ping程序來計算間隔時間,並計算有多少個包被送達。用戶就能夠判斷網絡大體的狀況。

(2)traceroute

  查看從當前主機到某地址一共通過多少跳路由.

4、傳輸層

  傳輸層的由來:網絡層的ip幫咱們區分子網,以太網層的mac幫咱們找到主機,再經過端口來標識主機上的應用程序。

  端口即應用程序與網卡關聯的編號。

  傳輸層功能:創建端口到端口的通訊,補充:端口範圍0-65535,0-1023爲系統佔用端口

  傳輸層有兩種協議,TCP和UDP

一、TCP協議

  可靠傳輸,TCP數據包沒有長度限制,理論上能夠無限長,可是爲了保證網絡的效率,一般TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。(流式協議,不間斷髮送)

  TCP可靠的緣故:只要不獲得確認,就從新發送數據報,直到獲得對方的確認爲止。

tcp報文:

 

tcp的3次握手和4次揮手

  所謂三次握手(Three-way Handshake),是指創建一個TCP鏈接時,須要客戶端和服務器總共發送3個包。

  首先Client端發送鏈接請求報文,Server段接受鏈接後回覆ACK報文,併爲此次鏈接分配資源。Client端接收到ACK報文後也向Server段發生ACK報文,並分配資源,這樣TCP鏈接就創建了。

  TCP的鏈接的拆除須要發送四個包,所以稱爲四次揮手(four-way handshake)客戶端或服務器都可主動發起揮手動做(中斷鏈接),在socket編程中,任何一方執行close()操做便可產生揮手操做。

  揮手過程:假設Client端發起中斷鏈接請求,也就是發送FIN報文。Server端接到FIN報文後,意思是說"我Client端沒有數據要發給你了",可是若是你還有數據沒有發送完成,則沒必要急着關閉Socket,能夠繼續發送數據。因此你先發送ACK,"告訴Client端,你的請求我收到了,可是我還沒準備好,請繼續你等個人消息"。這個時候Client端就進入FIN_WAIT狀態,繼續等待Server端的FIN報文。當Server端肯定數據已發送完成,則向Client端發送FIN報文,"告訴Client端,好了,我這邊數據發完了,準備好關閉鏈接了"。Client端收到FIN報文後,"就知道能夠關閉鏈接了,可是他仍是不相信網絡,怕Server端不知道要關閉,因此發送ACK後進入TIME_WAIT狀態,若是Server端沒有收到ACK則能夠重傳。「,Server端收到ACK後,"就知道能夠斷開鏈接了"。Client端等待了2MSL後依然沒有收到回覆,則證實Server端已正常關閉,那好,我Client端也能夠關閉鏈接了。

 

二、UDP協議

  不可靠傳輸,」報頭」部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。

 UDP特色:

  • 傳送數據前不須要創建鏈接。
  • 盡最大努力交付,沒法保證數據準確交付到目標主機,也不須要對接收到的UDP報文進行確認。
  • 是面向報文的,將應用層傳輸的數據封裝在UDP包內,不作拆分或合併。
  • 沒有擁塞控制,所以UDP協議發送速率不受網絡擁塞影響
  • 支持一對1、一對多、多對多的交互通訊
  • UDP頭部僅佔用8個字節,佔用較小

三、TCP和UDP對比總結

  TCP協議雖然安全性很高,可是網絡開銷大,而UDP協議雖然沒有提供安全機制,可是網絡開銷小,在如今這個網絡安全已經相對較高的狀況下,爲了保證傳輸的速率,咱們通常仍是會優先考慮UDP協議!

5、應用層

  應用層由來:用戶使用的都是應用程序,均工做於應用層,互聯網是開發的,你們均可以開發本身的應用程序,數據多種多樣,必須規定好數據的組織形式

  應用層功能:規定應用程序的數據格式。

  例:TCP協議能夠爲各類各樣的程序傳遞數據,好比Email、WWW、FTP等等。那麼,必須有不一樣協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了」應用層」。

   

相關文章
相關標籤/搜索