2013-10-07 101 views
11

我正在通過關於網絡的視頻講座,講師提到ICMP作爲傳輸層協議。但是,谷歌搜索顯示各種論壇將其描述爲網絡層協議。這讓我很困惑。有人可以澄清嗎?ICMP是傳輸層協議嗎?

回答

14

傳輸層協議涉及從端到端發送數據並確保(或明確不確保)可靠性。 TCP用於將數據從一臺計算機發送到另一臺計算機,幷包括確保數據正確傳輸所需的邏輯,而UDP則用於將數據從一臺計算機發送到另一臺計算機,同時希望獲得可靠性。

ICMP真的不這樣做。它的工作是幫助路由器瞭解互聯網的形狀以及使用不同協議發送數據包的方向。因此,它被認爲是網絡層協議,因爲它的工作是確保數據路由到正確的位置,但不實際路由數據。

希望這會有所幫助!

+3

單詞'典型'不屬於這個答案。要麼是或者不是。 – EJP

+0

@ EJP-這是一個很好的觀點。更新! – templatetypedef

3

毫無疑問,這是一個網絡層協議。它經常與傳輸層混淆的原因是ICMP沒有任何傳輸層。例如。 ping或traceroute沒有明確定義的端口。相反,每臺機器的tcp/ip堆棧負責處理和響應傳入的ICMP消息(而不是查找端口並傳遞給相應的應用程序,就像所有其他應用程序一樣)。

更新:

顯然,這聽起來有點混亂,以饗讀者,所以這裏是從TCP/IP詳解快照由理查德·史蒂文斯解釋概念和意圖。

從書中引用。

「定位標記ICMP和IGMP始終是一個 挑戰。此前,我們發現他們在同一層IP協議的複選框,因爲他們真的 是附屬品IP。但在這裏,我們向他們展示上述IP,重申 ICMP報文,IGMP報文封裝在IP數據報」

TCP/IP Layers from RS - TCP/IP Illustrated

教學的概念,即‘一些協議和應用程序’工作方式不同來自每層負責不同任務的標準概念(傳輸是端到端的,其中網絡正在跳躍跳躍)是艱難的並且需要時間來消化。

下一個最關鍵的還是要學習的是,

即使您ping使用多說,從同一臺機器到另一控制檯,它仍然能夠保持所有個人的軌道,所謂的連接(不僅僅是與消息交換,否則沒有像tcp這樣的連接)。

以上是如何完成的,是操作系統特定的。 Linux堆棧將8個字節放在ICMP的數據字段中,該字段包含原始應用程序層觸發的端口。 ping程序下的同一本書也解釋了這一點。

這同樣適用於低層協議,如ARP/RARP。

+0

究竟是什麼時候「經常與傳輸層混淆」?除了這個問題之外,我從未見過它。它沒有傳輸層的事實並不是傳輸層中的任何證據。否則,一切都必須在傳輸層。你只是在這裏增加了混亂。 – EJP

+1

首先,通過OSI模式學習,我看到學生們總是假設某種傳輸層。沒有看到這一點使他們認爲ICMP自己處理傳輸。首先要了解的是,總是有一個端口來識別應用程序,然後瞭解沒有端口的異常是新的。即使是Stevens LISTS ICMP的聖經,在一些混合的領域裏也表明它就像一種意義上的交通工具,另一種意義上的交通網絡。我腦海中有一張朦朧的照片。會在這裏引用。 – fayyazkl

+0

此外,沒有看到是什麼讓你覺得它很混亂。我解釋了兩個最常見的ICMP工作如何在學生的心目中始終是一個問題 – fayyazkl