1. 程式人生 > >計算機網路重磅來襲——一文讓你撥開迷霧,直擊網路原理(6500字原創,真的不能再詳細了)

計算機網路重磅來襲——一文讓你撥開迷霧,直擊網路原理(6500字原創,真的不能再詳細了)

計算機網路重磅來襲——一文讓你撥開迷霧,直擊網路原理

前言

為了保持學習網路程式設計的連貫性和系統性,我在之前已經更新了《學網路程式設計前的計算機知識普及》和《如何進行網路通訊》,我只能說寫的確實很詳細,能讓你全盤吸收,不過你要沒看也不要緊,我會在此篇再來一個前情回顧,不會像上兩篇那樣詳細,但也能讓你理解。

一、前情回顧——計算機網路概述

時代不同了,大家現在生活都好了,家家戶戶都有電腦了,而且我們都習慣了使用電腦辦公,打打遊戲,聊聊天。那我們來想一個事兒:如果沒有了網路,我們是不是就不能使用電腦進行聊天了啊。那網路到底是如何幫助我們來完成網路聊天的?此篇我就跟大家繼續聊計算機網路到底是怎麼回事兒。

這回我和以往反著來,先說官方定義,再解釋:

計算機網路是由通訊介質將地理位置不同的且相互獨立的計算機連線起來,實現資料通訊與資源共享。

我們知道兩個獨立且毫不相關的計算機,一臺在青海,一臺在河南,想要進行資料傳輸(聊天),沒網是不行的。這個網指的就是網際網路(Internet)。這個Internet它是一個通訊協議。什麼是協議?打個比方,就好比我們打電話,在中國,中國有十幾億人,地大物博,全國各地都有自己的方言,還有些地方使用自己的民族語言,這時候想要良好的溝通就必須使用統一的一個標準,就是普通話。大家都講普通話,溝通起來就沒有問題了。那如果是不同國家進行溝通呢?我們可以選擇使用英語進行交流,那英語就是全世界國家通用的一個標準,計算機就好比是分佈在全世界各個角落的人,計算機之間通話也要找一個統一的標準,這個標準就是Internet標準,又叫做Internet協議。

二、網路介紹及分類之隔壁老王的故事


先給大家講一個虛構版隔壁老王的故事:
有一個人叫隔壁老王,他有一個愛好就是看電影。有一天,這個隔壁老王想看一部電影,可是電腦裡面儲存的電影太多了,他費了老大勁才從裡面找到,覺得很不爽。於是他想,我能不能把所有電影做個分類,把同一種類型的電影放在同一個資料夾下,然後把所有的資料夾整合在一起,自己寫個瀏覽器軟體,把資料夾資訊放到瀏覽器上,到時候找電影的時候就好找了,只要找到相應的資料夾直接點進去就能找到電影了,老王說幹就幹,沒多久就把所有的資料夾整理好了,然後把所有資料夾放到同一個頁面上,到時候他想點哪個就點哪個,So easy!(那些網站可能就是這樣來的)。


這回出來一個新人物,就叫小王吧,不是小王八,老王就是住在小王隔壁,有一天小王看到老王電腦上有那麼多電影,就跟老王商量,能不能在他電腦上也弄個跟老王一樣的,讓他也看看。老王也不是個小氣的人,好東西就是要分享的嘛,想都沒想就答應了,給小王說在你電腦上插根線接到我電腦上,然後下載我這個軟體,直接訪問我的電腦就行了。小王很高興,他馬上回家按老王說的做,沒多久他的電腦上也能看老王電腦上的東西了。有了小王,就還會有小張,小李,互相插根網線,他們都能互相共享電影了。這樣,區域網也就產生了,就比如在一個公司或者一個學校用的網路,都稱為區域網。那學校有很多呀,不同的學校用的區域網是不同的,不同城市的有不同的區域網,以區域網為單位,散佈在一個區或一個城市的各個區域網加一起叫都會網路,然後全世界所有城市的都會網路加一起就叫廣域網。


過了一段時間,老王去小王家,看到小王電腦裡的電影比自己的還多,而且還好看,然後老王跟小王說,把你的這些電影給我一份吧,我也想看看。不用想,小王肯定立馬答應了,說你自己弄吧,想看哪個隨便看。薑還是老的辣,老王想到一個好辦法,他跟小王說,我再找一臺電腦,把我倆電腦上的資源全部放到那臺電腦裡,我倆只要在那個電腦上插根線連到自己電腦上,就都能訪問那電腦上的東西了,這樣豈不是很方便。小王一拍腦門,呀!我咋就沒想到,那還不趕緊的。老王另外找了一臺電腦,然後他倆把自己的電腦和那臺電腦用線連起來,再把自己電腦裡的所有資源全傳進那臺電腦中,最後他倆就能共享資源了。(那臺電腦就是伺服器)(附加內容)

