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