假設你用一個全新的瀏覽器(第一次啟動的那種),訪問百度(http://www.baidu.com/),在你敲入網址並按下回車之后,將會發生以下神奇的事情:
(1)瀏覽器先嘗試從Host文件中獲取 http://www.baidu.com/對應的IP地址,如果能取到,自然好,如果不能,就使用DNS協議來獲取IP。在DNS協議中,PC會向你的本地DNS服務器求助(一般是路由器),希望從本地DNS服務器那里得到百度的IP,得到就好,得不到還得向更高層次的DNS服務器求助,最終總能得到百度的IP。
(2)得到百度的IP,下一步是使用TCP協議,建立TCP連接。
在TCP協議中,建立TCP需要與百度服務器握手三次,你先告訴服務器你要給服務器發東西(SYN),服務器應答你並告訴你它也要給你發東西(SYN、ACK),然后你應答服務器(ACK),總共來回了3次,稱為3次握手。
不過,建立TCP連接有個前提(或者說給服務器發消息有個前提):你必須能成功地把消息發到服務器上。雖然已經知道IP,但並無啥用(比如說,你在廣東,你知道北京的地理坐標經緯度就能到北京了?你得知道有哪些路通往北京吧你得准備盤纏吧你得花時間吧)。
(3)為了將消息從你的PC上傳到服務器上,需要用到IP協議、ARP協議和OSPF協議。我們都知道,你的PC和百度服務器之間一般會有許多路由器之類的東西,IP協議指定了出發地(你的PC)和目的地(服務器);你的數據會經過一個又一個路由器,OSPF決定了會經過那些路由器(用一種叫路由算法的玩意,找出最佳路徑);從一個路由器怎么傳給下一個路由器?這是ARP協議的JOB,ARP負責求下一個節點的地址(我們不止是要目的地,還要中間節點的地址)。
IP協議使用的是IP地址,整個發送過程中只涉及出發地和目的地2個IP地址,而ARP協議使用的是MAC地址,整個發送過程中涉及到每一個節點的MAP地址
(4)現在,我們能和服務器通信,還建立了TCP連接,下一步干嘛,當然是用HTTP協議請求網頁內容。
你發個HTTP請求報文給服務器,如果服務器禁止你訪問它就給你回個"Forbidden",如果它暫時掛掉了就給你回個“內部服務錯誤”,如果它正常才給你回個“OK“並將你要的數據傳給你;如果你還需要其它的東西再去跟它要(它一般還會給你的-_-)。
(5)你收到了服務器的回復,是一坨HTML形式的文本。瀏覽器必須要能夠理解文本的內容,並快速地渲染到屏幕上(瀏覽器一般用有限自動機來理解文本內容,渲染的話就各看本事了,之所以微軟IE卡成狗而谷歌瀏覽器很6,就是它們的渲染速度不同...)
渲染出來后,你就看到百度的首頁了