總結一下就是:

 

網路按地域分類:根據參照物不同、型別不同分為

  • 區域網:一個公司、一個家庭、一個學校······
  • 都會網路:一個地區、一個城市······
  • 廣域網:一個國家、全世界······

三、網際網路協議是如何分佈和設計的

我在上面說了Internet協議,網際網路協議按照功能的不同,分為osi七層,tcp/ip五層,tcp/ip四層協議。如下圖:


osi的七層協議體系結構的概念清楚,理論也比較完善,但它既複雜又不實用,ISO制定的osi協議參考模型的過於龐大、複雜招致了許多批評。於此對照,由技術人員自己開發的TCP/IP協議獲得了更為廣泛的應用。因此,我們只需要弄明白TCP/IP五層協議就能瞭解和明白計算機最底層的通訊是怎麼回事。

 

四、TCP/IP五層協議


如圖,從最下方的物理層到最上方的應用層,對於我們使用者而言,最直接的是應用層。從上到下每一層都依賴於下一層,所以我從最下一層開始給大家講解:

 

注意:每一層都執行著一個特定的協議,共同組合成網際網路協議

一、物理層

物理層主要是由雙絞線、光纜、電纜、無線電波組成,其作用很簡單,就是連線不同的計算機,並傳遞底層電訊號,高電壓:1,低電壓:0。

二、資料鏈路層

我們從物理層上接收或者傳送單純的0、1是沒有意義的,為什麼呢?想想哈,我想給女朋友傳送一句話:“你好漂亮”,那我們要把“你好漂亮”轉換成01之後,交給網絡卡,網絡卡就懵逼了,發給誰???不知道。那怎麼辦?必須要確定資料發給誰。就像我們的快遞一樣,是不是在外層包裝上有商家地址和個人地址,這樣我們不管是發還是收,都能準確定位了。網路傳送資料也一樣,我們就在資料前面加上目標地址,為了能接收到回信,也要把自己的地址也加上。但是,如果資料和地址放在一起,又亂了,比如,我給你一堆01,1010101000101010101,你也分不清哪裡是資料,哪裡是地址。這時我們就要對要傳送的01進行分組,規定前面xxx位是地址,後面xxx位是資料,並且,大家想互相都能通訊,就必須都遵守這樣的規則(協議),這個協議叫乙太網協議。在乙太網協議出現之前,各個公司都有自己的分組規則,後來都統一使用乙太網協議了。

乙太網協議規定:一組電訊號構成一個數據包,叫幀,每一幀分為報頭(head)和資料(data)兩部分。


報頭(head):固定18個位元組
傳送者/源地址: 6個位元組
接收者/目標地址: 6個位元組
資料型別:6個位元組
資料(data):最短46個位元組,最長1500位元組
資料包的具體內容(傳送給女朋友的話/快遞貨物)

 

乙太網協議中的地址叫MAC地址,MAC地址是每臺計算機唯一的實體地址,是被寫在網絡卡上的。乙太網協議規定,每一臺接收和傳送資料的裝置必須要裝有網絡卡,負責傳送和接收資料的裝置,傳送端和接收端的地址,指的就是網絡卡的地址,即MAC地址。

MAC地址

MAC地址是每個網絡卡在出廠的時候,由各個廠商直接燒錄在網絡卡上的,而且,這個地址必須是全世界唯一的。
MAC地址是由12位16進位制的數字表示(前六位是廠商編號,後六位是流水線號),這樣不同的廠商之間就不會產生衝突了,自己生產自己的就好了。

交換機

在這給大家介紹一個東西,我們說兩個電腦要通訊要先連根線,但是如果電腦多了之後,電腦間通訊連的線也就多了,這樣太亂了,我介紹的這個東西就是交換機,它是負責元件區域網,研究的是MAC地址,它有什麼用你看下面圖片中的介面就知道了

有了MAC地址,乙太網就可以進行工作了.理論上講,我們可以和世界上的每一臺連線了網際網路的計算機進行通訊了,此時通訊的方案是:廣播

廣播

廣播又是怎麼一回事?其實廣播的方式很原始,基本通訊就是靠吼。就像你想跟女朋友求婚一樣,你會大喊:“xxx,嫁給我吧”,旁邊能聽到這句話的人有很多,但是隻有你女朋友會回覆你。其他人會把你當傻逼一樣看待。
沒錯,廣播就是這樣進行通訊的。首先組織好了一個數據包之後,把這個資料包通過電訊號發出去,這時整個網路上所有的人都會收到你發的這條資料,然後看看這個資料是不是自己的。如果不是就當他不存在,如果是,就接收。雖然效率低點,但畢竟能通訊了。


