ospf處在哪個tcp/ip的層次,是不是傳輸層,網上說tcp/ip不夠嚴謹,那麼對於osi呢?

rip封裝在udp埠號520,很好理解他處於應用層;ospf直接運行在ip之上沒有埠號只有協議號89,應該理解為工作在傳輸層吧;但是也不能這麼理解,icmp協議也是網路層協議,但是卻要ip封裝,協議號是1,很顯然他應該在傳輸層,而現實卻在網路層。


這是一個大課題,今天展開來談。開始之前,先來回答題主的問題。


問題一:RIP協議工作在幾層?


先來看看RIP的封裝格式:


L2 Header + IP + UDP + RIP


如果按照封裝格式來劃分,RIP彷彿工作在應用層,但我要說,這僅僅是一種假象。

如果RIP高興,可以直接封裝在L2 Header上,如下圖,一樣可以工作的妥妥的,RIP協議壓根不需要IP地址就可以工作,只要直連鏈路的對端路由器也開啟RIP功能即可。話說正常的RIP協議只需要L2 Header就可以發現彼此了。


L2 Header + RIP


但這種封裝格式擴展性不好,需要L2 Header 里重新定義類似 ether-type == RIP 來識別RIP協議,需要每一種物理介質的數據鏈路層都要提供這種協議擴展支持:Ethernet / HDLC / PPP / ATM / Frame Relay,這將是一個巨大的挑戰,所以不會被採用。


而採用UDP來封裝,只需要埠號520就可以識別RIP了,不是嗎?而無需對各種數據鏈路層進行協議擴展了,這是多麼輕鬆而愜意的事!


有一個問題:RIP協議是幹嘛的?這不是笑話,咱們要打破沙鍋問到底,RIP是路由協議,用於路由器之間交換路由表的,路由表是幹嘛的?轉發IP包的!好,RIP最終目的是為了交換路由表來轉發IP包的!換句話說,沒有路由表是不是無法轉發IP包?


說不對的同學這樣解釋:RIP協議封裝在UDP上,也是IP包,RIP還沒有交換路由表之前,不是一樣可以通信嘛?


說對的同學這樣解釋:樓上的同學,那是因為RIP協議運行之前,有直連靜態路由(Directly Connected Route)的存在,所以RIP才可以通信。


沒錯,我贊同樓下的同學,RIP的正常工作需要直連鏈路可以雙向通信,然後就可以交換彼路由表,再然後就可以為其它IP包服務了。其核心功能是為其它IP包提供三層服務(網路層),按照功能劃分,RIP工作在網路層。


問題二:OSPF工作在幾層?

同理可得,看完以上解釋,OSPF一樣工作在網路層。

問題三:ICMP工作在幾層?


ICMP,IP Control Management Protocol 的縮寫,ICMP看其全稱,就知道它是IP的控制管理協議,當IP包在轉發的路徑上遇到一些問題:比如TTL Expired 、IP包太大無法分片轉發等等,需要用ICMP消息來告訴源主機,這樣源主機可以採取相應的措施。


如果不封裝在IP層上,難道封裝在L2 Header 上?如下圖:


L2 Header + ICMP


問題是上面的封裝無法跨越多路由器到達源主機,有了IP頭,就可以到達源主機。所以ICMP是IP層(網路層)的輔助協議,屬於網路層。

數據鏈路層 VS 網路層


舉個例子,比如你想去馬爾地夫蕉葉島,流程如下:

第一步:打車和司機師傅說,去馬爾地夫蕉葉島,司機一臉懵逼地看著你,你連忙改口:去浦東國際機場,然後司機緩過神來,開往機場


第二步:到了機場,和值機櫃檯說:去蕉葉島,值機人員也是一頭霧水,你意識到又錯了,連忙改口:去馬爾地夫!順利辦完手續

第三步:到達馬爾地夫機場,然後你再告訴服務人員:去蕉葉島!這個時候服務人員就聽得懂,然後坐上小飛機,順利抵達馬爾地夫蕉葉島。


以上的 浦東國際機場、馬爾地夫、蕉葉島 都是數據鏈路層地址,會隨著不同的鏈路而有其對應的地址,而馬爾地夫蕉葉島網路層地址,傳輸過程中保持不變,否則也到達不了目的地,這就是數據鏈路層與網路層本質的區別。


你是覺得,只要用了某一層的服務,就必然不屬於這一層,而是屬於這一層的上邊了?實際上並不是這麼嚴格,在劃分的時候還需要考慮某一種服務它發揮的作用,比如所有的書里,icmp都會畫在網路層。

