网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)
目錄
- 一、局域網和廣域網
- 1.1 局域網LAN
- 1.2 廣域網
- 二、網絡通信基礎
- 2.1 IP地址
- 2.2 端口號
- 2.3 協議
- 2.4 協議分層
- OSI七層網絡模型
- TCP/IP五層(或四層)模型
- 網絡設備所在分層
- 三、封裝和分用
- 3.1 封裝
- 應用層(QQ應用程序)
- 傳輸層(操作系統內核)
- 網絡層(操作系統內核)
- 數據鏈路層(驅動程序)
- 物理層(硬件設備)
- 3.2 分用
- 物理層(硬件設備,網卡)
- 數據鏈路層(驅動)
- 網絡層(操作系統內核)
- 傳輸層(操作系統內核)
- 應用層(應用程序QQ)
獨立模式:計算機之間相互獨立。
隨著時代的發展,越來越需要計算機之間互相通信,共享軟件和數據,即以多個計算機協同工作來完成業務,就有了網絡互連。
網絡互連:將多臺計算機連接在一起,完成數據共享。
數據共享本質是網絡數據傳輸,即計算機之間通過網絡來傳輸數據,也稱為網絡通信。
根據網絡互連的規模不同,可以劃分為局域網和廣域網。
一、局域網和廣域網
1.1 局域網LAN
局域網,即 Local Area Network,簡稱LAN。
Local 即標識了局域網是本地,局部組建的一種私有網絡
局域網內的主機之間能方便的進行網絡通信,又稱為內網;局域網和局域網之間在沒有連接的情況下,是無法通信的。
局域網組建網絡的方式有很多種:通過路由器/交換機組建起來的這些都叫做局域網。
-
基于網線直連
用兩根線把三個主機給連起來,這三個主機就構成了一個局域網。 -
基于交換機組建
交換機上面的網口之間都是對等.(都是一樣的口)效果就是把插在上面的設備給組建成一個局域網.這個局域網內部的主機之間就可以相互進行訪問,交換機是把若干個設備給組建到一個局域網中. -
基于路由器組建
路由器這里其實有兩類端口:WAN口和LAN口.
其中插在LAN口上的設備,在一個局域網里.
通過WAN口連接到另外一個局域網;
路由器則是連接了兩個局域網(LAN口是一個,WAN又連了一個)。
1.2 廣域網
廣域網,即 Wide Area Network,簡稱WAN。
通過路由器,將多個局域網連接起來,在物理上組成很大范圍的網絡,就形成了廣域網。廣域網內部的局域網都屬于其子網。
廣域網其實和局域網之間,沒有明確界限.認為比較大的局域網,就可以稱為"廣域網"
全世界最大的廣域網,叫做Internet(因特網)。
二、網絡通信基礎
網絡互連的目的是進行網絡通信,也即是網絡數據傳輸,更具體一點,是網絡主機中的不同進程間,基于網絡傳輸數據。
那么,在組建的網絡中,如何判斷到底是從哪臺主機,將數據傳輸到那臺主機呢?這就需要使用IP地址來標識。
2.1 IP地址
IР地址:描述了網絡上的一個主機的位置(定位主機的一個網絡位置).(就相當于買快遞時的收貨地址)
格式:
IP地址是一個32位的二進制數,這樣不方便人來讀取和記憶,通常把它被分割為4個“8位二進制數”(也就是4個字節),如:01100100.00000100.00000101.00000110。
通常用“點分十進制”的方式來表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之間的十進制整數)。如:100.4.5.6。
特殊IP:
127.*的IP地址用于本機環回(loop back)測試,通常是127.0.0.1(環回IP ,表示自己的這個主機)。
2.2 端口號
端口號:描述了一個主機上的某個應用程序.(相當于收件人的電話)
格式:
端口號本質上是一個2個字節(16位)的無符號整數(0~65535范圍的數字),在網絡通信中,進程可以通過綁定一個端口號,來發送及接收網絡數據。
兩個不同的進程,不能綁定同一個端口號,但一個進程可以綁定多個端口號。
3306 mysql默認的端口號.
服務器程序在啟動的時候,就需要綁定上一個端口號,以便客戶端程序來訪問。
知名端口號:把0-1024這些端口號,給劃分出了一些具體的作用.
很多網絡服務是屬于非常常用,非常廣泛的服務,為了更好的管理就給這些服務分配一些專門的端口號,并不是強制要求,而只是建議。
比如:
80: http服務器
443 :https服務器
22: ssh
23: ftp
如果你自己部署http服務器,可以把他綁定到80,也可以綁定到其他端口上.像java中知名的http服務器tomcat,使用的默認端口就不是 80 而是8080。
2.3 協議
協議,網絡協議的簡稱,網絡協議是網絡通信(即網絡數據傳輸)經過的所有網絡設備都必須共同遵從的一組約定、規則。如怎么樣建立連接、怎么樣互相識別等。只有遵守這個約定,計算機之間才能相互通信交流。
協議(protocol)最終體現為在網絡上傳輸的數據包的格式。
為什么需要協議?
網絡通信的時候,本質上傳輸的是光信號和電信號;通過光信號的頻率(高頻率/低頻率)電信號的電平(高電平/低電平)來表示0和1。要想傳遞各種不同的信息,就需要約定好雙方的數據格式。
2.4 協議分層
網絡通信這個過程其實很復雜,里面有很多很多的細節.如果就只通過一個協議,來約定所有的細節,這個協議就會非常龐大,復雜;更好的辦法就是把一個大的復雜的協議,拆成多個小的,更簡單的協議,每個協議,負責一部分工作。
協議分層類似于打電話時,定義不同的層次的協議:
我們的協議只有兩層;但是實際的網絡通信會更加復雜,需要分更多的層次。
分層的好處:
好處1:每層協議不需要理解其他層協議的細節.(更好的做到了封裝)
打電話的人,不需要理解電話的工作原理,就能完成打電話的操作制造電話的人,也不需要成為語言大師。
好處2:把對應層的協議替換成其他協議.(更好的解耦合)
打電話的人,可以不使用有線電話,可以使用無線電話.
打電話的人,也可以使用英語,不使用漢語》
OSI七層網絡模型
OSI:即Open System Interconnection,開放系統互連。
- OSI 七層網絡模型是一個邏輯上的定義和規范:把網絡從邏輯上分為了7層。
- OSI 七層模型是一種框架性的設計方法,其最主要的功能使就是幫助不同類型的主機實現數據傳輸;
- 它的最大優點是將服務、接口和協議這三個概念明確地區分開來,概念清楚,理論也比較完整。通過七個層次化的結構模型使不同的系統不同的網絡之間實現可靠的通訊。
OSI 七層模型既復雜又不實用:所以 OSI 七層模型沒有落地、實現。
實際組建網絡時,只是以 OSI 七層模型設計中的部分分層,也即是以下 TCP/IP 五層(或四層)模型來實現。
TCP/IP五層(或四層)模型
TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇。
TCP/IP通訊協議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。
下面這四層的代碼邏輯都是由操作系統和驅動以及硬件已經實現好了的。
站在全局的角度,認為是5層,但是最下面的物理層描述的是硬件設備,(和軟件沒啥關系,和程序猿距離比較遠),這個時候就認為是四層。
物理層:網絡通信中的硬件設備(網線/網卡…),針對硬件設備的約定,就是物理層協議所負責的范疇,需要保證所有的主機和網絡設備之間,都是相互匹配的。
物理層負責光/電信號的傳遞方式。比如現在以太網通用的網線(雙絞 線)、早期以太網采用的的同軸電纜(現在主要用于有線電視)、光纖,現在的wifi無線網使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)工作在物理層。
數據鏈路層:負責完成相鄰(一根網線相連)的兩個設備之間的通信的。[局部]
負責設備之間的數據幀的傳送和識別。例如網卡設備的驅動、幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、數據差錯校驗等工作。有以太網、令牌環網,無線LAN等標準。交換機(Switch)工作在數據鏈路層
網絡層:負責點到點之間的通信.[全局]
網絡中的任意節點,到任意節點之間的通信(不一定是相鄰了,更多的是指不相鄰的),網絡層就負責在這兩個點之間,規劃出一條合適的路線。(實際的網絡環境結構非常復雜.兩個點之間的路線不只一條。就需要規劃處最合適的一條)。
傳輸層:負責端到端之間的通信.
起點和終點,只是關注結果(數據到沒到),不關注過程(不關注數據是走哪條路)
比如買快遞時就需要填寫自己的收件人地址和收件人姓名.商家就要根據這個地址把快遞發給我,我和商家,都是只關注結果,不關注過程,快遞公司要關注中間的過程。
應用層:和應用程序密切相關的.(你傳輸的這個數據,是干啥用的,不同的應用程序就有不同的用途)
比如有一天我在網上買一個床刷子:
商家,站在傳輸層:考慮這個東西是能不能發到我手上.
快遞公司:站在網絡層規劃路線.
快遞小哥:站在數據鏈路層,騎著電動車把貨拉到集散中心.
電動車/集裝箱卡車/公路站在物理層:提供傳輸的基礎.
上面四步都是只在考慮包裹如何傳輸,不考慮這個包裹里面是啥,更不關心包裹里的東西是干啥用的。而我:作為買床刷子的人站在應用層,就是抱著一定的用途/目的來買的。
網絡設備所在分層
對于一臺主機,它的操作系統內核實現了從傳輸層到物理層的內容,也即是TCP/IP五層模型的下四層;
對于一臺路由器,它實現了從網絡層到物理層,也即是TCP/IP五層模型的下三層;
對于一臺交換機,它實現了從數據鏈路層到物理層,也即是TCP/IP五層模型的下兩層;
注意我們這里說的是傳統意義上的交換機和路由器,也稱為二層交換機(工作在TCP/IP五層模型的下兩層)、三層路由器(工作在TCP/IP五層模型的下三層)。
三、封裝和分用
- 不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報(datagram),在鏈路層叫做幀(frame)。
- 應用層數據通過協議棧發到網絡上時,每層協議都要加上一個數據首(header),稱為封裝(Encapsulation)。
- 首部信息中包含了一些類似于首部有多長,載荷(payload)有多長,上層協議是什么等信息。
- 數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,根據首部中的 “上層協議字段” 將數據交給對應的上層協議處理。
3.1 封裝
例如,使用QQ給一個同學發送消息,用戶A在鍵盤上,輸入了一個"hello",按下發送鍵。
應用層(QQ應用程序)
根據用戶輸入的內容,QQ的代碼中就會根據程序猿所設計的應用層協議,把數據構造成一個應用層的協議報文(協議:是一種約定,報文:遵守了這個約定的一組數據)。注:QQ使用的應用層協議,是開發QQ的程序員自己設定的,假設現在的一種應用層協議格式為:
應用層協議就調用操作系統提供的API(稱為socket API),把應用層的數據,交給傳輸層(就已經進入操作系統內核了)。
傳輸層(操作系統內核)
根據剛才傳過來的數據,基于當前使用的傳輸層協議,來構造出一個傳輸層的協議報文。傳輸層最典型的協議為UDP,TCP。以TCP為例:
TCP的數據報=TCP報頭+數據載荷(Payload,也就是一個完整的應用層數據)。
TCP的報頭中有很多信息,其中最重要的,就是**“源端口"和“目的端口”**,類似于發件人電話和收件人電話。
可以簡單的把這個構造TCP報文的過程視為是一個字符串拼接(這里拼的是二進制數據)。接下來就會把這個傳輸層的數據報,交給網絡層。
網絡層(操作系統內核)
拿到了完整的傳輸層數據報,就會再根據當前使用的網絡層協議(例如IP),再次進行封裝,把TCP數據報構造成IР數據報,這里還是添加上一個協議報頭:
IP數據報=IР協議報頭+載荷(完整的TCP/UDP的數據報)
這個報頭中也有很多重要的信息,其中最重要的就是源IP和目的IP,類似于發件人的地址,和收件人的地址。緊接著,當前的網絡層協議,就會把這個IP數據報,交給數據鏈路層。
數據鏈路層(驅動程序)
在剛才的IP數據報基礎上,根據當前使用的數據鏈路層的協議,給構造成一個數據鏈路層的數據報.典型的數據鏈路層的協議,叫做“以太網”,就會構造成一個"以太網數據幀":
以太網數據幀=幀頭+IP數據報+幀尾
幀頭里面存儲的是最重要的信息:接下來要傳給的設備的地址是什么;
幀尾負責校驗和。
IP協議里面寫的地址,是起點和終點.(西安到安廣鎮)
以太網數據幀,幀頭里寫的地址,是接下來一個相鄰節點的地址.(西安和長春)
隨著數據往下一個設備轉發,幀頭中的地址,一直在時刻發生改變.
人在西安,這里的地址,寫的是西安/長春;
人在長春,這里的地址,寫的是長春/白城;
人在白城,這里的地址,寫的是白城/安廣鎮;
數據鏈路層,又會把上述這個數據交個物理層。
物理層(硬件設備)
物理層做的工作,就是根據剛才的以太網數據幀(其實就是一組0 1)把這里的0 1變成高低電平,通過網線傳輸出去.或者把這里的0 1變成高頻/低頻的電磁波,通過光纖/無線的方式傳播出去。
到了這一步,此時數據就已經離開了當前主機,前往了下一個設備.
下一個設備,可能是路由器/交換機/其他設備。
3.2 分用
分用就是封裝的逆過程:
封裝是從上往下,數據依次被加上了協議報頭(包快遞);
分用是從下往上,,數據一次被去掉了協議報頭(拆快遞);
物理層(硬件設備,網卡)
主機B的網卡感知到了一組高低電平,就會把這些電平翻譯成0 1的一串數據,然后這一串0 1就是一個完整的以太網數據幀.物理層就把這個數據交給了數據鏈路層。
數據鏈路層(驅動)
數據鏈路層負責對這個數據進行解析,去掉幀頭和幀尾,取出里面的IP數據報,然后交給網絡層協議。
網絡層(操作系統內核)
網絡層協議(IP協議)又會對這個數據進行解析,去掉IP協議報頭,取出里面的TCP數據報再交給傳輸層;
傳輸層(操作系統內核)
傳輸層協議(TCP協議)又會對這個數據進行解析,去掉TCP報頭,取出里面的TCP數據報,交給應用層.
應用層(應用程序QQ)
應用層就會調用socket API從內核中讀取到這個應用層數據報,再按照應用層協議進行解析,根據解析結果給顯示到窗口中。
上述討論的只是起點和終點的情況.A和B中間還有很多路由器和交換機呢?
無論網絡多么復雜,這里整體的傳輸過程都是類似的.只是在不停的重復封裝和分用的過程。
總結
以上是生活随笔為你收集整理的网络通信基础(局域网、广域网、IP地址、端口号、协议、封装、分用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2477):封装数据接口
- 下一篇: 2020年百度之星程序设计大赛-初赛二(