到底什么是網絡模型中的“層”?
常聽說什么7層網絡模型,4層網絡模型,層與層之間通信,上層調用下層,這個“層”到底是個什么鬼?是個什么東西?能不能給我一個看的見摸的著的東西?
如果拋開技術層面,層還是很好理解的。比如說到公司高層,腦海里會浮現出什么畫面?一群圍著董事長、CEO開會決策、拍馬屁的人。但是一個公司也不可能就這十幾個高層。總不能讓京東老總親自送快遞吧?
公司還需要十幾萬基層(底層)送快遞,腦海里肯定浮現出騎著助動車在大街小巷穿梭的人群。十幾個高層能不能有效管理十幾萬基層工作人員?
可能會很難。
自然就會產生中層管理人員,如事業部總裁、總監、經理,通過多層級的劃分,公司就這么管理起來了。
層,一個群體抽象。每個層都有其明確的職能劃分。高層負責決策、中層負責監督、基層執行。行業分工、職業分工,將復雜問題通過流水線化,變得易于執行與實現。
計算機網絡的層級劃分,是將計算機之間非常復雜的通信過程,細分成多個模塊(流水線化),每個模塊完成的功能,通過其模塊的字面意義,就可以顧名思義。如果你喜歡,你可以一直稱之為模塊。但是業界更喜歡稱之為層。
以手機為例,就是一個層級劃分的典型代表。芯片商研發芯片,主要負責物理層、部分鏈路層。其中包括,0、1調制成信號、信號解調成0、1、信號編碼、信號解碼、信號同步、信號均衡、信號濾波、信號放大、信號擾碼、信號上射頻,信號下射頻等。
芯片的0、1數據從哪里來?
當然從物理層直屬上層,鏈路層,芯片要傳輸的0、1數據難道不是來自于用戶嗎?
是的,數據的源頭確確實實是用戶點擊菜單、鍵盤輸入產生的。是通過流水線(層級)一層層流轉到芯片的物理層。由于這個流水線很漫長,咱們還是耐心從物理層一層層向上演繹。
物理層芯片大佬看似很牛逼啊,可是再牛逼也得提供接口為上層服務啊,否則用戶的0、1數據如何進入芯片
至少要提供發送、接收接口,這是數據層面的接口,保證數據的發送和接收。芯片大佬說,這個好說,我可以提供primitive命令給你們,只要按照primitve要求,輸入參數即可。
還得提供如何配置信道、速率、調制模式、信道帶寬、編碼類型、擾碼類型、長短訓練符、Guard Interval,這是管理層面的接口。當然還有很多很多類似的管理狀態接口,信道的強度、信噪比、切換信道等等。
這是物理層提供給其直屬上層的接口。所謂接口就是函數。這些函數誰提供誰才能理解并執行,而上層不需要理解這些接口函數,只要提供函數的合法輸入參數即可。這些函數由N行代碼組成,在物理層芯片CPU上執行。不在手機主CPU上執行。
物理層做完以上就OK了嗎?
不ok啊,還有很多事要做呢!
信號發送出去了,接收方如何知道信號的發送速率,信號的頻寬,接收方如何讓自己tune到與接收信號同步的頻率?
物理層在要發送的數據的首部位置添加了Preamble、Signal、Service、CRC,這些頭部可以回答以上的問題。在QAM調制時,還會在子信道中用N個Pilot信道,用于接收方對信號對齊做插值運算。如果接收信號CRC錯誤,直接丟,數據根本到不了上層。
物理層直屬上層是鏈路層的MAC層,MAC層通常也在芯片里實現。其作為流水線的一道工序,從其直屬上層獲得數據,一轉手扔給下層(發送)。或者從下層獲得數據,一轉手扔給其上層(接收)。
MAC層做的事仿佛很easy,為何要存在呢?
哈哈,如果沒有MAC層,如何將不屬于自己的數據過濾掉呢?
很難吧?
有了MAC層, 很簡單,只要檢查MAC層的接收地址,是否等于自己的MAC地址。
手機不是有IP地址的嗎,用IP地址判斷不是也可以的嗎?
MAC層,咱就想保持獨立自主,不需要依賴于上層的地址,就可以決定接收與拒絕。MAC層如果有識別客戶名單的字段,比如ether-type,那么就不必有LLC了。但是如果沒有,那么就需要LLC。LLC工作很簡單,就是為了告訴接收方,是哪個客戶的數據,IPv4的還是IPv6的。
LLC層的直屬上層就是大名鼎鼎的TCP/IP了,TCP/IP跑在手機主CPU內。沒有這兩層的存在,手機流量到不了互聯網。如果想自己開發一個協議連入互聯網,可能協議的名字不叫TCP/IP,那么協議的功能就是TCP/IP,即網絡層、傳輸層。
接下來數據到最高層,應用層。應用層通常指與用戶直接打交道的,通常使用http來實現。http將用戶的請求,用黑暗料理打包成0、1數據,通過接口發給TCP/IP(發送),或者將從TCP/IP收到的數據(接收),按照http協議格式顯示在頁面上。
上文既可以正著看(用戶數據接收),也可以倒著看(用戶數據發送),效果是一樣的。
如果不想使用TCP/IP,想把http使用一個管子(接口),套接在數據鏈路層的MAC/LLC上運輸,可以嗎?
可以的!只要接收方也是一樣的實現方式。
如果只想利用IP網絡層,不想使用TCP傳輸層,想把http使用一個管子(接口)套接在IP層上運輸,可以嗎?
也是可以的,只要接收方也是一樣的實現方式。
分層還是非常靈活的,但是需要理解以上兩種方式的局限性。前者是無法和互聯網上的主機通信,后者需要自己實現http的可靠傳輸。
直接使用TCP/IP運輸http,躺贏!不會有亂七八糟的煩心事!使用流水線化的分層操作,通信成為一件很easy的事!