廣播帶來什麼問題呢?如果是在一個小的網路環境裡。比方說,你們宿舍幾個人,一起玩CS,沒問題,你喊一嗓子,你室友也能迴應你,也就效率低點。但是如果你連線到全世界的網際網路上,還使用廣播的方式來通訊,就不是效率問題了,而是一個巨大的通訊災難。全世界60多億人,每個人吼一嗓子,每個人傳送一條資訊,那每個人都會收到60多億條資訊,網路瞬間癱瘓,這種問題被稱為廣播風暴,那如何解決呢?

三、網路層


首先,我們要了解一個事情,世界大網路(廣域網)是由一個一個的互相隔離的小型區域網(子網)組成的,不同的區域網之間使用路由來連線。

 

路由器

上面說的交換機是負責組建區域網,研究的是MAC地址,而路由器是負責元件廣域網,研究的是IP地址,這個IP地址下面我再解釋。


剛才說的廣播,只能在一個區域網內進行通訊,不可以在大網路上進行廣播,有了路由器,就避免了廣播風暴的問題。每個區域網被稱為一個廣播域,區域網和區域網之間使用路由的方式進行通訊(向不同的廣播域/子網傳送資料包),用路由器把一個局域網裡的所有計算機劃分成一個個子網。

 

現在大家先想一想生活中,如果是之前說的廣播,就相當於在一間教室裡你正在上課,你要給某個女孩傳紙條,那你要在紙條外面寫上你和你要傳的女孩的名字,再在裡面寫上你要寫的話,寫好後折起來,你和女孩的名字在外,內容在內,然後讓同學一個一個幫你傳,每個同學在傳的時候都會看外面寫的名字,如果不是他,就繼續傳,直到傳到的人是你寫的那個女孩為止。那這間教室就相當於一個區域網。好,現在我們要實現區域網和區域網之間的通訊,比如此時位於青海的你要給河南的朋友送東西,你不可能用廣播的方式了,你只能快遞,這個青海和河南以及還有很多不同的省份是我國的土地劃分,每一個省也可以看作是一個個區域網,那在網路中,我國就相當於廣域網,那不同的區域網是如何劃分的呢?MAC地址是沒辦法區分的,因為MAC地址上只有廠商的流水號,這就引出我要說的網路層,網路層引出了一套新的地址來區分不同的區域網/子網,這一套地址就是網路地址。

規定網路地址的協議叫IP協議,它定義的地址叫IP地址。其實跟我國的省份名差不多,繼續說送快遞,你要把送的東西包裝好,在外面寫上你自己的地址和省份地址,還有朋友的地址和省份地址,交給青海的快遞公司,然後青海的快遞公司轉交給河南的快遞公司,最後由河南的快遞公司分配給你朋友,你朋友就收到快遞了。在這有兩點需要注意:

  • 你要同時寫兩個地址,自己的地址(MAC地址)和省份地址(IP地址),這樣就能確定所要接收和傳送人的具體的位置了。
  • 青海的快遞公司和河南的快遞公司就相當於路由器
子網掩碼

在這給大家普及一下子網掩碼,我們上面說有了IP地址和MAC地址,我們就能讓任何計算機之間進行通訊了,那現在再想想,如果我要用我的計算機給另外一臺計算機實現通訊,我是不是要判斷要通訊的計算機是否和我的計算機在同一個IP地址中,相當於上面例子中我和我要送東西的朋友是否在一個省,這個時候就需要用子網掩碼,我拿著我的IP地址和對方的子網掩碼通過計算,判斷是否在同一個IP地址下,如果在同一個IP地址下,我可以用廣播的形式進行通訊,如果不在同一個IP地址下,我可以先把資料傳給我方的路由器,再由我方的路由器把資料傳給對方的路由器,最後由對方的路由器把資料傳給要接收資料的計算機。這樣說,再聯絡上面已經說過的,我想不難理解了。

IP地址

目前我們普遍使用的是IPV4,它規定,一個網路地址由32位二進位制組成,把32位平均分成四份,每一份8位,8位最大能表示的資料是255,所以IP地址的範圍:0.0.0.0-255.255.255.255.

一個IP地址分為兩部分,分別是網路位和主機位
網路位用來標識不同的子網
主機位用來標識子網下主機的編號

為什麼要分兩部分呢?很簡單,就好比你想寫信給你的女朋友,假設你女朋友的地址是西寧市平安路128號,那麼網路位就會直接找到西寧市,主機位幫你找到你的女朋友。

