當你在搜尋框按下enter的一剎那發生了什麼?

2021-10-11 10:33:29 字數 2732 閱讀 4750

現在,讓我們開始向網路通訊的世界邁出第一步。

類似 這樣的**被稱為url(統一資源定位符)。其中http是協議名稱,www是網路服務標識,baidu.com是網域名稱。

要找資源必然要先找有該資源的地方,網域名稱就是這個地方的代號,這個地方被人們稱為伺服器(一種專門用於響應服務請求,並處理的計算機)。區分計算機的邏輯位址被稱為ip,一串由四位0-255組成的數字。

想要找到一台聯網的計算機,只需要知道它的ip位址即可。那網域名稱與ip位址又是什麼關係?這就如同機器語言與高階語言的區別,一種給計算機看,一種給人看。所以如同高階語言要執行需要編譯一般,網域名稱也要通過某個過程轉變為ip位址,這個過程叫網域名稱解析。網域名稱解析依靠dns伺服器來完成,這個伺服器如同**本記錄著每個網域名稱對應的ip位址。

既然我們想要傳送資料需要知道ip位址,那麼我們又如何得知dns伺服器的ip位址呢?在windows電腦可以通過控制面板查詢網路資訊,其中顯示的資訊如下圖

圖1.windows電腦上的網路資訊

所以,我們要想得到www.baidu.com的頁面必須先將baidu.com傳送給dns伺服器,再從dns伺服器上獲得對應的網域名稱。那麼資料又是怎樣從一台計算機傳送到另一台計算機的呢?

這時,tcp/ip協議族就開始發揮作用。依照抽象的不同,人們把該協議分為四層,由上至下分別為:

http協議處在應用層,該層專門向使用者提**用服務時通訊的活動。廣為人知的tcp和udp位於傳輸層,該層提供處於網路連線中的兩台計算機之間的資料傳輸。網路層存在ip協議,決定了在網路上流動資料報的運輸路線。鏈路層是處理網路連線的硬體裝置。

http協議接受到瀏覽器需要www.baidu.com頁面的請求後,將該請求按照固定的格式轉成乙個資料報,再傳送給傳輸層,傳輸層給資料新增一定標識表明傳輸的方式,新增源埠和目標埠(埠猶如郵箱,資料需要經過埠才能被接收)。接著走到了網路層,ip協議給資料報首尾新增源ip和目標ip後傳給了鏈路層。鏈路層新增源mac位址和目標mac位址。這一層層的傳送前的準備被人們稱為封裝。

你可能疑惑既然已經有了ip位址為什麼還要mac位址?你可以把ip位址想象成乙個人的住址,mac位址想象成乙個人的身份證號,ip位址是邏輯位址,能夠改變,mac位址是網絡卡上的序列號,難改變。

如果資料到了目標伺服器,目標伺服器從鏈路層開始一層層拆包,如果發現不是傳送給自己的資料立馬丟棄。

簡化的流程可以見下圖

圖2封裝與拆包過程

現在,我們已經知道資料是以什麼樣的方式從計算機傳送的,可是要想抵達另一台計算機,我們需要某些裝置將這兩台計算機連線起來。這樣的連線裝置主要有四種:網線、集線器、交換機、路由器。

為簡單起見,我們只需要知道網線和路由器是如何工作的即可。網線傳輸的是資料訊號而非電流,所以一根網線最多只能使兩台計算機通訊。為了解決這個問題,先後出現了集線器、交換機、路由器。路由器是能夠**資料使兩個或兩個以上的網路能夠通訊的裝置。圖1**現的預設閘道器即路由器。

當一台計算機傳送資料時,如果目標計算機的ip位址與之不處於同乙個網段,它將把資料傳送給預設閘道器,此時資料報上的目標mac位址是預設閘道器的網絡卡序列。預設閘道器再將資料進行**,傳送時會將mac位址改變為下一台計算機的mac位址。在這**過程中,目標ip始終沒有變化。

