爲了保持學習網絡編程的連貫性和系統性,我在以前已經更新了《學網絡編程前的計算機知識普及》和《如何進行網絡通訊》,我只能說寫的確實很詳細,能讓你全盤吸取,不過你要沒看也沒關係,我會在此篇再來一個前情回顧,不會像上兩篇那樣詳細,但也能讓你理解。html
時代不一樣了,你們如今生活都好了,家家戶戶都有電腦了,並且咱們都習慣了使用電腦辦公,打打遊戲,聊聊天。那咱們來想一個事兒:若是沒有了網絡,咱們是否是就不能使用電腦進行聊天了啊。那網絡究竟是如何幫助咱們來完成網絡聊天的?此篇我就跟你們繼續聊計算機網絡究竟是怎麼回事兒。編程
這回我和以往反着來,先說官方定義,再解釋:瀏覽器
計算機網絡是由通訊介質將地理位置不一樣的且相互獨立的計算機鏈接起來,實現數據通訊與資源共享。服務器
咱們知道兩個獨立且絕不相關的計算機,一臺在青海,一臺在河南,想要進行數據傳輸(聊天),沒網是不行的。這個網指的就是互聯網(Internet)。這個Internet它是一個通訊協議。什麼是協議?打個比方,就比如咱們打電話,在中國,中國有十幾億人,地大物博,全國各地都有本身的方言,還有些地方使用本身的民族語言,這時候想要良好的溝通就必須使用統一的一個標準,就是普通話。你們都講普通話,溝通起來就沒有問題了。那若是是不一樣國家進行溝通呢?咱們能夠選擇使用英語進行交流,那英語就是全世界國家通用的一個標準,計算機就比如是分佈在全世界各個角落的人,計算機之間通話也要找一個統一的標準,這個標準就是Internet標準,又叫作Internet協議。微信
先給你們講一個虛構版隔壁老王的故事:
有一我的叫隔壁老王,他有一個愛好就是看電影。有一天,這個隔壁老王想看一部電影,但是電腦裏面存儲的電影太多了,他費了老大勁才從裏面找到,以爲很不爽。因而他想,我能不能把全部電影作個分類,把同一種類型的電影放在同一個文件夾下,而後把全部的文件夾整合在一塊兒,本身寫個瀏覽器軟件,把文件夾信息放到瀏覽器上,到時候找電影的時候就好找了,只要找到相應的文件夾直接點進去就能找到電影了,老王說幹就幹,沒多久就把全部的文件夾整理好了,而後把全部文件夾放到同一個頁面上,到時候他想點哪一個就點哪一個,So easy!(那些網站可能就是這樣來的)。
這回出來一個新人物,就叫小王吧,不是小王八,老王就是住在小王隔壁,有一天小王看到老王電腦上有那麼多電影,就跟老王商量,能不能在他電腦上也弄個跟老王同樣的,讓他也看看。老王也不是個小氣的人,好東西就是要分享的嘛,想都沒想就答應了,給小王說在你電腦上插根線接到我電腦上,而後下載我這個軟件,直接訪問個人電腦就好了。小王很高興,他立刻回家按老王說的作,沒多久他的電腦上也能看老王電腦上的東西了。有了小王,就還會有小張,小李,互相插根網線,他們都能互相共享電影了。這樣,局域網也就產生了,就好比在一個公司或者一個學校用的網絡,都稱爲局域網。那學校有不少呀,不一樣的學校用的局域網是不一樣的,不一樣城市的有不一樣的局域網,以局域網爲單位,散佈在一個區或一個城市的各個局域網加一塊兒叫城域網,而後全世界全部城市的城域網加一塊兒就叫廣域網。
過了一段時間,老王去小王家,看到小王電腦裏的電影比本身的還多,並且還好看,而後老王跟小王說,把你的這些電影給我一份吧,我也想看看。不用想,小王確定立馬答應了,說你本身弄吧,想看哪一個隨便看。姜仍是老的辣,老王想到一個好辦法,他跟小王說,我再找一臺電腦,把我倆電腦上的資源所有放到那臺電腦裏,我倆只要在那個電腦上插根線連到本身電腦上,就都能訪問那電腦上的東西了,這樣豈不是很方便。小王一拍腦門,呀!我咋就沒想到,那還不趕忙的。老王另外找了一臺電腦,而後他倆把本身的電腦和那臺電腦用線連起來,再把本身電腦裏的全部資源全傳進那臺電腦中,最後他倆就能共享資源了。(那臺電腦就是服務器)(附加內容)
總結一下就是:網絡
網絡按地域分類:根據參照物不一樣、類型不一樣分爲tcp
- 局域網:一個公司、一個家庭、一個學校······
- 城域網:一個地區、一個城市······
- 廣域網:一個國家、全世界······
我在上面說了Internet協議,互聯網協議按照功能的不一樣,分爲osi七層,tcp/ip五層,tcp/ip四層協議。以下圖:學習
osi的七層協議體系結構的概念清楚,理論也比較完善,但它既複雜又不實用,ISO制定的osi協議參考模型的過於龐大、複雜招致了許多批評。於此對照,由技術人員本身開發的TCP/IP協議得到了更爲普遍的應用。所以,咱們只須要弄明白TCP/IP五層協議就能瞭解和明白計算機最底層的通訊是怎麼回事。網站
如圖,從最下方的物理層到最上方的應用層,對於咱們用戶而言,最直接的是應用層。從上到下每一層都依賴於下一層,因此我從最下一層開始給你們講解:spa
注意:每一層都運行着一個特定的協議,共同組合成互聯網協議
物理層主要是由雙絞線、光纜、電纜、無線電波組成,其做用很簡單,就是鏈接不一樣的計算機,並傳遞底層電信號,高電壓: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地址是由12位16進制的數字表示(前六位是廠商編號,後六位是流水線號),這樣不一樣的廠商之間就不會產生衝突了,本身生產本身的就行了。
在這給你們介紹一個東西,咱們說兩個電腦要通訊要先連根線,可是若是電腦多了以後,電腦間通訊連的線也就多了,這樣太亂了,我介紹的這個東西就是交換機,它是負責組件局域網,研究的是MAC地址,它有什麼用你看下面圖片中的接口就知道了
有了MAC地址,以太網就能夠進行工做了.理論上講,咱們能夠和世界上的每一臺鏈接了互聯網的計算機進行通訊了,此時通訊的方案是:廣播
廣播又是怎麼一回事?其實廣播的方式很原始,基本通訊就是靠吼。就像你想跟女友求婚同樣,你會大喊:「xxx,嫁給我吧」,旁邊能聽到這句話的人有不少,可是隻有你女友會回覆你。其餘人會把你當傻逼同樣看待。
沒錯,廣播就是這樣進行通訊的。首先組織好了一個數據包以後,把這個數據包經過電信號發出去,這時整個網絡上全部的人都會收到你發的這條數據,而後看看這個數據是否是本身的。若是不是就當他不存在,若是是,就接收。雖然效率低點,但畢竟能通訊了。
廣播帶來什麼問題呢?若是是在一個小的網絡環境裏。比方說,大家宿舍幾我的,一塊兒玩CS,沒問題,你喊一嗓子,你室友也能迴應你,也就效率低點。可是若是你鏈接到全世界的互聯網上,還使用廣播的方式來通訊,就不是效率問題了,而是一個巨大的通訊災難。全世界60多億人,每一個人吼一嗓子,每一個人發送一條信息,那每一個人都會收到60多億條信息,網絡瞬間癱瘓,這種問題被稱爲廣播風暴,那如何解決呢?
首先,咱們要了解一個事情,世界大網絡(廣域網)是由一個一個的互相隔離的小型局域網(子網)組成的,不一樣的局域網之間使用路由來鏈接。
上面說的交換機是負責組建局域網,研究的是MAC地址,而路由器是負責組件廣域網,研究的是IP地址,這個IP地址下面我再解釋。
剛纔說的廣播,只能在一個局域網內進行通訊,不能夠在大網絡上進行廣播,有了路由器,就避免了廣播風暴的問題。每一個局域網被稱爲一個廣播域,局域網和局域網之間使用路由的方式進行通訊(向不一樣的廣播域/子網發送數據包),用路由器把一個局域網裏的全部計算機劃分紅一個個子網。
如今你們先想想生活中,若是是以前說的廣播,就至關於在一間教室裏你正在上課,你要給某個女孩傳紙條,那你要在紙條外面寫上你和你要傳的女孩的名字,再在裏面寫上你要寫的話,寫好後折起來,你和女孩的名字在外,內容在內,而後讓同窗一個一個幫你傳,每一個同窗在傳的時候都會看外面寫的名字,若是不是他,就繼續傳,直到傳到的人是你寫的那個女孩爲止。那這間教室就至關於一個局域網。好,如今咱們要實現局域網和局域網之間的通訊,好比此時位於青海的你要給河南的朋友送東西,你不可能用廣播的方式了,你只能快遞,這個青海和河南以及還有不少不一樣的省份是我國的土地劃分,每個省也能夠看做是一個個局域網,那在網絡中,我國就至關於廣域網,那不一樣的局域網是如何劃分的呢?MAC地址是沒辦法區分的,由於MAC地址上只有廠商的流水號,這就引出我要說的網絡層,網絡層引出了一套新的地址來區分不一樣的局域網/子網,這一套地址就是網絡地址。
規定網絡地址的協議叫IP協議,它定義的地址叫IP地址。其實跟我國的省份名差很少,繼續說送快遞,你要把送的東西包裝好,在外面寫上你本身的地址和省份地址,還有朋友的地址和省份地址,交給青海的快遞公司,而後青海的快遞公司轉交給河南的快遞公司,最後由河南的快遞公司分配給你朋友,你朋友就收到快遞了。在這有兩點須要注意:
- 你要同時寫兩個地址,本身的地址(MAC地址)和省份地址(IP地址),這樣就能肯定所要接收和發送人的具體的位置了。
- 青海的快遞公司和河南的快遞公司就至關於路由器
在這給你們普及一下子網掩碼,咱們上面說有了IP地址和MAC地址,咱們就能讓任何計算機之間進行通訊了,那如今再想一想,若是我要用個人計算機給另一臺計算機實現通訊,我是否是要判斷要通訊的計算機是否和個人計算機在同一個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數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。
TCP頭放的主要是 源端口和 目標端口
UDP協議:不可靠傳輸,「報頭」部分一共只有8個字節,總長度不超過65535字節,正好放進一個IP數據包。
其實和郵信是同樣的,寫好地址,寫好接收人,直接裝進信封裏,丟進郵箱裏就不用你管了,對方何時收,收沒收到,你不知道。
用戶使用的都是應用程序,均工做於應用層,你們均可以開發本身的應用程序,數據多種多樣,必須規定好數據的組織形式。對於用於而言最直觀的就是應用層。
- 應用層:規定應用程序的數據格式
例:TCP協議能夠爲各類各樣的程序傳遞數據,好比Email、WWW、FTP等,那麼,必須有不一樣協議規定電子郵件、網頁、FTP數據的格式,這些應用程序協議就構成了「應用層」。
以上是對TCP/IP5層協議的解讀,總結一下:
發送數據其實就是一個封裝數據的過程
最後從物理層發出,對方接收到了以後再自下而上一層一層打開拿到數據,以上內容就是一個網絡傳輸的大體過程,其中還有好多細節沒有闡述,但你們知道和了解以上內容,對開發而言足夠了。
原本還想加上TCP協議的三次握手和四次斷開,奈何考慮到篇幅過大,對讀者不利,權衡再三,決定單獨去寫這部分。
看完有收穫?那麼但願老鐵別吝嗇你的三連擊哦
一、點個推薦,讓更多的人看到這篇文章
二、關注個人原創微信公衆號【泰斗賢若如】,第一時間閱讀個人文章
三、歡迎關注個人博客
【原創聲明】:本人原創:https://www.cnblogs.com/zyx110/