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
他們都是路由協議,解決的都是路由問題,只是各自對的應用場景不一樣。
都是人為的為了方便進行規劃的,其實都是相互聯繫的
還有現在的雲計算 也分層 iaas paas saas 三大服務
不是因為它架構在ip層上就是傳輸層,也不是他是傳輸層就肯定比網路層高。
協議不僅工作在傳輸層。
iso模型絕不是分離的而是互相依存的。
ip並不是只能承載tcp或者udp。推薦閱讀:
※IP報文的目的IP地址是私有IP地址,網路層如何處理的?
※智能DNS解析?
※nginx不是使用epoll么? epoll貌似是同步的吧! 那nginx的非同步非阻塞到底非同步在哪裡?
※DNS劫持和HTTP劫持有什麼區別?