2010-01-07 25 views
2

www.stackoverflow.com的HTTP應用程序請求。 此消息傳遞到傳輸層。傳輸層添加其頭並將數據包發送到Internet層。 Internet層無法訪問www.stackoverflow.com,因爲它只能訪問由傳輸層附加的標頭。那麼互聯網層如何決定這個請求數據包的路由。網絡層如何找到數據包的路由

IP標頭中的目標地址字段是如何填充的,因爲只有應用程序層和傳輸層知道該字段。 (應用層與頭部的互聯網層和傳輸層提及端口號沒有交互。)

回答

2

應用層已經通過DNS從URL中檢索到主機的IP地址。來自應用層的IP地址以及其他數據被髮送到傳輸層,該層將數據分組化,然後將其發送到因特網層,然後發送。

+0

但Internet層無法看到數據包的數據部分。它只能看到傳輸層附加的頭部。而在傳輸層報頭中,沒有提到目標IP地址的字段。 – Mohit 2010-01-07 06:15:02

+0

這是因爲IP地址在TCP下面的IP頭中...查看我的答案。 – 2010-01-07 06:21:54

+1

IP數據包在裏面包含tcp數據包的信息。把OSI模型想象成那些俄羅斯娃娃,其中所有低於上一級的數據都在這個較低級別。因此,最低級別使用來自所有上述級別和自身的數據,而最高級別僅適用於自身。 – Recursion 2010-01-07 06:31:32

1

應用程序(在本例中爲瀏覽器)做了一些最終調用getaddrinfo庫函數或類似的東西,這使得系統的解析器在DNS中查找名稱並返回一組IP地址。

應用程序以某種方式選擇了其中一種(有標準方法來做到這一點,但可愛的是有多少種標準方式),並使用系統調用進行連接,從而啓動內核中的傳輸層獲得該IP地址的連接。

最終創建IP數據包的目標地址和本地地址爲源,下一個協議設置爲TCP並且TCP標頭中的SYN位開啓。路徑中的每個路由器都會查詢其表並轉發數據包。

TCP魔術發生,SYN + ACK回來,然後有一個連接,HTTP魔術發生,並加載頁面。

+0

我想你沒有得到這個問題。請參閱修訂後的問題。 – Mohit 2010-01-07 06:34:06

+0

Internet不能在OSI模型上運行。有很多跨層連接,完全打亂好整潔的OSI模型。應用程序處理IP地址,並將它們一路傳送到堆棧中。所以你斷言圖層之間有乾淨的隔離是不正確的。 – 2010-01-07 12:15:47

+0

爲了進一步說明:當數據包沿着堆棧向下時,旁邊有一個旁路通道,這樣每個層都可以訪問傳遞給系統調用的所有內容,從而導致創建套接字和傳輸特定數據包包括所有的IP地址。這些數據部分存儲在套接字上,部分存儲在附屬於數據包本身的輔助結構上。 – 2010-01-07 12:19:04

0

rfc791 IP - 尋址

甲區分的姓名,地址和路由之間進行[4]。一個名字表示我們所尋求的。地址表明它在哪裏。路線指示如何到達那裏。互聯網協議主要處理地址。高級別(即主機到主機或應用程序)協議的任務是完成從名稱到地址的映射。互聯網模塊將互聯網地址映射到本地網絡地址。下級(即本地網或網關)程序的任務是使本地網地址映射到路由。地址是四個八位字節(32位)的固定長度。

瞭解更多:http://www.faqs.org/rfcs/rfc791.html#ixzz0buBJkVEI

它是較高級別的任務(即,主機到主機或應用程序)的協議,使從名稱到地址的映射???

+0

我想你沒有得到這個問題。請參閱修訂後的問題。 – Mohit 2010-01-07 06:34:38

0

如果您想知道實際IP標頭如何獲取地址。它在創建套接字時發生在內核中。在這種情況下,TCP套接字,檢查出

人7 IP

的數據不會從TCP數據包繼承,儘管數據包含在TCP報頭的校驗和。