每一種簡明的劃分,都會有灰色的地帶。比如,火車拉人很容易理解吧。創歷史新高 2016年國慶假期北京鐵路局發送旅客1100萬。那火車司機和乘務員算不算人呢?還是算火車?

或者,下面的這些小汽車,究竟是汽車還是貨物?

至於不夠嚴謹,什麼算嚴謹呢?嚴謹有什麼用呢?這個遠遠比某某嚴謹或者不嚴謹這個判斷有價值


A routing protocol specifies how routers communicate with each other, disseminating information that enables them to select routes between any two nodes on a computer network. Although there are many types of routing protocols, three major classes are in widespread use on IP networks:

  • Interior gateway protocols type 1, link-state routing protocols, such as OSPF and IS-IS……
  • OSPF應該是路由協議,我覺得協議屬於哪一層還是應該看主要解決了哪一層的問題:解決了節點選路問題應該就是路由協議,解決接入信道問題就是MAC協議,解決應用之間交付問題就是傳輸層協議吧……按照功能劃分更好些,即便是跨層協議也看主要解決哪一層問題。
  • 層與層本來就是人為設定,應該是從高效實用設計理念出發劃分的,落實到具體協議不能本本主義。

這個問題好像我在哪裡回答過。

1. 7層協議架構一般是對用戶端到端協議的描述
2. 好多好多協議都沒有完整的7層
3. 對於網路控制協議,有3種觀點描述
3.1 為哪層服務就是哪層協議
3.2 被哪一層設備解析,執行主體是誰
3.3 作為一種應用去描述,只不過應用的主體不是host或個人,而是網關

我個人喜歡最後一種解讀(沒有見過其他人有類似解讀的材料,也算是我個人的「野」理解)。

我們以更直觀的dhcp協議來看。流行的解釋是dhcp是網路層協議,因為他服務對象是為ip層提供配置,執行主體有一個是路由器。

但udp是有ip上層的udp封裝的,能說一個udp上承載的協議工作在IP層嗎?

dns也是類似,dns還可以用tcp封裝。tcp可是一個標準的端到端協議棧層次結構。而且dns伺服器往往並不是網關,而且不同於dhcp,dns伺服器經常被配置成一個遠端的ip地址,比如大家常用的4個8。主機執行dns的時候直接啟動tcp連接,和對端建立一個session,在這個session上執行一個或多個域名解析。如果想做安全性,可以做tls或dtls去解決,這和IP層就沒有關係了。

如果換成觀點3.3,那麼一切解釋起來順理成章。dhcp和dns都是一種為IP層實現配置或信令的應用層協議,他們可以有完整7層協議

ospf也是一種或多種執行主體是路由器的應用。不同功能的ospf使用了不同的協議棧。這樣才能解釋ospf的協議棧和報文格式。

我們範圍放大一點,openflow裡面的控制協議服務於鏈路層,協議棧卻是tcp之上的應用。arp協議是在鏈路層上直接定義的應用。icmp是為IP層提供測控的應用。多整齊

最後加一句:網路信令和用戶信令,和業務數據的協議棧理解上有差異的。不要簡單套用,要理解他。


routine protocols have nothing to do with IP protocol.


ICMP Internet Control Message Protocol
網際控制報文協議
有些協議不能完全嚴格定義到哪一層。ICMP可以看作是IP層的附屬協議,但是不能歸結到傳輸層,因為不具有傳輸層的功能特徵。

按照封裝格式可以把某些協議歸成一層,但是有些協議不是嚴格的分層,要看具體的功能。OSPF RIP ICMP封裝格式可以看成四層,七層,4層封裝。


如果非要套「層「的概念,是第三層


現實是OSI完全不是TCP/IP的對手

OSPF 在三層
ISIS 據說設計時候是在二層,後來為了兼容什麼的也要支持IP 這個是OSI搞得
BGP 是TCP
他們都是路由協議,解決的都是路由問題,只是各自對的應用場景不一樣。

還有比如說 arp 你說他是幾層。。。
都是人為的為了方便進行規劃的,其實都是相互聯繫的
還有現在的雲計算 也分層 iaas paas saas 三大服務


不是因為它架構在ip層上就是傳輸層,也不是他是傳輸層就肯定比網路層高。

協議不僅工作在傳輸層。

iso模型絕不是分離的而是互相依存的。

ip並不是只能承載tcp或者udp。


推薦閱讀:

IP報文的目的IP地址是私有IP地址,網路層如何處理的?
智能DNS解析?
nginx不是使用epoll么? epoll貌似是同步的吧! 那nginx的非同步非阻塞到底非同步在哪裡?
DNS劫持和HTTP劫持有什麼區別?

TAG:計算機 | 計算機網路 | TCPIP |