七層網絡結構:面試
應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層編程
通常也做五層 應用層、傳輸層、網絡層、數據鏈路層、物理層(實體層)瀏覽器
TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關係,網絡有一段比較容易理解的介紹:「咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有不少,好比HTTP、FTP、TELNET等,也能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP 文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。」安全
實體層。若是咱們的電腦須要聯網,那麼首先須要網線(光纜、電纜、無線電波)等方式均可以,主要規定網絡傳輸的一些電器特性,做用是傳輸0和1這樣的電信號。由於單純傳輸0和1是沒有意義的,全部引出了數據鏈路層。服務器
(1)數據通訊的基礎知識:網絡
(韓玉剛老師16課時)架構
多少個電信號算一組,每個信號位有什麼意義,即在實體層的基礎上肯定了0和1的分組方式,也就咱們常說的以太網協議。以太網規定一組電信號構成一個數據包,咱們將它叫作幀, 每一個幀又分爲如下兩個部分:其中head稱之爲標頭(固定長度18byte)、data(46byte~1500byte)即數據。標頭包含了數據包的說明項(如發送者、接受者、數據類型等),若是數據的長度大於最大長度即1518的話,數據就不得不分爲多個組發送。socket
① 回到一個問題,標頭的中的發送者和接受者是根據什麼標識的呢? 數據包必須從一塊網卡傳輸到另一個網卡上面,而每個網卡就會有一個地址,即數據包的發送地址和接收地址,(也稱之爲Mac地址)每個網卡在出廠的時候都會有一個全世界惟一的Mac地址,長度爲48Bit。 一般使用12個16進制數來表示。(如:14:5c:89:96:44:c1)注意:(有的軟件能夠更改計算機的Mac地址)前6個16進制數是表明廠商的編號,後6個表明廠商的網卡流水號。tcp
②廣播: 以太網數據包必須知道接收方的Mac地址才能將數據發送,在知道Mac地址的狀況下是怎樣發送的呢?以太網中並非將數據包一對一準確地傳輸到方法,而是採用一種廣播的形式,向本網絡的全部計算機發放,讓每臺收到數據的計算機自行判斷是否是接收方。以下圖中,1好計算機向2號計算機發送數據包,同一個網絡中的3,4,5也接受到這個包,它們讀取包頭找到接收方的Mac地址,而後與自身Mac地址對比,若是都相同就接受該包,不然就丟棄。 url
同一子網中用廣播的形式還可行,可是若是不是屬於同一子網,全球有成敗一計算機,若是不一樣子網之間任然以以太網廣播形式發送數據,顯然是不現實的,因此不屬於同一子網絡的話就有了路由的方式發送數據。路由的意思即如何向不一樣的子網絡去分發數據包,遺憾的是Mac地址只與廠商有光,和網絡環境無關,這就致使了網絡層的誕生。
網絡層引入了一套新的地址,讓咱們可以區分不一樣的計算機是否在同一子網內,這個地址即網址。因而計算機就有了兩個地址,一個就mac地址,一個就是網絡地址,兩種地址之間沒有任何聯繫,mac地址綁定在網卡之上,網絡地址由管理員分配的,網絡地址肯定計算機所在的子網絡,mac地址負責將數據包發送到子網絡中的目標網卡上。邏輯上就能知道是先處理網絡地址而後處理mac地址的。由此又引入了ip協議。
①ip協議定義的地址叫作ip地址,目前普遍使用ipv4, ipv4中一個ip地址由32個二進制位組成,習慣分爲4段10進制數字,(192.168.0.1)範圍(0.0.0.0~255.255.255.255)互聯網上的每一臺計算都會分配到一個ip地址,一個ip地址分爲兩部分 ,假設192.168.0表明網絡,後面一個3表明主機。同一子網的網絡部分必然相同,事實上一個給一個ip地址我麼是沒法準確判斷哪一個部分爲網絡部分,(能夠是前面24爲,也能夠是前面的16位),那麼如何準確判斷兩個計算機是否屬於同一子網絡呢?就必須用到子網掩碼,子網掩碼錶示子網絡特徵的參數,形式上相似ip地址(32位二進制數字),其網絡部分所有是二進制1,主機部分所有是二進制0.因而假如一個ip地址的前24爲表示網絡部分,後8爲表示主機部分的話,它的ip地址就爲11111111-11111111-11111111-00000000,用10進製表示爲225.225.225.0
②ip數據包:根據ip協議發送的數據就叫ip數據包,ip的數據包也分爲標頭和數據兩個部分,部分以下左圖所示:其中一定包含了ip的地址信息,實際上ip數據包是直接放入以太網數據包的數據部分的,因此不用修改以太網的規格,這就是互聯網分層結構的一個好處,上層的變更不會涉及下層的結構。因而以太網的數據包能夠看作以下右圖所示:標頭(20-60個byte)主要包含版本號,長度,ip地址等信息。data(最大65515byte)因而當data的大小超過了以太網數據最大值的時候,就會將ip分割爲多個以太數據包發送出去。一般發送數據狀況下,對方的ip地址是已知的,可是mac地址不得而知,因而就有了ARP協議的存在。
③ ARP協議:假設存在2臺計算機,當兩個計算機不屬於同一子網絡的時候,無法知道對方的mac地址,只能將數據包傳送到兩個子網絡鏈接的網關到處理,當兩個主機在同一個子網絡的時候就可使用ARP協議獲得對方的mac地址,ARP協議是怎門作的呢?ARP協議發出一個數據包(也包含在以太網的數據包中)此包中包含了查詢主機的ip地址和對方的mac地址。(此mac地址是用臨時的6組16進制的數字表示一個廣播地址)因而所在子網的每臺主機都會收到該數據包,收到以後就會取出該包裏面的ip地址,而後和本身的ip地址作一個比較,若是是相同的話就作回覆,並上報本身的mac地址。若是不相同就丟棄該包。有了ARP協議以後,就能夠獲得同一個子網絡內的主機mac地址。而後把數據發送至任意主機。 引出一個問題:咱們在上網的時候同時打開了多個程序,(如瀏覽器和qq聊天),當咱們接受一個數據包的時候,數據包是如何知道它是屬於哪一個程序的呢?因而就引入了一個參數:端口。
④端口:每個數據包發送到主機的特定端口上,因此不一樣的程序會取到本身的數據,端口好都是0~65535之間的整數。正好16個二進制位。其中0-1023端口是系統佔用的,(本地啓動一個80端口可能會提示權限不夠)
傳輸層的功能就是創建端口到端口之間的通訊,相比之下,網絡層是主機與主機之間的通訊,只要肯定主機和端口就能夠實現程序之間的交流。因此unix系統中,把主機加端口叫作套接字(socket)有了它以後就進行網絡編程了。網絡編程的兩個協議:
①UDP協議:格式就是在數據前面加上端口號。UDP數據包也由標頭和數據包組成,以下左圖:標頭部分定義發出的端口和接收端口,data部分爲具體的內容。而後將整個UDP的數據包又放到ip數據包的數據部分,前面說過ip數據包又是放到以太網數據包中的,因此整個以太網數據包又成了下面右圖樣子:UDP標頭部分只有個字節。總長度不超過65535字節,正好能夠放進一個ip數據包。優勢:簡單易實現。缺點是可靠性差。因而引入了TCP協議。
②TCP協議:能夠理解爲有確認機制的UDP協議。每發出數據包都進行確認,若有遺失就重發。TCP有三次握手。能夠保證數據不會丟失,缺點是過程實現複雜,消耗資源大,TCP數據包沒有長度限制,一般限制不超哥ip數據長度。確保單個的tcp包不被分割。 TCP數據包是面向鏈接(如打電話先撥號創建鏈接)UDP是無鏈接的。即發送數據以前不須要創建鏈接。
三次握手:
因爲互聯網是開放的網絡架構,數據的來源五花八門,因此須要事先約定一些格式,否則根本沒有辦法解讀。應用層的做用就是規定應用程序的數據格式。
回到下圖:圖中1號計算機須要與4號計算機通訊,因爲1和4不在同一個子網內,因而先須要將數據包發送給子網1 的網關(geteway)也能夠理解爲路由器,網關1經過路由協議發現4計算機處於2關內,因此網關1會將數據發送給網關2而後由網關2再將數據發送給4號計算機。1號計算機要將數據發送給網關1的話,必須知道網關1的mac地址,因此數據包的目標地址分兩種狀況:
1:當通訊的計算機屬於同一個子網絡,只須要知道對方的mac地址和ip地址便可。
2:當通訊雙放不在同一個網絡。 須要知道網關的mac地址和對方計算機的ip地址。
(1)動態ip地址:計算機開機以後自動分配到一個ip地址, 不會被別人設定,使用的協議叫DHCP協議(屬於應用層的協議,創建在UDP協議之上因此其整個協議的數據包結果以下:)此協議規定:在每個子網中,有一臺叫作DHCP服務器的計算機專門負責此網絡內的ip地址。因此有新的計算機加入到子網中,必須向DHCP服務器發送一個DHCP請求數據包,去申請一個ip地址和相關的網絡參數。
在瀏覽器中輸入url,而後改url會通過DNS(DomainNameSystem)解析而獲得服務器的ip地址。
以下圖所示:藍色爲交換機,右邊爲服務器,左邊爲客戶計算機,m開頭表示mac地址,15.0.0.2表示ip地址。在數據傳輸的過程當中間,ip地址決定了數據包最終到哪裏去,mac地址決定數據在路由器中怎麼走。
因爲數據在傳輸過程當中數據包後面攜帶的mac地址一直是原mac地址和目標路由器的mac地址,因此它是變化的,服務器在拿到數據的時候是不可能知道客戶端的mac地址的,可是能夠知道ip地址。
注意:數據幀中的FCS爲校驗碼,校驗是否數據完整無異常。
網絡排錯應該由底層往高層排查,應爲高層是基於底層實現的。
1.物理層故障,首先查看連接狀態,發送和接受的數據包是否正常。
2.數據連路程故障, MAC衝突, ADSL欠費, 網速沒有辦法協商一致, 計算機連接遇到所悟的VLAN
3.網絡層故障 配置錯誤的IP地址,子網掩碼、或網關、路由器沒有配置到達目標網絡的路由
4.應用層故障,應用程序配置錯誤