網路位和主機位是如何劃分的?使用子網掩碼來劃分。子網掩碼和IP地址差不多,都是由32位二進位制數來表示,子網掩碼也分為網路部分和主機部分,網路部分由1組成,主機部分由0組成。

那說了這麼多,IP協議是如何傳送資料的?協議規定,IP協議使用IP資料包進行傳送資料。IP資料包同樣把資料分為了兩部分,head和data,並且在傳送資料的時候,直接用IP資料包直接裝載乙太網的data部分。


head:長度為20到600位元組
data:最長為65515位元組
而乙太網資料包的“資料”部分,最長只有1500位元組,因此,如果IP資料包超過了1500位元組,它就需要分割成幾個乙太網資料包,分開發送了。

 

再回顧一下啊,乙太網的頭是包含了自己的MAC地址和目標MAC地址的,那如何查詢目標MAC地址呢?前輩們弄了一個叫ARP協議的東西專門來解析目標MAC地址。它是如何工作的?首先,它是資料鏈路層的東西,在我們傳送一個數據包的時候是包含著對方的IP地址的。例如我(172.13.4.58)想傳送一條資料給女朋友(172.13.4.90),首先,我得先拿到女朋友的MAC地址才可以通訊。此時,我們會先計算一下我和女朋友是否在一個子網內(子網掩碼)

  • 在一個子網內,直接廣播發送一個數據包

    子網內的計算機發現了這個包之後會返回一個數據包並且帶有MAC地址,這樣就通過IP地址找到了目標主機的MAC地址,接下來就可以進行資料傳輸了。
  • 不在一個子網內,單純的用廣播就不行了,因為廣播只是針對自己內網而言。那怎麼辦,此時會把資料包發給閘道器,由閘道器發給其它路由,這樣在整個全球資訊網裡就可以找到你想要的那個計算機的MAC地址了。
總結
  • ARP就是通過IP地址來查詢MAC地址的一套固定協議,它是資料鏈路層的內容。
  • 網路層的意義:定義了子網, 區分各個區域網
  • IP地址:網路地址
  • 子網掩碼:計算是否是同一個子網

四、傳輸層

到目前為止,前三層內容已經可以進行資料傳輸了。但是,我們的一臺計算機上可以一次性執行多個網路應用程式,比如,QQ、微信、LOL三個軟體一起執行,都要進行網路傳輸,但是就前面學習的這三層內容,是沒辦法區分開資料是要傳送給哪一個軟體的。那怎麼辦?引入第四層,傳輸層,傳輸層定義了埠的概念,每一個網路應用程式佔用一個網路埠,不同的程式就用埠把資料隔離,兩兩互相不影響。

  • 埠:應用程式和網絡卡的關聯編號
  • 傳輸層:建立埠到埠的通訊。
  • 傳輸層有兩種協議:TCP和UDP
TCP協議

TCP協議:可靠傳輸,TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網路的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確保單個TCP資料包不必再分割。


TCP頭放的主要是源埠和目標埠

 

UDP協議

UDP協議:不可靠傳輸,“報頭”部分一共只有8個位元組,總長度不超過65535位元組,正好放進一個IP資料包。


其實和郵信是一樣的,寫好地址,寫好接收人,直接裝進信封裡,丟進郵箱裡就不用你管了,對方什麼時候收,收沒收到,你不知道。

 

五、應用層

使用者使用的都是應用程式,均工作於應用層,大家都可以開發自己的應用程式,資料多種多樣,必須規定好資料的組織形式。對於用於而言最直觀的就是應用層。

  • 應用層:規定應用程式的資料格式

例:TCP協議可以為各種各樣的程式傳遞資料,比如Email、WWW、FTP等,那麼,必須有不同協議規定電子郵件、網頁、FTP資料的格式,這些應用程式協議就構成了“應用層”。

總結

以上是對TCP/IP5層協議的解讀,總結一下:


傳送資料其實就是一個封裝資料的過程

最後從物理層發出,對方接收到了之後再自下而上一層一層開啟拿到資料,以上內容就是一個網路傳輸的大致過程,其中還有好多細節沒有闡述,但大家知道和了解以上內容,對開發而言足夠了。

 

結束

本來還想加上TCP協議的三次握手和四次斷開,奈何考慮到篇幅過大,對讀者不利,權衡再三,決定單獨去寫這部分。

看完有收穫?那麼希望老鐵別吝嗇你的三連擊哦
1、點個推薦,讓更多的人看到這篇文章
2、關注我的原創微信公眾號【泰斗賢若如】,第一時間閱讀我的文章
3、歡迎關注我的部落格

 【原創宣告】:本人原創:https://www.cnblogs.com/zyx