2009-09-22 26 views
1

我正在從一臺PC發送數據包到其他。我正在使用python套接字socket.socket(socket.AF_INET, socket.SOCK_DGRAM )。我們是否需要注意接收數據包的順序? 在ISO-OSI模型層下的傳輸層處理所有數據包通信。程序中是否存在所有ISO-OSI圖層?或者其中一些出現在操作系統中? 在本地主機上,我按順序獲取所有數據包。 它會對互聯網有什麼影響嗎?Python套接字編程和ISO-OSI模型

+0

爲什麼AF_INET?爲什麼限制自己使用舊的IPv4標準?更好地解決地址中的名稱並使用AF_INET或AF_INET6,具體取決於您獲得的地址。 – bortzmeyer 2009-09-22 09:28:05

回答

2

要回答你的問題直接,如果你使用SOCK_STREAM,那麼你實際上是使用TCP,這是確實照顧分組排序和完整性,爲您的傳輸層的實現。所以這聽起來就是你想要使用的。 SOCK_DGRAM實際上是UDP,它不會爲您處理任何完整性。

我們是否需要注意接收數據包的順序?在ISO-OSI模型層下的傳輸層處理所有數據包通信。程序中是否存在所有ISO-OSI圖層?

只是爲了澄清這件事,在ISO-OSI模型中,傳輸層把手從一臺計算機發送一個分組與其他下面的所有圖層,並且不「理解」的概念,數據包排序(它不適用於它們)。

在該模型中,存在另一個層(會話層,傳輸層以上),其是負責定義會話行爲。正是在這個層面上,決定是否採取措施防止重新排序,確保完整性等等。

在現代世界中,ISO-OSI模型更多的是一種理想化的模板,而不是實際的模型。 TCP/IP是幾乎無處不在的實際實現。

在TCP/IP中,傳輸層是具有確定是否有任何會話的行爲或不的角色之一。

4

SOCK_DGRAM意味着你要通過UDP發送數據包 - 沒有秩序的保證,沒有接待保障,沒有缺少重複的保證。 SOCK_STREAM意味着TCP - 沒有數據包邊界保證,但(除非連接丟失;-)保證訂單,接收和不重複。 TCP/IP,贏得的每一個心臟和靈魂住practitioned並取得互聯網發生的組網模型,是符合ISO/OSI - 在繪圖桌設計的,從來沒有真正在現實獲獎標準世界。

因爲她生活和呼吸的互聯網一直是TCP/IP。不要依賴在低延遲本地網絡上進行的測試,就像在現實世界中會發生什麼樣的代表一樣。歡迎來到現實世界,BTW,祝你好運(你需要一些!)。