經過學習:阮一峯(很全很詳細)html
互聯網的核心是「一系列協議」,這些協議對電腦如何鏈接和組網,作出了詳細的規定。只要把這些協議搞懂了,就很好理解互聯網的原理了。服務器
1、概述網絡
1.1五層模型socket
用戶接觸的是最上面一層學習
實體層-->鏈路層-->網絡層-->傳輸層-->應用層ui
越往下越靠近硬件,越往上越靠近用戶spa
1.2層與協議設計
每一層都須要完成相應的功能,可是必須遵照某種規則,這個規則就稱之爲「協議(protocol)」3d
每一層都有許多協議,這些協議的總稱「互聯網協議」(Internet Protocol Suite)htm
接下來就介紹每一層的功能,主要就是介紹每一層的主要協議
2、實體層
首先將電腦鏈接起來,採用電纜、光纜、無線電波、雙絞線
用物理手段將電腦鏈接起來,規定了網絡的一些電氣特性,做用是傳送0或1的電信號
3、鏈路層
3.1單純的0或1的電信號沒有意義,必須規定解讀方式:多少個電信號一組?每一個信號位表明什麼意義?
這就是鏈路層的功能,在「實體層」上規定了0和1分組方式
3.2「以太網協議」
開始每一個公司都有本身的分組方式,逐漸一個「以太網」協議佔據了主導地位。
「以太網協議」規定一組電信號組成一個數據包稱之爲「幀(Frame)」.每個幀有兩部分組成:頭(Head)和數據(Data)
「標頭」包含了一些信息 (發送者、接受者、數據類型等)
「數據」就是發送的內容
「標頭」的長度默認是18字節。「數據」最短爲46字節,最長1500字節,所以幀的最短爲64字節,最長1518。若是發送的數據過長,就須要拆分紅好幾幀來發送
3.3MAC地址
上邊提到「標頭」中包含着發送者和接受者的信息,那麼如何標識發送者和接受者的呢
「以太網協議」規定接入網絡的全部設備必須就有「網卡」接口。數據包是從一個網卡接口發送至另外一個網卡接口。網卡的地址就是發送和接收的地址,稱之爲MAC地址
每個網卡都有世界上獨一無二的MAC地址,長度是48個二進制,一般用12個十六進制表示
前六個是廠商編號,後六位是該廠商網卡的流水號
3.4廣播
定義只是第一步,一個網卡是如何得知另外一個網卡的MAC地址的呢
ARP協議能夠解決這個問題,具體的後邊在學習
可是知道了另外一個網卡的MAC地址,如何準確的吧數據包送達呢
這裏,「以太網」採用了的最原始的方法,向本網絡下的全部計算機發送數據包,而後在判斷是不是接收方
在上圖中,計算機1要向計算機2發送數據,須要將數據包發送到計算機2/3/4/5,而後2/3/4/4在讀取數據包中MAC地址和自身比較,若是相同,做進一步的處理;若是不一樣,就丟棄這個數據包;這就叫作「廣播」
有了數據包的定義、網卡的MAC地址和廣播的發送方式,「鏈路層」就能夠在多個計算機之間發送數據包了
四:網絡層
4.1網絡層的由來
以太網協議,依靠MAC地址來傳輸數據。理論上,單單靠MAC地址,上海的網卡是能找獲得洛杉磯的網卡(MAC地址惟一性)。
可是這樣也有巨大的缺點,以太網依靠廣播的方式發送數據包。全部成員人手一份包,效率過低,並且侷限於一個子網絡,也就是說兩臺計算機不在一個子網絡,廣播是過不去的,這樣的設計也是合理的,想一想一發送數據,互聯網的人人手一包,會引起災難的。
互聯網是由無數個子網絡組成的巨型網絡,上海的計算機和洛杉磯的計算機不可能在同一個子網絡。
所以,能不能區分是否在同一個子網絡,若是同一個子網絡,直接廣播;若是不在同一個子網絡,就得「路由」。Mac只與廠商有關,與網絡無關。這就致使了網絡層的出現,引進了新的地址,稱之爲網絡地址
4.2IP協議
規定網絡地址的協議叫作IP協議。網絡地址叫作IP地址
如今普遍應用的是IP協議第四版,簡稱IPv4。
這個版本規定32個二進制組成,從0-255.255.255.255
每一臺主機都會有一個IP地址,IP地址惟一,不然會發生IP地址衝突。,IP地址由兩部分組成,前一部分表明網絡,後一部分表明主機。
好比172.16.254.1,假設前24位表明網絡,後8位則表明主機;兩個出於同一子網絡下的網絡部分相同,好比172.16.254.3和172.16.254.7處於同一個子網下;
可是單單從IP地址看不出來,由於你不知道是前16位仍是前24位甚至前28位表明網絡部分;這個時候子網掩碼就出來了
子網掩碼和IP地址同樣,網絡部分全爲1主機部分爲零.好比172.16.254.1,假設前24位表明網絡,後8位則表明主機;那麼他的子網掩碼就是255.255.255.0
只要知道了子網掩碼就能夠判斷兩個IP是否在同一個子網絡,將兩個IP地址和子網掩碼進行and操做,是否相等。
IP地址的做用是:1.爲每個計算機安排一個地址 2.判斷是否在同一個子網絡下
4.3IP數據包
直接將IP數據包放進以太網數據包中,不須要增長新的欄位,這就是互聯網分層的好處。
「IP數據包」包括標頭和數據
標頭部分包括版本、長度、IP地址,「數據」部分是IP數據包的具體內容,放進以太數據包中就變成了
IP數據包的標頭長度20字節到60字節,整個數據包的長度是65535,所以「數據部分」最長65515字節;以太網數據包的「數據部分」最長爲1500字節。所以若是IP數據包超過了1500字節,那麼就要分割爲幾個以太網數據包,分開發送
4.4ARP協議
網絡層,IP數據包放在以太網數據包中,所以咱們必須須要知道兩個地址,一是Mac地址一個是IP地址。一般,對方的IP地址是已知的,可是不知道Mac地址
因此,須要一種機制,能從IP地址得知Mac地址
這裏分爲兩種狀況
一:兩個沒有在同一個子網絡下,只能是吧數據包發送到兩個子網絡相連的網關,須要網關去處理
二:在同一個子網絡下,能夠用ARP協議,獲得Mac地址。ARP協議也是發送一個數據包,包含在以太網數據包,其中包含他要訪問的IP地址,在對方的Mac地址這一欄,填的是FF.FF.FF.FF,表示這是一個「廣播」地址。在該子網絡中的每一個主機都會收到這個數據包,從中取出IP地址與本身比較,若是相等,作出回覆,告訴對方本身的Mac地址;若是不相等,丟棄這個包
5、傳輸層
有了Mac地址和IP地址以後,咱們就能夠實如今任一兩個主機之間創建聯繫
可是,在同一個主機上,有不少進程在使用到網絡,好比一邊瀏覽網頁,一邊和朋友聊天,當接收到個數據包時須要判斷是表示誰的內容
所以,咱們還須要一個「參數」表示接收到的數據包供哪一個進程使用,這個「參數」就是「端口」(port),其實就是每一個進程使用網卡的編號。每一個數據包發送到特定的端口,每一個進程到特定的端口取數據包
端口號是0-65535,16個二進制,0-1023的端口被系統佔用,所以用戶只能選擇大於1023的端口。
不論是聊天仍是瀏覽網頁,都會隨機選擇一個端口號和服務器相連
「傳輸層」的做用就是肯定端口到端口,「網絡層」肯定的是主機到主機;只要肯定了主機和端口就能實現程序之間的交流。所以Unix把主機+端口成爲「套接字」(socket)。
有了它,就能夠實現網絡應用程序開發
5.2UDP協議
在數據包中加入端口信息,就須要新的協議,最簡單的實現就是UDP協議,就是在數據前邊加上端口號
標頭中是發送端口和接收端口,數據部分就是具體的內容;而後把UDP數據包中放入IP數據包中
UDP數據包很是簡單,"標頭"部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
5.3TCP協議
UDP有一個缺陷就是發送出去不能肯定是否接受到了
爲了解決這一問題,TCP協議就出來了,能夠近似認爲他是有確認機制的UDP協議,每發送一個數據包,都須要一個確認;若是數據包丟失沒有接收到確認那麼就知道數據包丟失,須要從新發送
TCP數據包理論上無限長,可是爲了保證網絡的效率,通常不會超過IP數據包的長度,以確保單個TCP數據包不被分割
6、應用層
應用程序接受到了數據包,接下來就是解讀。TCP協議傳輸的數據五花八門,好比Email、WWW、FTP,那麼就須要不一樣協議來規定電子郵件、網頁、FTP的格式,這些應用程序協議就構成了應用層。
至此,整個互聯網的五層結構,自下而上所有講完了。
下一篇主要回顧TCP協議