輸入url地址按下回車發生了什麽?
1.輸入url地址後,首先進行DNS解析,將相應的域名解析為IP地址;
2.客戶端根據IP地址去尋找相應的服務器;
3.與服務器進行TCP的三次握手;
所謂三次握手就是客戶端在請求與服務器相連接時,彼此共計發送了三次數據包,就好比以下的對話:
首先,需要明確的是,三次握手是客戶端先發起請求。
(第一次)客戶端:hi,服務器,在嗎?我想和你建立連接,你能收到我的消息嗎?(此時客戶端給服務端發送了一個數據包和發送序號,即SYN=1,Seq=X)
(第二次)服務器:hi,客戶端,我在呢,我收到你的消息了,我們可以建立連接,你能收到我答復的消息嗎?(此時服務端發送syn+ack報文,並置發送序號為Y,再確認序號為X+1)
(第三次)客戶端:我收到你的答復了,很開心能和你建立連接。(此時客戶端發送ack報文,並置發送序號為Z,再確認序號為Y+1)
以上就是tcp三次握手的簡化版。
4.客戶端找到相應的資源庫;
5.根據資源庫返回頁面信息;
6.瀏覽器根據自身的執行機制解析頁面;(瀏覽器的執行機制?重繪?重排?......)
瀏覽器解析頁面時,會找到每一個文件夾(css、js、html、img......),每一個文件夾下的資源會重新走到第二步,去找到相應的服務器,然後一步步執行。
7.最後服務器將解析信息返回給客戶端,進行TCP的四次揮手。
所謂四次揮手就是客戶端與服務端在斷開連接時,彼此交互傳輸了四次數據包,就好比以下對話:
首先,需要明確的是,四次揮手不知道哪一方是主動方,哪一方是被動方。
男朋友(可能是客戶端,可能是服務器):xxx,我們分手吧?我不想和你聯系了。(此時主動方發送fin+ack報文,並置發送序號為X)
女朋友:好的,我收到你分手的消息了,我同意分手。(此時被動方發送ack報文,並置發送序號為Z,再確認序號問X+1)
(此時,女朋友正不爽呢,憑什麽分手呀,我也不管你能不能收到,我也要提出分手...)
女朋友:xxx,我們分手吧,我也不想和你聯系了。(此時被動方發送fin+ack報文,並置發送序號問Y,再確認序號為X)
男朋友:好的,我收到你同意並提出分手的消息了,再見!(此時主動方發送ack報文,並置發送序號為X,再確認序號為Y)
8.至此,客戶端顯示自己請求,即服務端返回的東西
輸入url地址按下回車發生了什麽?