WEB网站访问的过程
用戶訪問網站的基本流程(6個階段):
DNS解析? ?tcp三次握手? http請求報文? 網站集群內部處理數據的一個過程? ?http響應報文? tcp四次揮手斷開的過程
?DNS解析過程
?1)DNS解析2種查詢方式:遞歸查詢->迭代查詢(見下圖DNS部分)
? ? ?所謂 遞歸查詢過程 就是 “查詢的遞交者” 更替, 而 迭代查詢過程 則是 “查詢的遞交者”不變
? ? ? ?當用戶在瀏覽器地址欄敲入域名地址回車后客戶端首先檢查本地DNS緩存和hosts文件,如果是第一次訪問的話,本地DNS緩存是沒有緩存記錄的,而hosts文件是用來做測試使用的也是沒有結果的,此時客戶端會請求local DNS,local DNS是客戶端在本地網卡中配置的DNS服務器,local DNS首先會檢測DNS緩存,DNS緩存中如果有結果,會將結果返回給客戶端,如果沒有結果local DNS會負責域名解析,local DNS首先訪問請求全球13臺根服務器(據說美國有8臺,日本2臺,中國沒有)根服務器會根據local DNS請求域名地址,將此域名地址的頂級域名服務器返回給local DNS,local DNS在繼續訪問頂級域名服務器,頂級域名服務器根據local DNS請求的地址將此地址的二級域名服務器返回給local DNS,local DNS又訪問二級域名服務器,二級域名服務器我們又叫做授權DNS服務器,授權服務器檢查自己的A記錄將結果返回給local DNS,local DNS進行本地緩存并發給客戶端。
三次握手原理
2) 客戶端接到結果后與服務端建立TCP三次握手連接
? ? ? ?首先客戶端發送syn seq序列給服務端,客戶端從close的狀態進入syn send狀態,服務端接收到syn請求的時候,?從closed狀態進入listen,服務端同時發送ack和syn請求,此時服務端從listen狀態進入到syn received,客戶端接收到ack確認和syn請求后進行返回ack確認,此時客戶端進入establised狀態,?服務端接收到ack確認也進入establised狀態。
《TCP連接11種狀態詳解》
LISTEN: 偵聽來自遠方的TCP端口的連接請求
SYN-SENT: 再發送連接請求后等待匹配的連接請求
SYN-RECEIVED:再收到和發送一個連接請求后等待對方對連接請求的確認
ESTABLISHED: 代表一個打開的連接
FIN-WAIT-1: 等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN-WAIT-2: 從遠程TCP等待連接中斷請求
CLOSE-WAIT: 等待從本地用戶發來的連接中斷請求
CLOSING: 等待遠程TCP對連接中斷的確認
LAST-ACK: 等待原來的發向遠程TCP的連接中斷請求的確認
TIME-WAIT: 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
CLOSED: 沒有任何連接狀態
HTTP請求解釋
3)客戶端發送http請求報文,http請求又分為四部分
第一部分:請求行
請求行又分為三塊,第一塊是請求方法,第二塊是請求URL,第三塊是請求的http協議版本,我們常用的方法有GET head POST等,get就是用來客戶端向服務端獲取資料的時候就是使用get方式,post是用來客戶端向服務端注冊一些信息等使用的是post方式,而我們使用curl -I 是使用服務端的響應頭部信息head。
第二部分:請求頭部信息,包含媒體類型、語言類型、壓縮方式、客戶端類型主機名等
媒體類型包含image/gif、jpeg圖片類型,音頻類型,這些類型起初是為了解決郵件系統的傳輸搬移數據,現在廣泛應用于http協議當中
第三部分是空行
空行表示請求頭部與請求主體的分隔行。
第四部分:請求主體
常用的get方式是沒有請求主體的,post方式才有請求主體,這個請求發送到服務端。
負載均衡
4)負載均衡 首先接受請求
負載均衡器:有軟硬件2種
1)企業常用的有硬件F5;
2)軟件應用層的nginx、haproxy 傳輸層的lvs等;
? ?然后負載均衡器會根據自己特殊的算法輪詢啊,最小連接數將這些請求一一發送給web服務器,
到了web服務器,這些請求又分為動態請求和靜態請求,靜態請求一般就是靜態頁面一般是用html css xml等語言編寫的網頁,靜態網頁的特點性能高速度快,
在客戶端的瀏覽器解析,不需要數據庫的支持,容易被搜索引擎收錄,缺點用戶交互性比較差,不易于維護,常用的處理靜態頁面的軟件有apache nginx等
國內最為主流的就是nginx,動態網頁一般是與aspx php jsp等結尾的,動態網頁的url中,會有一些特殊字符,像= &符號等,動態網頁的特點,
與用戶的交互性比較強,容易維護,但是在服務端進行解析,并不容易被搜索引擎收錄,因此性能會比較差,
常用處理動態頁面的軟件有php引擎,tomcat resin等,php配合apache nginx使用,解析php編程語言開發的程序,配合apache是以php模塊的方式來進行對接,跟nginx是fastCGI守護進程來進行解析,還有一些tomcat resin這些是
解析java語言開發的程序,這些狀態程序會請求一些結構化的數據,結構化的數據我們會存放在后端的數據庫中,目前互聯網最主流的關系型數據庫就是mysql,
類似于二維表,但是性能會比較低,因此有些企業會使用memcached redis非關系型數據庫進行做mysql的緩存數據庫來提高訪問速度,
還有一些非結構化的數據,像圖片、視頻、音頻等這些數據我們會存放在存儲服務器上,常用的存儲服務器有nfs、mfs、glusterfs等,
這些非結構化的數據屬于靜態數據,很多公司會選擇把這些靜態數據推送到CDN節點上來提高用戶的體驗。
5) http響應報文又分為四部分
第一部分 響應起始行
起始行分為三塊
第一塊是http協議版本
第二塊是狀態碼
第三塊是狀態碼描述,一般我們常見的狀態碼像200正常,301永久跳轉,302是臨時跳轉
第二部分:響應頭部信息
一般是在內容服務器的一些參數,比如說處理請求的是哪個軟件
第三部分:響應空行
表示響應頭部與主體的分隔行。
第四部分:響應主體
響應主體信息就是客戶端真正在瀏覽器中的數據會在響應主體中返回給客戶端。
此時客戶端返回完之后:在常鏈接超時后
四次揮手原理
6) 客戶端會進行tcp斷開鏈接
首先客戶端會發送FIN請求給服務端,此時客戶端從established狀態進入到FINWAIT-1狀態,服務端接收到請求后從established狀態進入closewait狀態
服務端在進行ack確認,先返回給客戶端,客戶端進入finwait2狀態,此時已經進入了一個半鏈接狀態,所謂的半鏈接狀態就是客戶端向服務端發送數據完畢了,
但是服務端向客戶端發送的數據還沒有發送過來,當服務端向客戶端發送完數據之后,繼續發送fin請求,此時客戶端接到fin請求進行返回ack確認,
此時客戶端進入timewait狀態,客戶端接到ack,ack接著發送給服務端,此時服務端進入closed狀態,斷開鏈接。此時客戶端會
等待2倍的MSL值。(2倍的MSL值就是linux的生存周期,2MSL值就是一般默認是30秒)就是1分鐘后客戶端會進入closed狀態,就是從timewait狀態自動進入closed狀態。
"查看上面TCP11種狀態中,包含三次握手和四次斷開"
網站訪問流程故事版
我們的主角小王,是個活雷鋒,哪里需要哪里搬,今天他又來了。
小王打開了自己的百度瀏覽器,輸入www.baidu.com,按下回車,等了一會,就打開了網頁,小王很困惑,在敲下回車的一瞬間,電腦到底做了什么?
為了一探究竟,小王打開百寶箱,并念出了那句開啟百寶箱的咒語(我是韓以安,關注我,有更多精彩內容哦)。百寶箱閃出一個耀眼光芒,小王眼前一黑,過了好一會兒小王醒才過來,醒過來后發現自己被困在了電腦里,一個美女正在電腦前跟閨蜜聊著天。突然美女像是想起了什么,她飛快的打開瀏覽器,輸入了www.taobao.com
小王的身體突然就不聽使喚,直奔電腦的host文件飛去, 小王這才明白,百寶箱把自己變成了一個用戶請求,根據請求的處理流程,小王飛快的看了一眼host,發現文件中已經有www.taobao.com對應的ip地址,于是獲取到ip,直接扔給了美女,美女很開心的購起物來。
小王正要好好欣賞一下眼前的美人,QQ上一個消息彈出,是一個不常見的網址,www.wsmv.com 美女想也沒想,直接打開, 小王立即趕往host查看網址對應的ip,結果發現host里沒有對應的ip。小王心想,這應該是美女第一次打開這個網站,所以電腦里沒有緩存。
既然在host里沒有找到,小王趕緊詢問了下周邊忙碌的其他請求,接下來該怎么辦,一個看上去很老成的nginx請求路過,指了指旁邊的路由器(在你的城市的某個角落,但是不會太遠)說,“諾,那個是本地域名服務器,你去向他尋求幫助吧”
小王飛奔過去,向本地DNS服務器詢問是否有剛剛美女輸入的網址的ip, 本地DNS快速掃描了下,發現沒有,但給出了提示,可以去根服務器去問問。
小王來到根服務器,小王問,有沒有www.wsmv.com對應的ip, 根域緩緩的答道,“我這邊沒有,但是我有.com.的服務器地址,你可以去問問他”,說著根域服務器甩出了 一條信息,上面寫在.com服務器的ip地址。
小王又馬不停蹄的根據ip找到對應的.com服務器,詢問是否有美女輸入的網站ip的地址, .com服務器頭也沒抬的回了一句:“又是根域讓你來的吧,我這邊有wsnv.com對應的ip地址,你可以直接去,但是我們這有個不成文的規定,不是所有人都可以隨便訪問服務器的,IP給你,接下來能不能請求到資源還得靠你自己”
小王拿到了 wsnv.com的ip地址正要進去獲取數據,卻被一個叫TCP協議擋住了去路。小王知道這是要進行TCP連接了, 需要與服務器進行三次對話,跟對暗號一樣,通過后才能獲取數據。
但是要進行TCP連接,小王得先把消息成功的發送到服務器上,小王根據書中講的準備了IP協議,ARP協議和OSPF協議, IP地址只指定了美女的PC的ip和剛從.com獲得的要登陸網站的ip地址, 然后經過一個個路由器傳送給服務器,然后進行了tcp的鏈接。
連接成功了,小王興奮的跳了起來,能給美女獲取到數據是小王最開心的事情。 but,小王聽到一個聲音 “恭喜你,成功跟tcp進行了鏈接,現在你可以尋求HTTP協議的幫助來請求網頁了,請先熟悉HTTP協議的請求規則”
小王趕緊查看HTTP請求規則,規則里有條重要提示: 雖然你通過了tcp協議,但是還是有被服務器拒絕的可能,如果服務器拒絕了你的請求會返回"Forbiden",如果服務器沒有拒絕,能夠正常訪問,就返回200OK,然后才會給你傳輸數據。
小王連忙根據規則發送HTTP請求報文給服務器,經過了硬件防火墻,到了負載均衡,又通過負載均衡到了web,后面又有緩存,最后才到數據庫。成功了,小王收到了服務器的回復,接收到一堆HTML形式的文本。然后快速返回到美女的電腦,當然也沒忘了在本地緩存上存一份,畢竟下次再按這個流程走一遍,小王會累死的。
在本地緩存好之后,小王把接收的文本給了瀏覽器,瀏覽器是個聰明的家伙,很快就翻譯出來,并渲染到屏幕上,看到屏幕前美女開心的笑容,小王感覺好滿足,順便瞅了一眼瀏覽器,不看不要緊,一看嚇一跳,瀏覽器上是美女男朋友發來的禮物,滿屏的煙花和一句我愛你。
小王的心突然疼了一下,原來有男朋友啊,那我這還忙活的這么起勁,算了,百寶箱帶我回去吧。
隨著一陣耀眼的光芒,小王最后看了一眼美女,戀戀不舍的離開了。
小王回來后,快速整理了今天的見聞,愛學習的小王在筆記本上寫到:美女(此處劃掉)
小王又重新寫到: 用戶發起一個請求到最終落地數據,中間經歷了:
用戶(電腦,網絡,本地緩存)–域名服務器–tcp三次握手 --HTTP協議
進入了HTTP協議之后,小王回憶了下,先是看到了硬件防火墻F5,然后是請求發給了負載均衡nginx, nginx轉發給了其中的tomcat,tomcat有相應的配置文件,根據配置文件搜索相應的資源-好像在獲取資源的時候還遇到了緩存redis,然后才是訪問數據庫,這一圈下來好麻煩。
總結
以上是生活随笔為你收集整理的WEB网站访问的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作汇报ppt案例_职场PPT实战:秒杀
- 下一篇: error Expected line