小智:大鵬哥,我最近看了下計算機網路,把書上的內容都過了一遍,可是感覺還是串不起來,不知道計算機網路到底講了些什麼內容,也不知道重點在哪裡,你能不能給我梳理梳理呀!
大鵬:行,那咱們就從「計算機網路」這五個字說起,計算機網路,顧名思義,就是由計算機組成的網路,那計算機組成網路要幹什麼呢?我們知道,不聯網的計算機只能單兵作戰,只能玩單機遊戲,只能簡單的處理檔案,而通過聯網,計算機可以玩網遊,可以看電影,可以聊QQ,總之,計算機聯網之後功能大大擴充套件。那回到剛剛計算機要組成網路的問題,很顯然,計算機組網是為了計算機能相互通訊,是為了避免資訊孤島,能夠將網路中的資訊傳播到各個地方。 計算機間的通訊跟人與人之間溝通對話很類似,人與人溝通對話使用語言,語言有很多種,但是每種語言都有自己的語意語法,就是語言得講究一定規則,這樣掌握同種語言的人對話,大家才能理解彼此話語的含義,那麼在計算機通訊中,我們把這種通訊的規則叫做網路協定,像人類語言有很多種一樣,網路協定也有很多種,用來適應不同場景的通訊。
小智:嗯,這個我知道,我在書裡面是看到了各種各樣的網路協定,書裡面還提到了網路分層的事情呢,像什麼ISO七層模型,還有個什麼五層模型,不同層裡面還有不同協定,可我就是沒弄明白,網路為什麼要分層呢?
大鵬:你這個問題問得很好,其實說到網路分層,我個人的理解,分層設計的好處是每個層次只負責自己的那部分事情,一層套一層,自己那層的任務完成了就交給下一層處理,各司其職,每層都遵守自己的規則,配合起來完成網路通訊的工作,不至於大家都攪在一起,職責不明,看起來混亂。網路通訊的這種分層模型從設計之初到現在,歷經幾十年也不曾變化,就和我們前面談到馮諾依曼的計算機模型一樣,可見其偉大高明之處。
小智:嗯嗯,你這麼說我就大概明白為什麼要分這麼多層了,可是書上為什麼又是說七層模型又是說五層模型呢,搞得我有點暈呢。
大鵬:網路分層,ISO標準組織分層是分為七層,而實際我們都是按五層模型來說的,我工作這麼多年,也沒人跟我談七層模型了,也就是標準是標準,我們理解還是按五層來理解,因為按五層來劃分其實更合理,我們也不用去糾結這個,我們只要知道五層模型分別是物理層、資料鏈路層、網路層、傳輸層和應用層。層次之間的關係看看下面這個圖。
小智:那我現在就很想知道每個分層裡面包含哪些內容?每一層到底都要幹些什麼,你再給我講講唄。
大鵬:每一層裡面包含的內容主要有不同的網路協定以及計算機的標識,計算機的標識就類似於人跟人對話,我們得知道是誰跟誰對話,比如張三跟李四對話,那張三李四就是這個標識。
我們先來看物理層,物理層其實我們關注得不多,物理層主要是要解決通訊鏈路的問題,可以這麼理解,我們人說話也是要藉助媒介的,高中課程裡面我們就知道,說話聲音是通過空氣傳播的,那計算機網路協定也得承載在一個物理媒介中傳播,比如我們能看到的網線、光纖以及計算機的網路卡等等,物理媒介主要是決定了網路通訊的速率,對於物理傳輸,工程實踐中關注得比較多,我們只做瞭解即可。
物理層之上是資料鏈路層,計算機在資料鏈路層的標識我們叫它mac地址,這個mac地址在我們的電腦,網路和共用中心上就可以檢視到,看看這個圖:
mac地址其實是配在我們電腦的網路卡上的,每塊網路卡都有一個mac地址,是網路卡出廠時就設定好的。在資料鏈路層,跟mac地址相關的協定就是乙太網協定,乙太網協定簡單來說就是記錄兩臺計算機通訊的源mac地址和目的mac地址。
資料鏈路層往上就是網路層了,網路層協定當然就要數大名鼎鼎的IP協定了,IP協定對應的計算機標識是IP地址,如果把mac地址和ip地址做一個對比的話,我們可以這麼簡單理解,有了mac地址,就相當於咱們有了身份證,可以在國內到處耍了,但是要出國耍,那咱們還得再搞個IP地址,就相當於我們出國得辦護照。讓我們來看下我們電腦的ip地址:
網路層之上是傳輸層,前面講到資料鏈路層有mac地址,網路層有IP地址,其實有了這兩種地址,網路中的兩臺計算機已經能找到對方了,那我們還要傳輸層做什麼呢?
其實是這樣的,開啟我們的電腦,我們可以看到電腦系統上安裝有各種各樣的軟體,比如QQ、王者榮耀、騰訊視訊等等這些,兩臺電腦通訊,最終還是兩臺電腦上的軟體通訊,要詳細的區分兩臺電腦到底是哪些軟體相互通訊,就要用到傳輸層了,傳輸層有一個重要的概念叫做埠,簡單理解,埠其實就是用來區分各個軟體的,另外,傳輸層涉及到的兩個大名鼎鼎的協定就是tcp協定和udp協定,這兩個協定各有所長,但是都有埠的概念包含在其中。
最上一層就是應用層了,應用層面向的是最終的使用者了,離我們最近,也最好理解,那麼應用層要解決什麼問題呢?
應用層要解決的其實就是我們在使用各種軟體時需要遵守的規則,比如我們開啟瀏覽器瀏覽新聞,比如我們傳送郵件,比如我們傳輸檔案,比如我們遠端登入一臺伺服器,這些都與應用層協定有關,由於我們使用電腦的功能場景非常多,所以應用層協定的種類非常多,變化也非常快,有大家公知耳熟能詳的http、ftp等等協定,也有大廠家比如鵝廠的QICQ等協定,這也再次印證了計算機網路分層的好處,像網路層傳輸層這些底層層次保持長久不變,而應用層隨著網路應用的豐富,可以支援擴充套件,滿足實際應用場景的需求。
關於兩臺電腦在五層通訊的模型,我們看看下面這張圖:
小智: 大鵬哥,你這樣一講,我思路就清晰了很多,那你再跟我說說,我學計算機網路,到底該重點學些啥?
大鵬: 這個問題從我大學畢業到現在參加工作十年,其實我也一直在思考回想,一本計算機網路教材那麼多內容,都是我要掌握的嗎? 為什麼教材要整那麼多內容,還寫的晦澀難懂呢? 其實過了這麼久,我也終於想明白了,計算機網路作為一個計算機學科分支,從寫教材的人來說,其實是站在一個學術角度,需要完整展現計算機網路知識體系的角度去寫的,那麼對於我們讀者受眾來說,哪些才是我們需要重點掌握的呢?
這個問題其實還是要看我們以後的職業規劃,如果我們是奔著做計算機學術研究的,那我們的知識層面必須全面一些,對於物理層包括資訊編碼、傳輸媒介這些知識也都必須得掌握;
如果我們是有志從事網路工程工作的,比如做網路裝置,路由器交換機防火牆這些,那我們的網路知識就得全面一些,各個網路層次的協定也都得知道;
如果我們只是一個網際網路IT行業的碼農,其實我們重點要掌握的是ip/TCP協定,我們得知道如何寫程式碼通過tcp或者udp協定與對端通訊,知道如何做通訊的效能調優等等。
小智:嗯嗯,明白了,我覺得我想做第二種人,所以我要好好學習各個層次的網路協定了。
大鵬:興趣是最好的老師,只要你感興趣,什麼都好說。今天呢,其實也只是跟你一起理清了一下思路,後面我們要學習的內容還有很多很多,關於今天所講的內容,我用下面這張腦圖梳理一下,看這個腦圖會清晰很多,下次我們再講講網路各個層次之間是如何配合工作的。
獲取更多電子書資料電子書學習資料彙總,請關注我的公眾號:【程式設計師小智和大鵬】,回覆「電子書」獲取。