前言
若是沒有體系化的認知,瞭解的信息越多也就越迷茫!若是對本質的認知就是錯的,瞭解的信息越多誤差也就越大!信息絕對不等於認知,互聯網碎片化信息究竟有多少價值須要認真篩選web
以前就想了解一下關於計算機網絡方面的知識,網上搜來搜去就是那兩本書,一本是《HTTP權威指南》,這本書的厚度快遇上新華字典了;另外一本是《TCP/IP講解,卷1》,看完以後,我就呵呵了! 算法
最近看了上野宣(日本做家)寫的《圖解HTTP》,打算把書中的知識點簡單的歸類總結一下,或者叫摘抄一下更爲合理,方便本身後期複習。原本本身是搞移動端的,可漸漸發現了瓶頸,若是想要在專業技術的道路上走的踏實,仍是繞不開HTTP協議,繞不開更加系統和低層的計算機知識,大學的時候總以爲本身學的東西都太理論化,根本應付不了實際的項目工程,最近的感觸卻徹底相反,理論是能夠指導實踐的,試想:若是大學也開通了廚師專業,大學確定要從廚師的階級屬性、社會使命學起,甚至還要兼顧這個職業的歷史演變等,學的時候枯燥無味,感受這跟新東方開學就給你發兩把菜刀直接顛勺的教學效率確定不能比,如今想一想感受仍是太嫩了,給本身不學習找理由已經到了不惜要自暴自棄的地步了,加之社會總有說大學生不如XX之類的新聞,搞得本身更是自行慚穢.....
算了,不扯了,直接上乾貨吧,技多不壓身~
第一章 瞭解Web及網絡基礎
1.1 網絡基礎 TCP/IP
TCP/IP協議族裏可分爲應用層、傳輸層、網絡層和數據層。瀏覽器
應用層
應用層決定了向用戶提供應用服務時通訊的活動。TCP/IP協議族內預存了各種通用的應用服務。好比FTP(File Transfer Protocol,文件傳輸協議)和DNS(Domain Name Sysytem,域名系統),HTTP協議也處於該層。安全
傳輸層
傳輸層對上層應用層,提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。在傳輸層有兩個性質不一樣的協議:TCP(Transmission Control Protocol,傳輸控制協議)和UDP(User Data Protocol,用戶數據報協議)。服務器
網絡層
網絡層用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小數據單位,該層規定了經過怎樣的路徑(所謂的傳輸路線)到達對方計算機,比把數據包傳送給對方。cookie
鏈路層(又名數據鏈路層,網絡接口層)
用來處理連接網絡的硬件部分。包括控制操做系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等物理可見的部分。網絡
1.2 發送HTTP大致流程
一、客戶端在應用層(HTTP協議)發出一個想看某個Web頁面的HTTP請求;
二、爲了傳輸方便,在傳輸層(TCP協議)把從應用層收到的數據(HTTP請求報文)進行分割,並在各個報文上打上標記序號及端口號後轉發給網絡層;
三、在網絡層(IP協議,Internet Protocol),增長做爲通訊目的地的MAC地址後轉發給鏈路層。這樣一來,發往網絡的通訊請求就準備齊全了;
四、接收端的服務器在鏈路層收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的HTTP請求。
1.3 與HTTP關係密切的協議:IP、TCP和DNS
負責傳輸的IP協議
按層次分,IP(Internet Protocol)網際協議位於網絡層,IP協議的做用是把各類數據包傳送給對方。而要保證確實傳送到對方那裏,則須要知足各種條件,其中兩個重要的條件是IP地址和MAC地址(Media Access Control Address)。學習
IP地址和MAC地址: 指明瞭節點被分配到的地址,MAC地址是指網卡所屬的固定地址,IP地址能夠和MAC地址進行配對。IP地址可變換,但MAC地址基本上不會更改。大數據
使用ARP協議憑藉MAC地址進行通訊
IP間的通訊依賴MAC地址。在網路上通訊雙方在同一局域網內的狀況不多,通常是通過多臺計算機和網絡設備中轉才能鏈接到對方。而在進行中轉時,會採用ARP協議(Address Resolution Protocol)。ARP是一種用以解釋地址的協議,根據通訊方的IP地址就能夠反查出對應方的MAC地址。網站
確保可靠性的TCP協議
按層次分,TCP位於傳輸層,提供可靠的字節流服務。所謂字節流服務是指爲了方便傳輸,將大塊數據分割成以報文段爲單位的數據包進行管理。TCP協議爲了更容易傳送大數據才把數據分割,並且TCP協議可以確認數據最終是否送達到對方。
TCP的三次握手:確保數據能到達目標
一、發送端首先發送一個帶SYN(synchronize)標誌的數據包給對方;
二、接受端收到後,回傳一個帶有SYN/ACK(acknowledgement)標誌的數據包以示傳達確認消息;
三、最後,發送端再回傳一個帶ACK標誌的數據包,表明「握手🤝」結束。
負責域名解析的DNS服務
DNS(Domain Name System)服務是和HTTP協議同樣位於應用層的協議,他提供域名到IP地址之間的解析服務。例如把www.hackr.jp解析成對應的IP地址20X.189.105.112
第二章 簡單的HTTP協議
請求報文是由請求方法、請求URI(統一資源標識符,URL:統一資源定位符)、協議版本、可選的請求收不字段和內容實體構成。
2.3 HTTP是不保存狀態的協議
HTTP是一種不保存狀態,即無狀態協議。HTTP協議自身不對請求和響應之間的通訊狀態進行保存,不作持久化處理。因此爲了保存狀態引入了cookie技術,後面細講。
2.4 告知服務器意圖的HTTP方法
一、GET:獲取資源; 二、POST:傳輸實體主體 三、PUT:傳輸文件 四、HEAD:得到報文首部,告知通訊狀態 五、DELETE:刪除文件 六、OPTIONS:詢問支持的方法 七、TRACE:追蹤路徑
2.5 使用Cookie的狀態管理
Cookie會根據從服務器端發送的響應報文內的一個叫作Set-Cookie的首部字段信息,通知客戶端保存Cookie,當下次客戶端再往該服務器發送請求時,客戶端會自動在請求報文中加入Cookie值後發送出去。服務器端根據客戶端發過來的cookie對比服務器上的記錄,最後獲得以前的狀態信息。即:
- 一、請求報文(沒有Cookie信息的狀態);
- 二、響應報文(服務端生成Cookie信息);
- 三、請求報文(自動發送保存着的Cookie信息)。
web網站爲了管理用戶的狀態會經過web瀏覽器,把一些數據臨時寫入用戶的計算機內,接着當用戶訪問該web網站時,可經過通訊方式取回之間發放的cookie;
Cookie屬性
第三章 返回結果的HTTP狀態碼以及Host
狀態碼
Host
第四章 確保Web安全的HTTPS
HTTP的缺點:
- 通訊使用明文(不加密),內容可能會被竊聽;
- 不驗證通訊方的身份,所以有可能遭遇假裝;
- 沒法證實報文的完整性,因此有可能已遭到篡改。
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
一、客戶端經過發送Client Hello報文開始SSL通訊,報文中包含客戶端支持的SSL的指定版本、加密組件(Cipher Suite)列表(所使用的加密算法及密鑰長度等);
二、服務器可進行SSL通訊時,會以Server Hello報文做爲應答,和客戶端同樣,在報文中包含SSL版本及加密組件。服務器的加密組件內容是從接收到的客戶端加密組件內篩選出來的;
三、以後服務器發送Certificate報文,報文中包含公開密鑰證書;
四、最後服務器發送Server Hello Done報文通知客戶端,最初階段的SSL握手協商部分結束;
五、SSL第一次握手結束後,客戶端以Client Key Exchange報文做爲應答,報文中包含通訊加密中使用的一種被稱爲Pre-mastersecret的隨機密碼串,該報文已用步驟3中的公開密鑰進行加密;
六、接着客戶端繼續發送Change Cipher Spec報文,該報文會提示服務器,在此報文以後的通訊會採用Pre-master secret密鑰進行加密;
七、客戶端發送Finished報文,該報文包含連接至今所有報文的總體校驗值,此次握手協商是否可以成功,要以服務器是否可以正確解密該報文做爲斷定標準;
八、服務器一樣發送Change Cipher Spec報文;
九、服務器一樣發送Finished報文;
十、服務器和客戶端的Finshed報文交換完畢後,SSL鏈接就算創建完成。固然,通訊會受到SSL的保護,今後處開始進行應用層協議的通訊,即發送HTTP請求;
十一、應用層協議通訊,即發送HTTP響應;
十二、最後由客戶端斷開鏈接,斷開鏈接時,發送close_notify報文,上圖作了一些省略,這步以後再發送TCP FIN報文來關閉與TCP的通訊;