咱們將應用層,表示層,會話層並做應用層,從TCP/IP五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議,就理解了整個物聯網通訊的原理。html
首先,用戶感知到的只是最上面一層——應用層,自上而下每層都依賴於下一層,因此咱們從最下層開始切入,比較好理解。算法
每層都運行特定的協議,越往上越靠近用戶,越往下越靠近硬件。編程
由來:孤立的計算機之間要一塊兒「玩耍」,就必須接入Internet,即計算機之間必須完成組網。windows
物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0。瀏覽器
由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麼意思。緩存
數據鏈路層功能:定義了電信號的分組方式。安全
以太網協議:服務器
早期的時候各個公司都有本身的分組方式,後來造成了統一的標準,即以太網協議Ethernet。網絡
Ethernet規定:tcp
head包含:(固定18個字節)
data包含:(最短46字節,最長1500字節)
head長度+data長度 = 最短64字節或樁長1518字節,超過最大限制就分片發送。
MAC地址:
head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具有網卡,發送端和接收端的地址即是指網卡的地址,即mac地址。
mac地址:每塊網卡出廠時都被燒製上一個世界惟一的mac地址,長度爲48位2進制,一般由12位16進制數表示(前六位是廠商編號,後六位是流水線號)。
廣播:
有了mac地址,同一網絡內的兩臺主機就能夠通訊了(一臺主機經過arp協議獲取另一臺主機的mac地址)。
ethernet採用最原始的方式,廣播的方式進行通訊,即計算機通訊基本靠吼。
網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就能夠彼此通訊了,問題是世界範圍的互聯網是由一個個彼此隔離的小的局域網組成的,那麼若是全部的通訊都採用以太網的廣播方式,那麼一臺機器發送的包全世界都會收到,這就不只僅是效率低的問題了,這會是一種災難。
上圖結論:必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,若是是就採用廣播的方式發送,若是不是,就採用路由的方式(向不一樣廣播域/子網分發數據包),mac地址是沒法區分的,它只跟廠商有關。
網絡層功能:引入一套新的地址用來區分不一樣的廣播域/子網,這套地址即網絡地址。
一、IP協議:
二、子網掩碼:
所謂」子網掩碼」,就是表示子網絡特徵的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分所有爲1,主機部分所有爲0。好比,IP地址172.16.10.1,若是已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
子網掩碼是用來標識一個IP地址的哪些位是表明網絡位,以及哪些位是表明主機位。子網掩碼不能單獨存在,它必須結合IP地址一塊兒使用。子網掩碼只有一個做用,就是將某個IP地址劃分紅網絡地址和主機地址兩部分。
爲何要區分網絡位和主機位?
這就像寄信,你給你的南方姑娘寄信,她肉身在廈門,詳細地址是廈門鼓浪嶼三街27號,那網絡位就至關於城市,詳細地址就是主機位,網絡位幫你定位到城市,主機位幫你找到你的南方姑娘。 路由器經過子網掩碼來肯定哪些是網絡位,哪些是主機位。
區分網絡位和主機位是爲了劃分子網,就是把一個大網絡分紅多個小網絡,爲何要分子網呢?
劃分子網本質上就是借主機位到給網絡位,每借一位主機位,這個網段的可分配主機就會越少,好比192.168.1.0/24可用主機255個,借一位變成192.168.1.0/25,那可用主機就從255-128=127個了(從最大的值開始借),再借一位192.168.1.0/26,那可用主機數就變成了255-(128+64)=63個啦。
三、IP地址分類:
IP地址根據網絡ID的不一樣分爲5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。
一、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類地址用於多點廣播(Multicast): D類IP地址第一個字節以「lll0」開始,它是一個專門保留的地址。它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。
五、E類IP地址 以「llll0」開始,爲未來使用保留。
全零(「0.0.0.0」)地址對應於當前主機。全「1」的IP地址(「255.255.255.255」)是當前子網的廣播地址。
迴環地址(127.0.0.1) 又稱爲本機地址,那它跟0.0.0.0是什麼區別呢?那得先了解迴環接口
環回接口(loopback)。平時咱們用127.0.0.1來嘗試本身的機器服務器好使很差使。走的就是這個loopback接口。對於環回接口,有以下三點值得注意:
四、IP報文:
IP協議是TCP/IP協議的核心,全部的TCP,UDP,IMCP,IGCP的數據都以IP數據格式傳輸,要注意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種數據未傳達之後的處理機制--這被認爲是上層協議--TCP或UDP要作的事情。因此這也就出現了TCP是一個可靠的協議,而UDP就沒有那麼可靠的區別。這是後話,暫且不提。
IP協議頭
挨個解釋它是教科書的活,咱們感興趣的只是那八位的TTL字段,還記得這個字段是作什麼的麼?這個字段規定該數據包在穿過多少個路由以後纔會被拋棄(這裏就體現出來IP協議包的不可靠性,它不保證數據被送達),某個ip數據包每穿過一個路由器,該數據包的TTL數值就會減小1,當該數據包的TTL成爲零,它就會被自動拋棄。這個字段的最大值也就是255,也就是說一個協議包也就在路由器裏面穿行255次就會被拋棄了,根據系統的不一樣,這個數字也不同,通常是32或者是64。
五、ARP協議
ARP協議由來:計算機通訊基本靠吼,即廣播的方式,全部上層的包到最後都要封裝上以太網頭,而後經過以太網協議發送,在談及以太網協議時候,我門瞭解到通訊是基於mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就須要經過arp協議。
ARP協議功能:播的方式發送數據包,獲取目標主機的mac地址。
協議工做方式:每臺主機ip都是已知的。
例如:主機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。
查看本機arp表的命令(在終端窗口中輸入):arp -a
六、ICMP協議
前面講到了,IP協議並非一個可靠的協議,它不保證數據被送達,那麼,天然的,保證數據送達的工做應該由其餘的模塊來完成。其中一個重要的模塊就是ICMP(網絡控制報文)協議。
當傳送IP數據包發生錯誤--好比主機不可達,路由不可達等等,ICMP協議將會把錯誤信息封包,而後傳送回給主機。給主機一個處理錯誤的機會。
咱們通常主要用ICMP協議檢測網絡是否通暢,基於ICMP協議的工具主要有ping 和traceroute。
ping
ping這個單詞源自聲納定位,而這個程序的做用也確實如此,它利用ICMP協議包來偵測另外一個主機是否可達。原理是用類型碼爲0的ICMP發請 求,受到請求的主機則用類型碼爲8的ICMP迴應。ping程序來計算間隔時間,並計算有多少個包被送達。用戶就能夠判斷網絡大體的狀況。咱們能夠看到, ping給出來了傳送的時間和TTL的數據。
traceroute(Linux後者mac os)或者 tracert(windows系統)
用來查看從當前主機到某地址一共通過多少條路由。
傳輸層的由來:網絡層的ip幫咱們區分子網,以太網層的mac幫咱們找到主機,而後你們使用的都是應用程序,你的電腦上可能同時開啓qq,暴風影音,迅雷等多個應用程序,那麼咱們經過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程序呢?答案就是端口,端口即應用程序與網卡關聯的編號。
傳輸層功能:創建端口到端口的通訊。
補充:端口範圍0-65535,0-1023爲系統佔用端口。
傳輸層有兩種協議,TCP和UDP,見下圖。
一、TCP協議
可靠傳輸,TCP數據包沒有長度限制,理論上能夠無限長,可是爲了保證網絡的效率,一般TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。
爲何tcp是可靠的數據傳輸?
最可靠的方式就是隻要不獲得確認,就從新發送數據報,直到獲得對方的確認爲止。
TCP報文
TCP的3次握手和4次揮手:
二、UDP協議
不可靠傳輸,」報頭」部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
三、總結
TCP協議雖然安全性很高,可是網絡開銷大,而UDP協議雖然沒有提供安全機制,可是網絡開銷小,在如今這個網絡安全已經相對較高的狀況下,爲了保證傳輸的速率,咱們通常仍是會優先考慮UDP協議!
一、應用層簡介
應用層直接和應用程序接口並提供常見的網絡應用服務。它是開放系統的最高層,是直接位應用程序提供服務的。其做用是在實現多個系統應用進程相互通訊的同時,完成一系列業務處理所需的服務。其服務元素分爲兩類:公共應用服務元素CASE和特定應用服務元素SASE。
位於計算機網絡體系結構的最上層,前面四層作的全部事情就是爲了他服務,他也是設計和創建計算機網絡的最終目的,通俗的講,就是咱們開發的應用軟件,就處於這一層,好比,QQ,瀏覽器訪問網頁,等等你看獲得的應用軟件都是在這一層,可是這些軟件在運行的過程當中,也須要依靠一些特定的協議才能完成相應的功能,好比瀏覽器經過網址訪問網頁,其中是如何作到的,這就是咱們所要學習的東西。
二、應用層中的兩種應用軟件:客戶/服務器和P2P體系結構
(1)客戶/服務器
這種類型,就是咱們很熟悉的客戶端,服務器模型,客戶端請求服務器,服務器響應客戶端這樣的一種方式進行「交流」。
(2)P2P
也稱爲對等體系結構。P2P至關於每一個人的電腦度能夠當服務器,也能夠當客戶端,不僅僅限制於只能客戶端訪問服務器,你本身的計算機能夠去訪問別人的計算機上的內容,別的一樣能夠訪問你計算機上的內容,這樣達到一種共享的狀態。
三、DNS協議
(1)DNS概述
Domain Name System 域名系統。也能夠叫作域名解析協議。在咱們在瀏覽器訪問網頁的時候,一般度是用咱們所熟悉的一連串有意義的英文字符標識,好比www.baidu.com、www.sohu.com等。
可是咱們學了前面的知識,計算機並非經過這些字符串去找到對應的計算機,而是經過32位的二進制,也就是咱們的IP地址來找。因此就有了DNS協議。他的做用就是將域名解析成對應的IP地址。
由於讓咱們人去記那些IP地址,很難記得住,因此就想辦法讓IP地址轉變爲了如今的域名,在進行訪問的時候,只須要將域名解析爲對應的IP地址就好了,這個域名也頗有講究,其中分爲好多層域名,是獨一無二的。這裏不細講這個,只要咱們知道,域名經過DNS能找到對應的IP地址就好了。
(2)DNS協議工做過程
1)經過域名訪問網頁
2)計算機會先將域名發送到一個解析域名的服務器上
2.1)在其服務器上有不少服務器,能解析各類各樣的域名,好比有專門解析.org的,解析.com的,解析.net的。等等,最主要的有一個根域名服務器
2.2)域名解析(在服務器上查找IP地址)的過程有兩種算法,迭代查詢,遞歸查詢。通常是兩種查詢的結合
2.3)本機計算機找到其中一臺解析域名的服務器(多是.com),若是沒有找到對應的IP地址,那麼就會去找根域名服務器,根域名服務器知道全部的子服務器,因此他確定知道該域名所對應的IP地址在那個子服務器中,因此告訴第一次查詢的服務器要他去另外一臺服務器上找,找到了,就將其返回給計算機,之後在有另外一臺計算機也經過這個域名訪問,那麼第一臺服務器會有原來的域名IP地址的緩存,就不用去找根服務器了。
3)找到了,就能找到咱們要訪問的服務器了。
四、HTTP協議
(1)HTTP簡介
1)超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的WWW文件都必須遵照這個標準。
2)HTTP是一個客戶端和服務器端請求和應答的標準(TCP)。客戶端是終端用戶,服務器端是網站。經過使用Web瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個到服務器上指定端口(默認端口爲80)的HTTP請求。(咱們稱這個客戶端)叫用戶代理(user agent)。應答的服務器上存儲着(一些)資源,好比HTML文件和圖像。(咱們稱)這個應答服務器爲源服務器(origin server)。在用戶代理和源服務器中間可能存在多箇中間層,好比代理,網關,或者隧道(tunnels)。儘管TCP/IP協議是互聯網上最流行的應用,HTTP協議並無規定必須使用它和(基於)它支持的層。 事實上,HTTP能夠在任何其餘互聯網協議上,或者在其餘網絡上實現。
3)一般,由HTTP客戶端發起一個請求,創建一個到服務器指定端口(默認是80端口)的TCP鏈接。HTTP服務器則在那個端口監聽客戶端發送過來的請求。一旦收到請求,服務器(向客戶端)發回一個狀態行,好比"HTTP/1.1 200 OK",和(響應的)消息,消息的消息體多是請求的文件、錯誤消息、或者其它一些信息。HTTP使用TCP而不是UDP的緣由在於(打開)一個網頁必須傳送不少數據,而TCP協議提供傳輸控制,按順序組織數據,和錯誤糾正。
4)經過HTTP或者HTTPS協議請求的資源由統一資源標示符(Uniform Resource Identifiers)(或者,更準確一些,URLs)來標識。
(2)統一資源定位符URL
URL:統一資源定位符,經過下面格式,能夠看出,就是用來定位咱們所須要資源在服務器上的位置。
格式: <協議> :// <主機> : <端口> / <路徑>
協議:http
主機:域名/IP地址,原理度同樣,到頭來仍是會轉換爲IP地址,經過這個才能找到目標服務器
端口: 在傳輸層須要使用的,訪問目的主機的哪一個端口號。
路徑:精準的定位咱們所須要的資源位置、
日常會省略協議和端口號,由於這些都是默認的,在訪問主頁時,路徑也會省略。好比www.baidu.com這個默認進入百度的主頁完整寫法 http://www.baidu.com:80/index.html 。
(3)超文本傳輸協議
做用:怎樣向服務器請求文檔、服務器怎麼把文檔傳送給瀏覽器,通俗點講,就是咱們想服務器訪問網頁資源時,服務器如何把網頁上的東西傳給咱們。
客戶端向服務器:請求報文 服務器向客戶端:響應報文
其實就是:在經過URL訪問你服務器時,就會發送一個請求報文,告訴服務器須要哪些東西,服務器知道後,返回一個響應報文給客戶端,其中就會帶有一些網頁信息。就是經過這個來達到傳送網頁資源的目的,如今來具體看看,請求報文和響應報文的格式。
(4)請求和響應報文的格式
可參見個人另外一篇博文[http://www.javashuo.com/article/p-dciytupu-ky.html]
(5)HTTP協議的功能
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。
HTTP是客戶端瀏覽器或其餘程序與Web服務器之間的應用層通訊協議。在Internet上的Web服務器上存放的都是超文本信息,客戶機須要經過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,僅可用於Web訪問,也能夠用於其餘因特網/內聯網應用系統之間的通訊,從而實現各種應用資源超媒體訪問的集成。
咱們在瀏覽器的地址欄裏輸入的網站地址叫作URL (Uniform Resource Locator,統一資源定位符)。就像每家每戶都有一個門牌地址同樣,每一個網頁也都有一個Internet地址。當你在瀏覽器的地址框中輸入一個URL或是單擊一個超級連接時,URL就肯定了要瀏覽的地址。瀏覽器經過超文本傳輸協議(HTTP),將Web服務器上站點的網頁代碼提取出來,並翻譯成漂亮的網頁。