OSI模型中,一個協議應該屬於哪一層是以什麼為標準劃分的?
在《圖解TCP/IP》第五版一書中,作者將ARP協議劃分在了網路層:
在維基百科裡,將ARP劃分在數據鏈路層:
請問一個協議應該屬於哪一層是以什麼為標準劃分的?
我來個簡單粗暴文不對題的:
- 連MAC都不知道的算第1層,例如已經死絕了的hub
- 只知道MAC不知道IP的算第2層,例如普通交換機
- 只知道IP不知道port(也就不管TCP還是UDP)的算第3層,例如普通路由器
- 知道IP還知道port的算第4層,例如 NAT
- 關心payload的算第7層,例如 http proxy
最初ARP/IP/ICMP/UDP/TCP/HTTP,至少每層對應關係都很清晰。後來有了MPLS label,算幾層的? 呵呵,MPLS label屬於鏈路層的,因為只有在local link上才有意義。現在又有 VxLAN,算幾層的?說它是二層的吧,它封裝在UDP上;說它工作在應用層,它卻偏偏提供二層擴展功能。而我對於像VxLAN 工作在tunnel 模式下的協議,一律定義為傳輸層。它們提供的服務僅僅是把payload 從一個地方搬運到另一個地方,僅此而已。
一個協議歸屬於OSI參考模型哪一層,那要看它能提供什麼樣的服務。這個服務如果拘泥於一條鏈路,則為數據鏈路層;如果服務可以讓終端的流量可以跨越路由器的不同介面在互聯網穿梭,則為網路層。如果可以提供或可靠、或不可靠端對端服務的,則為傳輸層。可以給用戶提供服務的則為應用層。
ARP,它工作在多路訪問的數據鏈路上,它提供給IP層的服務是如何將IP層的地址與數據鏈路層MAC地址映射起來,以便IP層來訪問數據鏈路層。如果說它是網路層,童鞋們能坐在ARP這個依靠廣播方式工作的小車子離開本地鏈路嗎?顯然不能!
並不是說一個協議位於數據鏈路層以上,它就是網路層。也不是說一個協議位於網路層以上,它就一定是傳輸層!
再比如ICMP/IGMP屬於網路層還是傳輸層?
ICMP,IP Control Management Protocol
IGMP,IP Group Management Protocol
把它們的全稱寫出來童鞋們就應該明白它們都屬於IP層,IP層屬於網路層,它們也是。本來它們的存在就是為了輔助IP層工作的,ICMP處理IP層出錯,IGMP可以幫助一個主機加入一個組播組。當網路出錯時,比如IP TTL expired,或 IP Destination Unreachable 都會產生ICMP Error Message,沒有這些輔助協議的幫助,IP層單打獨鬥也不現實,至少要在IP頭裡增加如何處理出錯的報文頭。
PPTP/L2TP 很顯然屬於傳輸層。因為設計它們的時候就是為了傳輸PPP協議的,可以讓PPP協議脫離物理連接的限制,可以讓PPP client 與 PPP server 不再拘泥於物理的連接,可以在PPP client 與 PPP server 之間存在一個或大或小的IP網路、或Internet,而實現這個物理分離技術的正是PPTP/L2TP。
OSPF/ISIS/RIP/BGP 很顯然屬於網路層。無論它們工作在IP,CLNS,UDP,TCP之上,都可以把它們統統歸類於網路層,因為它們提供的是網路層的導航信息。但BGP比較特殊,它嚴重依賴於IGP,它需要別的IGP正常工作才可以正常工作,IGP相當於它的外包(outsourcing)!
最重要的是,題主要拋棄如下觀念:
先有osi七層模型和tcp/ip四層模型的,再有各類網路協議。
實際上在網路發展初期,根本不存在所謂的osi和tcp/ip這類公有模型,各廠商按照自己的需要建立了自己的各類協議,彼此不兼容。而像ICMP、IGMP和ARP這類協議就是誕生在這個階段。
既然沒有分層模型,也就無所謂某個協議一定屬於某層這個問題。隨著網路發展的需要,國際組織建立了osi七層模型和tcp/ip四層模型,前者因為劃分過於複雜一直只在理論上作為學習對象。tcp/ip協議棧因其簡要成為目前網路中的主流協議棧,物理層規定了介質、電壓等物理特性,數據鏈路層定義了MAC地址及其二層轉發原則,網路層定義了IP編址及其定址原則。
這時候ICMP、IGMP和ARP這類協議應該放在幾層呢?沒有結論。
實際上在W.Richard Stevens所著的《tcp/ip詳解卷一:協議》中的前幾章已經說的很明白了,這類介於二三層之間的協議可以按照自己的理解去歸類,不必強行按照理論模型分層。
一句話:理論要為實踐服務。
當然是按照功能來分了, ARP是比較特殊的協議之一, 因為ARP協議在數據鏈路層和網路層中間, 它包含了定址的過程, 也就是說它是為了保證網路層可以正常工作的一個重要步驟. 數據鏈路層的數據包簡單的理解就是不包含IP地址,只有源MAC和目標MAC的, 但是ARP的功能又是攜帶了源IP地址和目標IP地址, 符合網路層的特徵, 但是又不是嚴格的IP數據包結構, 所以不能嚴格來區分它是那一層的.(PS: 額.....就好像....人妖是男人還是女人.....), 很多地方硬是要把他劃分在某一層裡面...也是方便他做表述, 畢竟ARP也是重要的協議, 總不能寫在外面吧. 而且維基百科裡面也沒有說他是工作在那一層的, 就理解成為了方便表述才用的就好了
如果說區分協議工作在哪一層的標準的話, 就要看它除去數據部分的數據報文頭部結構符合那一層的結構, 哪么它就應該是哪一層的.(這只是簡單的理解, 詳細還要看這裡--&>http://en.wikipedia.org/wiki/OSI_model 其實細心一點也會發現, 其實在這裡人家在ARP上也做了特殊的描述
)
說的比較通俗簡單
附上ARP數據包結構,輔助理解一下吧看對等的終結點在哪裡
本來以為這個問題很簡單,看了前面幾個回答,覺得有必要澄清一下。
協議分「信令」和「業務」兩種。對於終端到終端的應用,分清楚7層協議不太難,「處理模塊」或者」處理節點「是判斷這些協議的層次。
比如,物理層只能過一條不做緩存的」線「,他的處理是光路和電路晶元。鏈路層可以走幾跳線,每個線終結點都可能緩存重發。鏈路層開始有了「數據塊」的概念,有了邏輯上的0,1。網路層的處理節點是跨廣播域節點。傳輸層是終端。。。。。。
我想澄清的是,所有為了滿足終端業務的信令協議,都是「某層承載了一個應用層」,並不一定滿足7層。
ARP就是數據鏈路層上承載了一個「查詢服務」。這個協議層次不要從7層去理解。他不出廣播域,不需要網路層。他只有「物理層」,「鏈路層」,「應用層」。
當然,如果把協議里的「狀態機」算進去的話,也算有「會話層」;如果把協議格式里的「IP地址格式」、「MAC地址格式」算進去的話,也算有「表示層」。
很多網路的信令都有這樣的性質,請不要隨意畫層。如果想對ARP畫層,那麼ARP的層次沒法和終端業務掛起關係來。ARP協議是鏈路層還是網路層?ICMP協議是網路層還是傳輸層?RIP路由協議是應用層還是網路層?類似的協議分層問題,從我進入網路和安全行業以來,已經聽到了無數個版本。
這個問題的難度堪比另外一個世界級難題:世界上最好的編程語言是什麼?
其實早在20世紀時,W.Richard Stevens在《TCP/IP詳解卷一》裡面就提到了這個難題(第一章1.7部分):
為協議ICMP和IGMP定位一直是一件很棘手的事情。在圖1-4中,把它們與IP放在同一層上,那是因為事實上它們是IP的附屬協議。但是在這裡,我們又把它們放在IP層的上面,這是因為ICMP和IGMP報文都被封裝在IP數據報中。
對於ARP和RARP,我們也遇到類似的難題。在這裡把它們放在乙太網設備驅動程序的上方,這是因為它們和IP數據報一樣,都有各自的乙太網數據幀類型。但在圖2-4中,我們又把ARP作為乙太網設備驅動程序的一部分,放在IP層的下面,其原因在邏輯上是合理的。
這些分層協議盒並不都是完美的。
也就是說,當前我們21世紀真正困擾的問題,其實20世紀前輩們也同樣糾結,所有有了上面 Stevens這張稍微討巧的圖片。
在這裡,給出我個人的協議分層思路:一個協議到底所屬哪一層,可以從應用/功能來考慮,也可以從層次/包封裝來考慮。
以ARP協議為例,它的功能最終是獲取到MAC信息,服務於鏈路層,從這點考慮,ARP是鏈路層協議;但是從層次來看,ARP基於Ethernet協議,IP協議基於Ethernet協議,它們在Ethernet協議裡面有獨立的Type類型,前者是0x0806,後者是0x0800,既然ARP和IP協議"平起平坐",那麼IP是網路層,ARP難道就不是網路層?
數據包結構如下:
ARP請求包
ARP回應包
同樣的道理,ICMP是服務於IP協議,從這點來看是網路層;但是它又是基於IP協議,基於協議號1,從這點來看屬於傳輸層。
ICMP請求包
以此類推,RIP(OSPF/EIGRP/BGP/ISIS)等路由協議,如果從服務/功能的角度來看,最終目的都是為了生成路由條目並服務於路由器,使得路由器根據路由表進行轉發數據,從這個點來看,路由協議都可以歸類為網路層;但是從數據包封裝的角度,例如RIP協議是基於UDP520埠號、BGP是基於TCP179埠號,從這個角度來看,它們是屬於應用層協議。
RIP更新包
BGP數據包
總結:方法/標準/模型都是人定的,你可以選擇A標準摒棄B標準,也可以選擇B標準摒棄A標準,更可以同時掌握AB兩套標準,統一整理進自己的知識庫裡面。
-----------------------------------
相關技術文章:圖解ARP協議(一)
新浪微博:@拼客學院陳鑫傑
微信公眾號:拼客院長陳鑫傑
如果真的做過項目,其實很好理解arp協議,arp協議必須要在三層設備上才能達到通過ip找mac的目地。所以說arp更偏三層多一點。
屬於2.5層。
這樣好理解一點。
題主可以這麼理解,這個協議要正常運作起來,它依賴哪些層的功能。
舉個例子,http依賴tcp,那麼它肯定是傳輸層之上。
至於arp,按照這個方法就屬於三層了。
arp按照功能來說是通過IP尋找MAC地址~它是為了服務數據鏈路層的 但是arp與IP協議都具有不同的ethernet類型。 分別是0x0806和0x0800 那麼arp可以和ip「平起平坐」為什麼不可以說他是網路層呢?
要判斷某個協議屬於哪一層 或者 哪幾層 取決於 這個協議使用了 哪些東西 如果 使用了 IP 那就屬於IP層 如果還操作了 MAC地址 那還屬於數據鏈路層
我覺得無論是什麼協議棧,都應該以數據面的功能為核心的分層依據,因為數通協議本身就是以透傳轉發為目的。相應的控制面協議都是為數傳轉發服務的。例如數據面ip可以帶控制面ospf、icmp、arp等協議。同時,分層以功能為依據,可能會有多個同功能的層,典型的有ipv6-ipv4隧道技術,LTE的承載網、終端至媒體網關雙層ip。這些情況都是有多個層三(可能叫做多個網路層更好)。所以對於一個協議棧,分層的依據為 數據透傳 + 功能界定 兩個方面比較好。
osi參考模型每層都是有特定的功能,從上到下層層獨立。看協議和設備屬於哪一層,都要看這個協議或者設備涉及到了哪幾層,涉及到的最靠上的那一層就是這個協議或設備所在層。
就拿你說的arp來說,它的功能是吧ip地址解析為mac地址,涉及到的最高層是網路層(ip協議所在層),所以它是網路層協議。
拿設備說的話例如二層交換機只有交換二層數據功能,三層交換機和路由器是有路由功能的,涉及到網路層,所以這兩個是三層設備。
你不明白協議為什麼屬於哪一次還是因為你沒有理解osi參考模型和各層的定義和功能。
推薦閱讀:
※網關和路由器的區別是什麼?
※網路編程必須使用socket嗎?
※E2E RTT的具體含義?
※使用tracert命令時,在一個節點後所有的節點都沒有數據,這是為什麼?
※在具體的實現中 TCP 是如何處理失序的數據包?