一:DNS解析原理
- 首先查詢瀏覽器的緩存
- 本地的dns緩存
- hosts文件
- 網卡dns1,dns2
- 根域名服務器,世界一共有13台根域名服務器
www.etiantian.org 解析為對應的ip1.1.1.1 這個從域名到IP的解析過程,稱作A紀錄
cname別名紀錄,這個別名解析功能通常被CDN加速服務商應用
mx郵件紀錄,這個mx紀錄功能,在購買或則搭建郵件服務器的時候會被使用
ptr紀錄,反向解析,即把IP地址單項解析為對應的域名,和A紀錄相反,郵件服務等業務中會用到
二,tcp/ip三次握手原理
因為http是工作在第七層應用層,tcp是工作在第四層傳輸層,所以發生http請求之前,還會進行tcp的三次握手
- 客戶端首先向服務器發送一個帶有SYN標識和一個seq的隨機數
- 服務端收到后,需要給客戶端回應一個ack,ack的值就是剛才的seq隨機數的值+1,在回應包里,還包含一個SYN的標識和一個seq隨機數
- 客戶端收到服務端發過來的回應包之后,再給服務端發送一個ack,ack的值就是剛才服務端發過來的seq的值+1
三,http協議原理(www服務的請求過程)請求細節,報文細節
- 請求行
請求行又包括,請求方法,url,協議版本,請求方法主要有GET、HEAD、POST、PUT、DELETE、MOVE,url就是統一資源定位符,通過這個能在服務器上找到唯一的網頁資源,協議版本,目前主流的是http1.1,開始流行的協議版本是http1.0,相對應http1.0,http1.1主要從可擴展性、緩存處理、帶寬優化、持久連接、host頭、錯誤通知、消息傳遞、內容協商等多方面做了一些優化,以上是請求行的內容
- 請求頭部
請求頭部,請求頭部主要有媒體類型,語言類型、支持壓縮、客戶端類型、主機名等,媒體類型主要有文本文件,圖片文件,視頻文件等,語言類型就是告訴服務器客戶端的接受的語言,支持壓縮的話,可以節省帶寬,客戶端類型,會顯示客戶端瀏覽器的版本信息,操作系統信息等
- 空行
空行,代表請求頭部的結束,也代表着請求主體的開始
- 請求主體
報文主體,只有使用POST提交表單的時候,才有
對應的,服務器收到請求報文之后,就會給出響應報文
四,大規模網站集群架構細節
- 靜態網頁
靜態網頁就是沒有后台數據庫,不含php,jsp,asp等程序,不可交互的,開發者編寫的是啥,顯示的就是啥,不會有任何改變
- 動態網頁
動態網頁,有后台數據庫,支持更多的功能,如用戶注冊,登錄,發帖,訂單,博客等,動態網頁並不獨立存在於服務器上的網頁文件,而是當用戶請求服務器上的動態程序時,服務器解析這些程序,並調用數據庫來返回一個完整的網頁內容,它跟靜態網頁的url不同,它的url中包含?、&等特殊符號,搜索引擎收錄的時候存在一定的問題
- 偽靜態網頁
動態網頁為了方便收錄,常常會利用rewrite技術,把動態網頁的URL偽裝成靜態網頁URL,這就是偽靜態。
- 我們訪問的是一個靜態網站時候
客戶端會通過http協議,下載服務器上的html文件,然后去讀這個html文件,根據html頁面中的鏈接,自上而下的請求,每一個請求是一個鏈接,如果是圖片的話,會下載邊渲染,遇到js,就會加載js,當js比較內容較復雜時,瀏覽器就會等待,鼠標在轉圈,我們稱這個為js阻塞,當js下載完畢並執行完成之后,才會顯示我們看到的網頁
- 我們訪問的是一個動態網頁時
首先用戶發出一個請求,服務器收到這個請求之后,這里假設服務器使用的是nginx,nginx會把這個請求轉給php,php就會去查詢數據庫,根據數據庫返回的值,生成一個完整的網頁內容,發送給用戶,用戶收到之后,也是邊下載邊渲染,加載js,執行完畢之后,才會顯示我們看到的網頁
- 當服務器的訪問量達到億級PV時
這個訪問的過程就更復雜了,用戶的請求會先訪問全國的CDN節點,通過CDN擋住全國80%的請求,當CDN上沒有時,在訪問服務器集群,這個集群一般都有一個4層的代理,這個4層的代理,使用軟件來完成的話,就是LVS,使用硬件就是F5,4層的代理,后面才是7層的負載均衡,常用的是haproxy,nginx,然后才是多台web服務器,web服務器比較多的時候,就有兩個問題,一個是用戶數據的一致性,不能因為不同的web服務器提供服務,而導致數據不同步,這時候,我們就需要使用NFS共享存儲,第二個問題是session,不能因為不同的web服務器提供服務,session找不到了,這時候,我們就需要使用memcached來存放並共享session。由於用戶訪問量太大,這時候的瓶頸就是數據庫的壓力,我們一般都是使用分布式緩存memcache,redis等,另外數據庫還需要做讀寫分離等優化,后面的過程與訪問動態網頁類似
五,http協議原理(www服務的請求過程)響應報文細節
- 起始行
http版本號,數字狀態碼,狀態情況
- 響應頭部
主要包括,服務器的web軟件版本,服務器時間,長連接還是短連接,設置字符集等等
- 空行
這里的空行和請求報文空行一樣
- 響應報文主體
在報文主體中包裝載了要返回給客戶端的數據
六,tcp/ip四次揮手原理
- 首先客戶端會發送一個帶有FIN標識和一個seq隨機數,
- 服務端收到之后,會回應一個ack,ack的值等於剛才的seq的值+1,
- 發送之后,服務器會再發一個包,這個包里面也帶有FIN標識和一個seq隨機數,
- 客戶端收到之后,回應一個ack,ack的值等於剛才的seq值+1,