一、計算機網絡分層結構
爲了增強計算機網絡系統的靈活性,便於開發和維護,建立了一種層次結構模型,各層只管自己的事,通過拿到別的層的服務和數據來完成自己的任務,暴露出自己的接口給其他層或者應用程序使用。分層很複雜,OSI的七層結構什麼的沒有必要理會,這裏介紹書中提到的五層結構模型。(這足夠了)
(這裏引用一張圖,來源:http://blog.csdn.net/dadadie/article/details/52190817)
我們只用簡單瞭解一下各層的作用
1、實體層(物理層)
物理層說白了就是那些連線,光纖、雙絞線之類的。
2、鏈接層(數據鏈路層)
他也是計算機網絡的低層,他的作用就是將網絡層交下來的數據封裝成幀交給物理層,以及將從物理層接收的幀解析出數據交給網絡層。(ps:數據在物理層一般叫幀,在網絡層交IP數據報或者包)。像適配器、轉發器、集線器、網橋、交換機都被歸在鏈接層。
3、網絡層
網絡層的作用是向上層提供簡單靈活的、無連接的、盡最大努力交付的數據報服務,它不提供服務質量的承諾,它是爲主機間提供邏輯通信。這裏涉及到地址解析,路由等內容。常見的路由器可以歸爲網絡層。
4、運輸層
運輸層是爲應用進程之間提供端到端的邏輯通信。傳說中的TCP三次握手、四次握手就發生在這裏。這裏需要重點關注。
5、應用層
域名解析、HTTP、電子郵件等等都是應用層的範疇。應用層的協議比較多,我們重點關注HTTP 協議。
下面將各層的協議給個圖
(圖片來源:http://product.pconline.com.cn/itbk/wlbg/network/1107/2474259.html)
沒找到合適的圖,這裏可以理解網絡接口層爲物理層+數據鏈路層
二、網絡層
網絡層重點是IP協議,IP協議包括ARP協議、ICMP協議、IGMP協議。下面逐步講解
1、IP地址
(1)定義:IP地址是各個主機在網絡中的唯一的邏輯標識,標識了主機及其所在的網絡。IP::={網絡號,主機號},他是由32爲二進制輸構成的,一般寫成點分十進制形式。
(2)分類:分爲AB -E,識別方法爲,第一位爲0爲A類,10爲B類,110爲C類,DE不用考慮,網絡號,A爲前8爲,B類16位,C類32位。
2、子網劃分
直接用網絡號劃分網絡會造成ip地址浪費,因爲一個網絡中可能並沒有那麼多的主機。我們需要將一部分主機號拿過來當網絡號,增加可用網絡個數。
我們將網絡號部分全部變成1,主機號部分全部變成0就可以得到子網掩碼,用子網掩碼與IP地址逐位求與就能得到該IP地址的網絡地址。
IP地址 AND 子網掩碼 = 對應的網絡地址
舉一個例子,你的公司拿到了一個B類網絡號(比較有錢啊)145.13.0.0,但是呢你的公司有7個部門需要有獨立的網絡,你總不能申請6個網絡號吧,此時就要劃分子網了,我們可以取主機號的前三位作爲子網號,2的三次方=8,去掉111,000剛好得到6個網絡,這個時候的子網掩碼是多少呢?將網絡號全部變成1,前面的16位網絡號+你的三位子網號。答案就是255.255.11100000.00000000(不要像我一樣),就是255.255.224.0。假設你們公司有臺主機IP地址爲145.13.3.1,那麼他的網絡地址是多少呢?直接和255.255.224.0求與得到的是145.13.0.0對不對,這不就是劃分給你的網絡號嗎?是的,這說明對外來將你們還是一個網絡,並非因爲劃分子網而變成多個網絡。
3、無分類IP
這也是解決IP不夠用的方法,他是在IP後面跟一個/數字,例如145.13.3.1/20,它表示前20位是網絡地址。
4、物理地址(MAC地址)
物理地址是數據鏈路層和物理層使用的地址,基於此,我們需要一種轉換機制
5、ARP(地址解析協議)
在網絡層需要將IP解析爲MAC,因爲高層只認識IP,低層只認識MAC,ARP就是做這個事情的。
6、ICMP協議(網際控制報文協議)
它允許主機或路由器報告差錯情況和提供異常情況報告。
7、IGMP,與多播有關,瞭解即可
8、VPN ,NAT
VPN就是常說的FQ,NAT是提供了使用專用內網訪問因特網的機制。
總結一下:網絡層應該重點掌握子網劃分、ARP。
三、傳輸層
1、TCP協議(傳輸控制協議)
(1)定義:TCP鏈接::={(IP1:port1),(IP2:port2)}
(2)特點:
面向鏈接:使用TCP協議之前必須先建立連接
點對點:提供供的是一對一的連接
可靠交付:TCP傳送的數據無差錯、不丟失、不重複、按時序到達
全雙工:我可以給你發數據,你也可以給我發
面向字節流:會將數據分塊分解
(3)TCP連接建立和釋放(三次握手、四次握手來了)
(圖片來源:http://www.cnblogs.com/NeilZhang/p/5700312.html)人家拍個照片也不容易,小弟用用啊。 這個兩個圖就反映了傳說的那幾次握手,其實是幾次確認過程。
(4)可靠傳輸工作原理
停止等待協議和連續ARQ協議(瞭解)
(5)流量控制(滑動窗口)(瞭解)
(6)擁塞控制:慢開始、擁賽避免、快重傳、快恢復(瞭解)
2、UDP(用戶數據報協議)
特點:無連接的,盡最大努力交付,面向報文,沒有擁賽控制,首部開銷小,一對一、一對多、多對一、多對多都可以。
注意:和TCP比較,他是DNS用到的重要協議
四、應用層
1、DNS(域名系統)
DNS建立了名字和IP的映射關係。我們的應用程序拿到一個域名時不能直接使用,而是要用到其對應的IP地址,這是要麼從自己的緩存中拿到,要麼就請求域名服務器解析。
2、域名的樹狀結構
域名的規則是一個樹狀結構,有機構管理頂級域名,二級機構拿到頂級域名後可以進一步劃分,交給三級機構,三級機構還能再分,這樣只要在一個級裏沒有重複的域名劃分,那麼任何一個域名都是唯一的。上個圖:
3、域名解析過程
應用程序拿到域名後會在自己緩存中查找,有則直接用,沒有則請求本地域名服務器解析,如果服務器中有則返回個應用程序,如果沒有則請求其他本地域名服務器,得到IP後給應用程序,如果在本地服務器沒有找到,它會告訴應用程序該向哪個服務器請求。
4、HTTP協議
(1)萬維網
萬維網不是一個特殊的網絡,而是由許多網絡在一起構成的集合。
(2)URL(統一資源定位符)
指的是網絡中某個資源的指針。通過這個指針就可以標識網絡中的一個資源,然後可以進行各種操作。
基本格式:協議://主機:端口/路徑 (例如:https://i.cnblogs.com/EditPosts.aspx)
(3)http協議(超文本傳輸協議)
http協議是面向事務的(不可分割)的應用層協議,HTTP協議是無狀態的
一個http的基本流程,上一個圖,自己畫的,我加上了瀏覽器的渲染過程,其實沒那麼複雜。
記住一個HTTP有兩個RTT,不知道RTT請問度良
(4)請求報文(參考:http://blog.csdn.net/zhangliang_571/article/details/23508953)
(5)響應報文(參考:http://blog.csdn.net/a19881029/article/details/14002273)
(6)重要的http狀態碼(參考:http://www.runoob.com/http/http-status-codes.html)
5、cookie
cookie是保存在客戶端的小的文本文件,某個域下的cookie會跟隨請求響應傳送
6、應用層的其他內容(這裏不仔細講了,只是列出來)
FTP:文件傳輸協議
SMTP:簡單郵件傳輸協議
DHCP:動態主機配置協議
SNMP:簡單網絡管理協議
五、總結
本文給出了前端開發者必須掌握的計算機網絡知識,這只是我個人的理解,並不代表一定是對的或者一定適合你,推薦看謝希任的那個計算機網絡教材,這樣你一定會收穫更多。後面可能會寫關於網絡安全的文章,最近在看一本書叫《WEB前端黑客技術揭祕》。