我們知道資料的收發不可能憑空進行,這一層層的**又是依賴什麼裝置?因為**基礎設施已經把世界連線起來,我們需要一種裝置能夠把網路資訊變成**設施可以處理的資訊,這個裝置叫做數據機。

當然,**資料並非是你搭建了乙個路由器就可以開始的,這裡還需要乙個能夠管理路由器的網路設施,即 網際網路服務提供商(isp)。

通過上述知識,我們可以得知一台計算機傳送資料給不在同一網段的計算機,它需要將資料傳送給預設閘道器,再經由數據機將網路資訊轉換為模擬訊號傳輸給isp,isp將這些訊號傳輸給相應的路由器進行下一步收發。其中ip協議決定了資料傳輸路徑即從一台路由器怎麼知道傳輸的下一台路由器。

終於網路傳輸的曙光就在眼前,我們的資料傳送給了dns伺服器,可是又乙個問題出現了——我們怎麼知道資料已經成功傳送了。放心,此時傳輸層的tcp協議展現了它的威力。tcp協議利用傳送應答、超時重傳、錯誤校驗、流量控制實現了傳輸的可靠性。

你必須要知道的一點是tcp的三次握手,這保證了收發雙方都能夠接收到資料。如果一台計算機與另一台計算機想要通訊,它不會立馬傳送資料,而是先傳送乙個標記為syn的資料,目標計算機對該資料進行處理後標記為ack,與其產生的syn資料一起傳送回去。源計算機檢查ack的值是否符合預期,如果符合預期,對傳送來的syn資料進行處理標記為ack後再傳送給目標計算機。目標計算機檢查ack的值是否符合預期,如果符合預期就可以進入下一步資料收發環節。

那想要與目標計算機斷開通訊呢?此時需要tcp的四次揮手,因為這篇文章關注的是開始通訊的過程,對此不多加贅述。

現在,想必你的困惑已經得到了解答。

當你按下enter時,瀏覽器將請求發給http協議,再一層層傳送封裝,到鏈路層通過網線亦或數據機將資料傳送給路由器,路由器再經ip協議確定傳輸路線,將資料**給isp,isp控制的路由器再層層**終於到了dns伺服器。此時tcp三次握手,確定收發雙方都已經做好收發資料的準備,dns伺服器再將baidu.com的對應ip和埠傳送回來。於是再經過上述過程,baidu伺服器返回請求的資源,終於baidu的頁面呈現了出來。

注意,這篇文章只講述了http協議下的通訊,https通訊過程與之存在差異。

如果想要了解https與http之間的區別可以參見《https 詳解》。

對話方塊按enter會關閉的解決辦法

對話方塊在現實的時候,如果按下enter會關閉,是因為enter預設傳送了oncancel 訊息給視窗,所以會執行cdialog oncancel,關閉對話方塊,這裡有兩種辦法解決 1 在pretranslatemsg 裡面把enter按鍵截獲,這種不是正常的訊息流程。所以最好用第二種辦法。2 就是...

移動搜尋的未來一定不是搜尋框

我對公關大戰並不感興趣,只是想藉此談一下移動搜尋。pc時代的搜尋習慣並不能移植到移動端 谷歌在移動時代怎麼應對的 那麼難道以搜尋為核心的商業模式在移動時代就沒有應對之策嗎?從谷歌的現狀來說,事實並非如此。一谷歌擁有前瞻的目光 正確收購策略 谷歌作為全球搜尋巨頭,在移動時代其最大的入口當然是安卓系統。...

乙個簡單的ExtJS搜尋建議框

封裝的是乙個ext4.2的元件,繼承並相容於ext的combobox.實現原理非常easy,在 combo 中監聽 keyup 事件就可以.搜尋建議的combo.基本上全然相容,使用方式與combo下拉框一樣.須要後台程式依據keyword進行搜尋建議.源 例如以下 搜尋建議框,使用時請適當改動包名...