1. 程式人生 > >輸入域名到顯示網頁的網路過程

輸入域名到顯示網頁的網路過程

        最近複習完了計算機網路,突然想到了這個話題,百度了一下也有許多人講解過,好像始源於是一個面試問題。然後我也結合了一下其他人的部落格和自己對計算機網路的理解,梳理了一下思路。整個流程會從應用層,傳輸層,網路層和資料鏈路層進行分析,但不講得太細,都只是稍微提一下各個部分的重點。

應用層:

   首先瀏覽器是在應用層上的WEB服務。WEB服務的實現主要包含了HTTP超文字傳輸協議URL統一資源定位符,HTML超文字標記語言,以及瀏覽器和伺服器。在WEB服務中瀏覽器相當於C/S模式中的client客戶端,伺服器相當於server服務端,是一對多的關係。 在你敲擊域名之後,瀏覽器首先會檢視自己有沒有關於這個域名的快取。如果沒有,則檢視本地計算機的快取,如果還沒有,則會呼叫DNS服務進行域名解析。 

1. 瀏覽器快取 

2. 本地快取 

3. 呼叫DNS服務

   呼叫DNS服務後,會發送一個DNS解析請求的報文,該報文是基於傳輸層的UDP協議。在進行IP分組封裝後分組會被直接傳到預設路由器(預設閘道器),如果路由器快取有該域名IP,則直
接轉發回瀏覽器。如果沒有,則需要傳送到DNS伺服器上進行解析。如果你的DNS伺服器在外網,而你在ip地址是區域網如172.31.1.1,這時就會呼叫NAT服務。NAT服務會從IP池中臨時分配給你一個外網的唯一IP地址,用你訪問外部網路。(DNS伺服器地址可以從本地連線中檢視)。DNS伺服器接收到解析請求後會進行查詢,查詢到則返回結果,否則會進行一個迭代或者遞迴查詢,最後將域名對應的IP地址進行返回。 

1. 路由器快取 

2. NAT服務提供外網IP 

3. DNS伺服器查詢返回結果:遞迴或者迭代查詢 

       上述完成的是一個域名解析的過程,即只是完成了讓瀏覽器獲得你所輸入的域名的IP地址。然後上述的過程沒有對傳輸層進行講述,我將在下面的過程對傳輸層和網路層進行一定的闡述。 

傳輸層:

        得到IP地址後,瀏覽器會向IP對應的伺服器傳送一個GET的HTTP請求報文。在傳輸層上,HTTP協議是基於TCP協議傳輸的。所以TCP對HTTP請求報文進行封裝成TCP報文,然會對伺服器請求連線,在完成3次握手後,TCP連線建立成功。即瀏覽器和伺服器之間可以開始傳輸資料了。由於是GET請求,所以伺服器會返回一個HTML主頁給瀏覽器。伺服器端首先將包含了HTML文字的HTTP應答填入TCP滑動視窗快取,然後根據TCP的流量控制和擁塞控制對快取中的內容進行傳輸到客戶端。瀏覽器成功接受到html文字後根據html標準進行解析,最終展示成一個主頁的形式給使用者檢視。如果使用者此時關閉了頁面,TCP則會進行四次揮手斷開瀏覽器與伺服器端的連線。 

1. HTTP請求報文 

2. TCP3次握手連線 

3. 根據TCP流量控制和擁塞控制傳輸主頁文字 

4. 瀏覽器解析主頁文字 

5. TCP4次握手斷開連線 

        上述已經把整個過程都講完了,然後下面我在稍微提一下網路層。網路拓撲路徑:客戶端-路由器-路由器-路由器-服務端。傳輸層針對的是端到端之間的傳輸服務,而網路層針對的是點到點的傳輸。 

網路層:

        TCP報文往下到網路層時,IP協議會對該報文進行處理。如果報文內容過大,則會對其進行分段,裁減成多分IP報文進行傳輸。在點與點之間傳輸時,主要處理的是路由轉發演算法。因為端與端之間存在著多個路由,所以要研究如何傳輸才能使得總體較優。路由轉發演算法包括:標準路由轉發,向量路由轉發,最短距離路由轉發等。 
1. 分組分段 

2. 路由轉發 

在資料鏈路層所討論的則是Bit級別的資料問題。不做深究。 

以上就是大致的一個過程,涵蓋了應用層,傳輸層和網路層。裡面有很多細節都是值得討論的。像是3次握手,擁塞控制,路由轉發演算法等。

一個其他人的超詳細分析