2011-12-06 63 views
4

傳輸層如何從數據報包中檢索源IP地址? 從我所瞭解的IP地址是在網絡層頭和傳輸層頭只包含源端口和目標端口。請讓我知道如果我缺少的東西傳輸層如何從數據報包中檢索源IP地址?

+0

我猜更多的細節,你不知道如何調用像'recvfrom'源地址填寫?我建議閱讀Linux,BSD或任何其他具有開放網絡堆棧的操作系統的源代碼,因爲這取決於操作系統。 –

回答

0

簡單的答案是傳輸層不檢索來自數據報包的IP地址。

當數據報被從源發送到目的地,下面是IP是如何工作的,當數據報行進用簡單的步驟:

  • 上層應用發送一個數據包到網絡層。
  • 數據計算與校驗和一起。
  • 構造IP頭和數據報。
  • 通過網關路由。
  • 每個網關的IP層執行校驗和。如果校驗和不匹配, 的數據報將被丟棄,並且會出現錯誤信息發送回 發送機。一路上,如果TTL遞減到0,將會發生相同的 結果。並且,當數據報沿着網絡傳遞時,目的地址路由路徑將在每個站點確定爲 。
  • 數據報到達目的網絡層。
  • 執行校驗和計算。
  • 取出IP標頭。
  • 消息傳遞給上層應用程序。

EDIT

的應用將套接字綁定到其數據傳輸的端點,該端點是IP地址和服務端口的組合。然後使用此綁定來確定應用程序層上的哪個應用程序需要進行此操作。

例如應用程序A所提供的有關某個端口X的UDP服務應用。然後A開始時,它會嘗試綁定到端口X.如果無法綁定到它,因爲端口正在使用,操作系統會引發應用程序必須處理的錯誤。同樣在OSI體系結構中,每層都依賴於其下面的層來實際傳輸數據,爲其自己的預期目的添加或提供特定的功能。

按照RFC

的僞報頭概念性前綴到UDP報頭包含 源地址,目的地址,協議,以及UDP 長度。這些信息可以防止錯誤的數據報。 該校驗和過程與TCP中使用的相同。

有關細節請查看RFC User Datagram Protocol

+0

這沒有回答這個問題。他問的是傳輸層(甚至應用層)等高層如何確定IP地址,因爲他們顯然無法訪問IP標頭。 –

+0

他的問題是,由於上層顯然知道IP地址,所以很明顯他們從某處獲得IP地址。他們怎麼得到它? –

+0

@JonathanM我添加了一些更多的澄清和鏈接到RFC。 –