從我在地址欄輸入www.zhihu.com 按下 Enter鍵開始 到瀏覽器顯示出知乎首頁結束 這個過程中間都發生了什麼?
上面是電腦版的,那手機呢?
PC端過程如下:
首先定義下本機 IP:10.1.1.1 MAC地址:A 。DNS SERVER IP:10.1.1.2 MAC地址: B 。知乎伺服器 IP:10.1.1.3 MAC地址:C 。 再聲明下 你的PC知道本機IP MAC地址和DNS SERVER的IP,不知道DNS SERVER的MAC地址,不知道知乎伺服器的IP和MAC地址。
第一步:
A:應用層即瀏覽器封裝數據:http頭部 | DATA ,DATA中包括"http://www.zhihu.com",交給傳輸層。
B:傳輸層對數據判斷是http,即使用TCP協議對數據進行封裝,目標埠:80。 數據:TCP源埠(隨機)和目標埠(80) | http頭部 | DATA,交給網路層。
C:網路層對數據進行封裝需要源IP:10.1.1.1 而目標IP(知乎伺服器)未知,網路層封裝失敗,暫時中斷。此時就需向DNS請求目標IP。
第二步:向DNS請求目標IP
A:傳輸層使用UDP協議對數據封裝。數據:源埠(隨機)和目標埠(53) | DNS | DATA。封裝完畢,交給網路層。
B:網路層:有源IP:10.1.1.1 目標IP(DNS):10.1.1.2可以封裝。數據:源IP和目標IP | UDP源埠和目標埠 | DNS | DATA 封裝完畢,交給數據鏈路層。
C:數據鏈路層對數據封裝需要源MAC地址:A,目標MAC地址(DNS):未知。數據封裝失敗,暫時中斷。此時會發送ARP請求來獲取DNS的MAC地址。
第三步:發送ARP請求。
源MAC地址:A,目標MAC地址:FFFFFF | ARP發送者IP:10.1.1.1目標IP:10.1.1.2。DNS收到ARP請求,發現是自己的IP,便把自己的MAC地址返回給你的PC(DNS從ARP請求中獲取PC的IP和MAC地址)。
即將結束:PC有了DNS的MAC地址,那麼第二步就可以完成,數據成功發送給DNS,DNS把「www.zhihu.com」對應的IP返回給PC,那麼第一步封裝可以完畢,數據成功發出,再過TCP三次握手與知乎伺服器建立連接,知乎把自己的主頁返回給你的PC機,你的屏幕上就有了華麗麗的知乎主頁。。
本人見識短淺,若有任何錯誤,請知有及時指出,謝謝。。
樓上偏重於chrome,我說說伺服器乾的事吧,伺服器接受的你的URL請求後,返回給你html,這個結果其實是伺服器精心為你準備的,伺服器查詢資料庫,給爺最新最火的前XXX個問題,然後各種select *飛起。伺服器又是找CSS,又是運行腳本,經過一系列處理,生成了最終的html源文件,也就是在瀏覽器里可以查看的源文件,經過瀏覽器一翻譯,成了有聲有色的網頁了。
有個github的repo是解釋這個問題的,可參考
alex/what-happens-when · GitHub
1.題主的電腦開機,撥號或者路由器通電撥號。運營商分配路由器一個公網IP地址100.101.102.103。路由器把地址解析伺服器(DNS)的IP地址告訴樓主題主的電腦。(題主電腦開機自動獲取內網IP192.168.0.101和DNS)
2.題主打開瀏覽器,輸入http://zhihu.com按回車。
3.瀏覽器叫系統問通過路由器問DNS伺服器:「http://www.zhihu.com的IP地址是多少?」
4.DNS伺服器告訴題主的電腦:知乎IP是200.201.202.203(這裡省略若干步)
5.瀏覽器通過系統告訴路由器:我198.168.0.101要和200.201.202.203建立TCP連接!
6.路由器告訴電信機房伺服器:我100.101.102.103要和200.201.202.203建立TCP連接!
7.電信機房伺服器一查,原來是200.201.202.203是網通機房的伺服器,於是告訴網通伺服器:100.101.102.103想和200.201.202.203建立TCP連接。
8.網通機房發現200.201.202.203在上海,又告訴上海網通機房:100.101.102.103想和200.201.202.203建立TCP連接
9.上海網通機房收到之後,發現知乎伺服器在睡大覺,叫醒知乎伺服器說:100.101.102.103想和你建立TCP連接。
10.知乎伺服器收到之後,和上海網通機房說:告訴100.101.102.103,好呀好呀,同意建立TCP連接。
11.上海網通對題主家網通伺服器說:好呀好呀。網通對電信說:好呀好呀。電信對題主家路由器說:好呀好呀。題主家路由器對題主的瀏覽器說:好呀好呀。
12.題主家瀏覽器對題主家路由器說:get index 200.201.202.203%#$%*!*!$%*%$?。意思是:「把你家的小黃文給老子拿過來。」
13.題主家路由器又告訴電信伺服器,電信伺服器又告訴網通伺服器,網通伺服器又告訴知乎伺服器:100.101.102.103的傢伙要看小黃文
14.知乎伺服器告訴網通伺服器告訴電信伺服器告訴路由器告訴題主的電腦:404error,你的網頁無法訪問
題主說:我褲子都脫了你給我看這個?
記得上學期的計算機網路課本里有答案,8 steps
(需要回校翻書然後補上么⊙﹏⊙)
試著從api說說
首先,知道www.zhihu.com.然後getaddrinfo.查詢你網路環境的dns rr,a或者aaaa記錄應該要看你的主機是否支持ipv6以及知乎的伺服器程序是哪種套接字。http的服務埠可能是80。知道知乎的ip和埠之後就可以給他發數據要求服務了。socket,connect,然後write一個http。get請求。讓他把主頁這個html發過來。我們收到這個html直接顯示。
題主問的是阿里巴巴的面試題吧?
推薦閱讀:
※現場匯流排技術到底是個什麼?哪位能幫忙科普一下現場匯流排,特別是CAN和MVB。
※如何看待未名BBS上對華科的嘲諷?
※太平洋島國如何接入國際互聯網?
※通信工程就業需要擁有什麼能力和掌握什麼技術
※海底光纜如何中繼信號?最大距離是多少?設備型號有哪些?