一、OSI/ISO參考模型
OSI(Open System Interconnect),即開放式系統互聯。 一般都叫OSI參考模型,是ISO(國際标準化組織)組織在1985年研究的網絡互聯模型。該體系結構标準定義了網絡互連的七層架構(實體層、資料鍊路層、網絡層、傳輸層、會話層、表示層和應用層),即ISO開放系統互連參考模型。在這一架構下進一步詳細規定了每一層的功能,以實作開放系統環境中的互連性、互操作性和應用的可移植性。
劃分原則:
ISO為了更好的使網絡應用更為普及,就推出了OSI參考模型。其含義就是推薦所有公司使用這個規範來控制網絡。這樣所有公司都有相同的規範,就能互聯了。提供各種網絡服務功能的計算機網絡系統是非常複雜的。根據分而治之的原則,ISO将整個通信功能劃分為七個層次,劃分原則是:
(1)網路中各節點都有相同的層次;
(2)不同節點的同等層具有相同的功能;
(3)同一節點内相鄰層之間通過接口通信;
(4)每一層使用下層提供的服務,并向其上層提供服務;
(5)不同節點的同等層按照協定實作對等層之間的通信。
各層功能:
(1)實體層(Physical Layer)
實體層是OSI參考模型的最低層,它利用傳輸媒體為資料鍊路層提供實體連接配接。它主要關心的是通過實體鍊路從一個節點向另一個節點傳送比特流,實體鍊路可能是銅線、衛星、微波或其他的通訊媒介。它關心的問題有:多少伏電壓代表1?多少伏電壓代表0?時鐘速率是多少?采用全雙工還是半雙工傳輸?總的來說實體層關心的是鍊路的機械、電氣、功能和規程特性。
(2)資料鍊路層(Data Link Layer)
資料鍊路層是為網絡層提供服務的,解決兩個相鄰結點之間的通信問題,傳送的協定資料單元稱為資料幀。
資料幀中包含實體位址(又稱MAC位址)、控制碼、資料及校驗碼等資訊。該層的主要作用是通過校驗、确認和回報重發等手段,将不可靠的實體鍊路轉換成對網絡層來說無差錯的資料鍊路。
此外,資料鍊路層還要協調收發雙方的資料傳輸速率,即進行流量控制,以防止接收方因來不及處理發送方來的高速資料而導緻緩沖器溢出及線路阻塞。
(3)網絡層(Network Layer)
網絡層是為傳輸層提供服務的,傳送的協定資料單元稱為資料包或分組。該層的主要作用是解決如何使資料包通過各結點傳送的問題,即通過路徑選擇算法(路由)将資料包送到目的地。另外,為避免通信子網中出現過多的資料包而造成網絡阻塞,需要對流入的資料包數量進行控制(擁塞控制)。當資料包要跨越多個通信子網才能到達目的地時,還要解決網際互連的問題。
(4)傳輸層(Transport Layer)
傳輸層的作用是為上層協定提供端到端的可靠和透明的資料傳輸服務,包括處理差錯控制和流量控制等問題。該層向高層屏蔽了下層資料通信的細節,使高層使用者看到的隻是在兩個傳輸實體間的一條主機到主機的、可由使用者控制和設定的、可靠的資料通路。
傳輸層傳送的協定資料單元稱為段或封包。
(5)會話層(Session Layer)
會話層主要功能是管理和協調不同主機上各種程序之間的通信(對話),即負責建立、管理和終止應用程式之間的會話。會話層得名的原因是它很類似于兩個實體間的會話概念。例如,一個互動的使用者會話以登入到計算機開始,以登出結束。
(6)表示層(Presentation Layer)
表示層處理流經結點的資料編碼的表示方式問題,以保證一個系統應用層發出的資訊可被另一系統的應用層讀出。如果必要,該層可提供一種标準表示形式,用于将計算機内部的多種資料表示格式轉換成網絡通信中采用的标準表示形式。資料壓縮和加密也是表示層可提供的轉換功能之一。
(7)應用層(Application Layer)
應用層是OSI參考模型的最高層,是使用者與網絡的接口。該層通過應用程式來完成網絡使用者的應用需求,如檔案傳輸、收發電子郵件等。
影響:
OSI是一個定義良好的協定規範集,并有許多可選部分完成類似的任務。
它定義了開放系統的層次結構、層次之間的互相關系以及各層所包括的可能的任務。是作為一個架構來協調群組織各層所提供的服務。
OSI參考模型并沒有提供一個可以實作的方法,而是描述了一些概念,用來協調程序間通信标準的制定。即OSI參考模型并不是一個标準,而是一個在制定标準時所使用的概念性架構。
二、TCP/IP參考模型
TCP/IP參考模型是計算機網絡的祖父ARPANET和其後繼的網際網路使用的參考模型。ARPANET是由美國國防部DoD(U.S.Department of Defense)贊助的研究網絡。逐漸地它通過租用的電話線連結了數百所大學和政府部門。當無線網絡和衛星出現以後,現有的協定在和它們相連的時候出現了問題,是以需要一種新的參考體系結構。這個體系結構在它的兩個主要協定出現以後,被稱為TCP/IP參考模型(TCP/IP reference model)。
四層協定:
TCP/IP是一組用于實作網絡互連的通信協定。Internet網絡體系結構以TCP/IP為核心。基于TCP/IP的參考模型将協定分成四個層次,它們分别是:網絡通路層、網際互連層、傳輸層(主機到主機)、和應用層。
1.應用層
應用層對應于OSI參考模型的高層,為使用者提供所需要的各種服務,例如:FTP、Telnet、DNS、SMTP等.
2.傳輸層
傳輸層對應于OSI參考模型的傳輸層,為應用層實體提供端到端的通信功能,保證了資料包的順序傳送及資料的完整性。該層定義了兩個主要的協定:傳輸控制協定(TCP)和使用者資料報協定(UDP).
TCP協定提供的是一種可靠的、面向連接配接的資料傳輸服務;而UDP協定提供的則是不可靠的、無連接配接的資料傳輸服務.
3.網際互聯層
網際互聯層對應于OSI參考模型的網絡層,主要解決主機到主機的通信問題。它所包含的協定設計資料包在整個網絡上的邏輯傳輸。注重重新賦予主機一個IP位址來完成對主機的尋址,它還負責資料包在多種網絡中的路由。該層有四個主要協定:網際協定(IP)、位址解析協定(ARP)、網際網路組管理協定(IGMP)和網際網路控制封包協定(ICMP)。
IP協定是網際互聯層最重要的協定,它提供的是一個不可靠、無連接配接的資料報傳遞服務。
4.網絡接入層(即主機-網絡層)
網絡接入層與OSI參考模型中的實體層和資料鍊路層相對應。它負責監視資料在主機和網絡之間的交換。事實上,TCP/IP本身并未定義該層的協定,而由參與互連的各網絡使用自己的實體層和資料鍊路層協定,然後與TCP/IP的網絡接入層進行連接配接。
每層運作常見的實體裝置:
兩種參考模型的比較:
(1)OSI參考模型和TCP/IP參考模型都采用了層次結構的概念,
(2)都能夠提供面向連接配接和無連接配接兩種通信服務機制;
不同點
①前者是七層模型,後者是四層結構
②對可靠性要求不同(後者更高)
(3) OSI模型是在協定開發前設計的, 具有通用性.TCP/IP是先有協定集然後建立模型, 不适用于非TCP/IP網絡.
(4)實際市場應用不同(OSI模型隻是理論上的模型,沒有考慮到商業性并沒有成熟的産品,而TCP/IP已經成為“實際上的國際标準”)
三、資料鍊路層
資料鍊路層由來:單純的電信号0和1沒有任何意義,必須規定電信号多少位一組,每組什麼意思
資料鍊路層的功能:定義了電信号的分組方式
以太網協定:
早期的時候各個公司都有自己的分組方式,後來形成了統一的标準,即以太網協定ethernet
以太網規定
- 一組電信号構成一個資料包,叫做“幀”
- 每一資料幀分成:報頭head和資料data兩部分
head | data |
head包含:(固定18個位元組)
- 發送者/源位址,6個位元組
- 接收者/目标位址,6個位元組
- 資料類型,6個位元組
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協定,它定義的位址稱之為ip位址,廣泛采用的v4版本即ipv4,它規定網絡位址由32位2進制表示
- 範圍0.0.0.0-255.255.255.255
- 一個ip位址通常寫成四段十進制數,例:172.16.10.1
ip位址分成兩部分
- 網絡部分:辨別子網
- 主機部分:辨別主機
注意:單純的ip位址段隻是辨別了ip位址的種類,從網絡部分或主機部分都無法辨識一個ip所處的子網
例:172.16.10.1與172.16.10.2并不能确定二者處于同一子網
子網路遮罩
所謂”子網路遮罩”,就是表示子網絡特征的一個參數。它在形式上等同于IP位址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP位址172.16.10.1,如果已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
知道”子網路遮罩”,我們就能判斷,任意兩個IP位址是否處在同一個子網絡。方法是将兩個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位址,另一個是确定哪些位址在同一個子網絡。
ip資料包
ip資料包也分為head和data部分,無須為ip包定義單獨的欄位,直接放入以太網包的data部分
head:長度為20到60位元組
data:最長為65,515位元組。
而以太網資料包的”資料”部分,最長隻有1500位元組。是以,如果IP資料包超過了1500位元組,它就需要分割成幾個以太網資料包,分開發送了。
以太網頭 | ip 頭 | ip資料 |
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
五、傳輸層
傳輸層的由來:網絡層的ip幫我們區分子網,以太網層的mac幫我們找到主機,然後大家使用的都是應用程式,你的電腦上可能同時開啟qq,暴風影音,等多個應用程式,
那麼我們通過ip和mac找到了一台特定的主機,如何辨別這台主機上的應用程式,答案就是端口,端口即應用程式與網卡關聯的編号。
傳輸層功能:建立端口到端口的通信
補充:端口範圍0-65535,0-1023為系統占用端口
tcp協定:
可靠傳輸,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確定單個TCP資料包不必再分割。
以太網頭 | ip 頭 | tcp頭 | 資料 |
udp協定:
不可靠傳輸,”報頭”部分一共隻有8個位元組,總長度不超過65,535位元組,正好放進一個IP資料包。
以太網頭 | ip頭 | udp頭 | 資料 |
tcp封包
tcp三次握手和四次揮手
六、應用層
應用層由來:使用者使用的都是應用程式,均工作于應用層,網際網路是開發的,大家都可以開發自己的應用程式,資料多種多樣,必須規定好資料的組織形式
應用層功能:規定應用程式的資料格式。
例:TCP協定可以為各種各樣的程式傳遞資料,比如Email、WWW、FTP等等。那麼,必須有不同協定規定電子郵件、網頁、FTP資料的格式,這些應用程式協定就構成了”應用層”。
七、socket
我們知道兩個程序如果需要進行通訊最基本的一個前提能能夠唯一的标示一個程序,在本地程序通訊中我們可以使用PID來唯一标示一個程序,但PID隻在本地唯一,網絡中的兩個程序PID沖突幾率很大,這時候我們需要另辟它徑了,我們知道IP層的ip位址可以唯一标示主機,而TCP層協定和端口号可以唯一标示主機的一個程序,這樣我們可以利用ip位址+協定+端口号唯一标示網絡中的一個程序。
能夠唯一标示網絡中的程序後,它們就可以利用socket進行通信了,什麼是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的接口供應用層調用已實作程序在網絡中通信。
socket起源于UNIX,在Unix一切皆檔案哲學的思想下,socket是一種"打開—讀/寫—關閉"模式的實作,伺服器和用戶端各自維護一個"檔案",在建立連接配接打開後,可以向自己檔案寫入内容供對方讀取或者讀取對方内容,通訊結束時關閉檔案。
八、網絡通信流程
1.本機擷取
- 本機的IP位址:192.168.1.100
- 子網路遮罩:255.255.255.0
- 網關的IP位址:192.168.1.1
- DNS的IP位址:8.8.8.8
2.打開浏覽器,想要通路Google,在位址欄輸入了網址:www.google.com。
3.dns協定(基于udp協定)
13台根dns:
A.root-servers.net198.41.0.4美國
B.root-servers.net192.228.79.201美國(另支援IPv6)
C.root-servers.net192.33.4.12法國
D.root-servers.net128.8.10.90美國
E.root-servers.net192.203.230.10美國
F.root-servers.net192.5.5.241美國(另支援IPv6)
G.root-servers.net192.112.36.4美國
H.root-servers.net128.63.2.53美國(另支援IPv6)
I.root-servers.net192.36.148.17瑞典
J.root-servers.net192.58.128.30美國
K.root-servers.net193.0.14.129英國(另支援IPv6)
L.root-servers.net198.32.64.12美國
M.root-servers.net202.12.27.33日本(另支援IPv6)
域名定義:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html
頂級域名:以.com,.net,.org,.cn等等屬于國際頂級域名,根據目前的國際網際網路域名體系,國際頂級域名分為兩類:類别頂級域名(gTLD)和地理頂級域名(ccTLD)兩種。類别頂級域名是 以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等結尾的域名,均由國外公司負責管理。地理頂級域名是以國家或地區代碼為結尾的域名,如"CN"代表中國,"UK"代表英國。地理頂級域名一般由各個國家或地區負責管理。
二級域名:二級域名是以頂級域名為基礎的地理域名,比喻中國的二級域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
一般來說,二級域名是域名的一條記錄,比如alidiedie.com是一個域名,www.alidiedie.com是其中比較常用的記錄,一般預設是用這個,但是類似*.alidiedie.com的域名全部稱作是alidiedie.com的二級
4.HTTP部分的内容,類似于下面這樣:
GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …
我們假定這個部分的長度為4960位元組,它會被嵌在TCP資料包之中。
5 TCP協定
TCP資料包需要設定端口,接收方(Google)的HTTP端口預設是80,發送方(本機)的端口是一個随機生成的1024-65535之間的整數,假定為51775。
TCP資料包的标頭長度為20位元組,加上嵌入HTTP的資料包,總長度變為4980位元組。
6 IP協定
然後,TCP資料包再嵌入IP資料包。IP資料包需要設定雙方的IP位址,這是已知的,發送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。
IP資料包的标頭長度為20位元組,加上嵌入的TCP資料包,總長度變為5000位元組。
7 以太網協定
最後,IP資料包嵌入以太網資料包。以太網資料包需要設定雙方的MAC位址,發送方為本機的網卡MAC位址,接收方為網關192.168.1.1的MAC位址(通過ARP協定得到)。
以太網資料包的資料部分,最大長度為1500位元組,而現在的IP資料包長度為5000位元組。是以,IP資料包必須分割成四個包。因為每個包都有自己的IP标頭(20位元組),是以四個包的IP資料包的長度分别為1500、1500、1500、560。
8 伺服器端響應
經過多個網關的轉發,Google的伺服器172.194.72.105,收到了這四個以太網資料包。
根據IP标頭的序号,Google将四個包拼起來,取出完整的TCP資料包,然後讀出裡面的”HTTP請求”,接着做出”HTTP響應”,再用TCP協定發回來。
本機收到HTTP響應以後,就可以将網頁顯示出來,完成一次網絡通信。