目錄
1. 網絡互連
1.1 局域網LAN
1.2 廣域網WAN
2?網絡通信基礎
2.1 IP地址
2.2 端口號
2.3 網絡協議
3. 五元組
4. 協議分層
4.1 OSI 七層網絡模型
4.2?TCP/IP 五層(或四層)網絡模型
4.3 網絡設備所在分層(經典筆試題)
5. 網絡數據傳輸的基本流程
5.1 發送方的工作(封裝)
5.2 接收方的工作(分用)
1. 網絡互連
隨著時代的發展,越來越需要計算機之間互相通信,共享軟件和數據,即以多個計算機協同工作來完成業務,就有了網絡互連。
網絡互連:將多臺計算機連接在一起,完成數據共享。實現跨主機通信。咱們未來工作很可能是成為后端開發工程師,就是寫服務器.和客戶端通信,肯定會涉及到網絡。
數據共享本質是網絡數據傳輸,即計算機之間通過網絡來傳輸數據,也稱為網絡通信。根據網絡互連的規模不同,可以劃分為局域網和廣域網。
1.1 局域網LAN
局域網,即 Local Area Network,簡稱LAN。Local 即標識了局域網是本地,局部組建的一種私有網絡。(把幾個電腦,通過路由器,連接到一起)
局域網內的主機之間能方便的進行網絡通信,又稱為內網;局域網和局域網之間在沒有連接的情況下,是無法通信的。
局域網組建網絡的方式有很多種:
基于網線直連,基于集線器組建(一根網線,岔出來兩根),基于交換機組建(組建局域網,但是不能跨局域網),基于交換機和路由器組建。
路由器:wifi本質上就是個無線路由器,路由器本質上就是把兩個局域網給連起來.
現在也有帶路由功能(三層轉發)交換機也是很多很常見的,交換機和路由器之間的界限越來越模糊。
光貓算是路由器,路由器/交換機都是有電口(插網線的),也有光口的(插光纖的)。光纖、網線等都是傳輸信號的介質。
1.2 廣域網WAN
廣域網,即 Wide Area Network,簡稱WAN。
通過路由器,將多個局域網連接起來,在物理上組成很大范圍的網絡,就形成了廣域網。廣域網內部的局域網都屬于其子網。
如果有北、中、南等分公司,甚至海外分公司,把這些分公司以專線方式連接起來,即稱為“廣域 網”。
如果屬于全球化的公共型廣域網,則稱為互聯網(又稱公網,外網),屬于廣域網的一個子集。
有時在不嚴格的環境下說的廣域網,其實是指互聯網。
所謂 "局域網" 和 "廣域網" 只是一個相對的概念(沒有明確的界線)。比如,我們有 "天朝特色" 的廣域網,也可以看 做一個比較大的局域網。
2?網絡通信基礎
網絡互連的目的是進行網絡通信,也即是網絡數據傳輸,更具體一點,是網絡主機中的不同進程間,基于網絡傳輸數據。
那么,在組建的網絡中,如何判斷到底是從哪臺主機,將數據傳輸到那臺主機呢?這就需要使用IP地址來標識。
2.1 IP地址
IP地址主要用于標識網絡主機、其他網絡設備(如路由器)的網絡地址。簡單說,IP地址用于定位主機(設備)的網絡地址。描述了一個設備,在網絡上的地址。就像我們發送快遞一樣,需要知道對方的收貨地址,快遞員才能將包裹送到目的地。
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本機環回。
- 主要用于本機到本機的網絡通信(系統內部為了性能,不會走網絡的方式傳輸),對于開發網絡通信的程序(即網絡編程)而言,常見的開發方式都是本機到本機的網絡通信。
- 在Windows系統中,打開cmd窗口中,輸入ipconfig命令,可以顯示你設備的IP地址(IPv4或IPv6地址旁邊的行)。
2.2 端口號
端口號用于描述某個具體的應用程序。區分一個主機上不同的程序。端口號也是一個整數,2個字節,相對較小的數字。0~65535范圍的數字,在網絡通信中,進程可以通過綁定一個端口號,來發送及接收網絡數據。
同一個主機上兩個不同的進程(跑起來的應用程序),不能綁定同一個端口號。即一個端口號只能被一個程序綁定,但一個進程可以綁定多個端口號。
類似發送快遞時,不光需要指定收貨地址(IP地址),還需要指定收貨人(端口號)。在實際的通信過程中,IP和端口往往是"一對"。
2.3 網絡協議
協議,網絡協議的簡稱,網絡協議是網絡通信(即網絡數據傳輸)經過的所有網絡設備都必須共同遵從的一組約定、規則。
所謂的協議,就是通信雙方進行的一種約定,發送方約好了我發的數據是啥樣的,接收方按照這個固定的格式來進行解析。
協議(protocol)最終體現為在網絡上傳輸的數據包的格式。
為什么需要協議?就好比見網友,彼此協商胸口插支玫瑰花見面,這就是一種提前的約定,也可以稱之為協議。
計算機之間的傳輸媒介是光信號和電信號。通過 "頻率" 和 "強弱" 來表示 0 和 1 這樣的信息。要想傳遞各種不同的信息,就需要約定好雙方的數據格式。
- 計算機生產廠商有很多;
- 計算機操作系統,也有很多;
- 計算機網絡硬件設備,還是有很多;
- 如何讓這些不同廠商之間生產的計算機能夠相互順暢的通信? 就需要有人站出來,約定一個共同的標準,大家都來遵守,這就是 網絡協議;
知名協議的默認端口
系統端口號范圍為 0 ~ 65535,其中:0 ~ 1023 為知名端口號(0 一般不使用),這些端口預留給服務端程序綁定廣泛使用的應用層協議,如:
- 22端口:預留給SSH服務器綁定SSH協議
- 21端口:預留給FTP服務器綁定FTP協議
- 23端口:預留給Telnet服務器綁定Telnet協議
- 80端口:預留給HTTP服務器綁定HTTP協議
- 443端口:預留給HTTPS服務器綁定HTTPS協議
3. 五元組
- 源IP:標識源主機
- 源端口號:標識源主機中該次通信發送數據的進程
- 目的IP:標識目的主機
- 目的端口號:標識目的主機中該次通信接收數據的進程
- 協議類型:標識發送進程和接收進程雙方約定的數據格式
五元組在網絡通信中的作用,類似于發送快遞:
可以在cmd中,輸入 netstat -ano 查看網絡數據傳輸中的五元組信息:
如果需要過濾(一般是通過端口號或進程PID過濾),可以使用 netstat -ano | findstr 過濾字符串
4. 協議分層
網絡協議整體的規模很大,整體實現就很復雜,更好的解決方式就是把一個大的復雜的協議,拆成多個小的更簡單的協議,每個協議負責一部分工作(負責一部分功能,化繁為簡)。
但某些小協議之間,起到的功能和作用是類似,針對這些按照協議的功能/作用,再進行"分類"("分層")。這就好比代碼拆分出很多類,有些類功能差不多,就可以放到同一個包里。構成了“協議棧”
分類并約定了不同層次之間的調用關系:"上層協議,調用下層協議","下層協議,給上層協議提供支持"。
協議分層優點:
- 每層協議不需要理解其它層協議的細節,降低了學習和維護成本(更好的做到了封裝)
- 把對應層的協議替換成其他協議不會對整體產生影響(更好的解耦合)
當前互聯網世界,協議分層有兩種風格:OSI 七層網絡模型(沒有被實現),TCP/IP 五層(或四層)網絡模型。
4.1 OSI 七層網絡模型
OSI 七層模型既復雜又不實用,存在于教科書中,并沒有被實現出來。
4.2?TCP/IP 五層(或四層)網絡模型
TCP/IP 是 OSI 簡化的實現方式。其中物理層是屬于純硬件層的,與程序員關系不大,所以也可以認為是 TCP/IP 是四層網絡模型。
TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇。
簡單版本理解:
- 應用層:應用程序相關的,描述了傳輸的數據,用戶要怎么使用等。
- 傳輸層:只關注數據傳輸起點和終點,不關注過程,端到端之間的傳輸。
- 網絡層:主要負責數據傳輸路徑的選擇,走哪條路劃算。路徑規劃
- 數據鏈層:主要負責相鄰兩個節點(主機、路由器等設備)之間,具體是怎么傳輸的。比如是通過網線、光纖、還是wifi等方式。
- 物理層:約定網絡通信中基礎硬件設備是什么樣的規格的。比如像通信使用的網線,網口等設備是什么樣的規格的。
TCP/IP通訊協議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。即上層協議要調用下層協議,下層協議給上層協議提供服務。越往下的,越接近硬件設備越往上,就越接近用戶。
詳細版本解讀:
- 應用層:負責應用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠 程訪問協議(Telnet)等。我們的網絡編程主要就是針對應用層。
- 傳輸層:負責兩臺主機之間的數據傳輸。如傳輸控制協議 (TCP),能夠確保數據可靠的從源主機發 送到目標主機。
- 網絡層:負責地址管理和路由選擇。例如在IP協議中,通過IP地址來標識一臺主機,并通過路由表 的方式規劃出兩臺主機之間的數據傳輸的線路(路由)。路由器(Router)工作在網路層。
- 數據鏈路層:負責設備之間的數據幀的傳送和識別。例如網卡設備的驅動、幀同步(就是說從網線 上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、數據差錯校驗等工作。有以太網、令牌環網,無線LAN等標準。交換機(Switch)工作在數據鏈路層。
- 物理層:負責光/電信號的傳遞方式。比如現在以太網通用的網線(雙絞 線)、早期以太網采用的的 同軸電纜(現在主要用于有線電視)、光纖,現在的wifi無線網使用電磁波等都屬于物理層的概念。 物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)工作在物理層。
- 整個的網絡協議中,協議分成了很多層。
- 上層協議要調用下層協議(上層協議把數據交給下層,繼續封裝)。下層協議要給上層協議提供支持(下層協議解析好數據,交給上層)。
- 這里的這幾層協議之間是有明確的層級關系的,只有相鄰的兩層之間才能進行交互(不能跨層交互)。
- 應用層是應用程序實現的(程序猿自己寫的代碼相關的),所以直接和咱們打交道的其實是應用層。下面四層都是現成的,只是需要知道是怎么工作的就行了,不需要你實現一個傳輸層協議,(但是經常會涉及到,實現一個應用層協議),后續重點講解應用層和傳輸層。
4.3 網絡設備所在分層(經典筆試題)
- 對于一臺主機,它的操作系統內核實現了從傳輸層到物理層的內容,也即是TCP/IP五層模型的下四層;整個一臺主機,五層都會涉及到。
- 對于一臺路由器,它實現了從網絡層到物理層,也即是TCP/IP五層模型的下三層;
- 對于一臺交換機,它實現了從數據鏈路層到物理層,也即是TCP/IP五層模型的下兩層;
- 對于集線器,它只實現了物理層;
交換機的作用,是針對路由器的端口進行擴展。路由器上的端口可能是有限。
集線器的作用,是在物理層,把網線一分為二。兩條線是沖突的,同一時刻只能一個方向傳輸數據。(不常用)
注意這里說的是傳統意義上的交換機和路由器,也稱為二層交換機(工作在TCP/IP五層模型的下兩層)、三層路由器(工作在TCP/IP五層模型的下三層)。
隨著現在網絡設備技術的不斷發展,也出現了很多3層或4層交換機,4層路由器。以下說的網絡設備都是傳統意義上的交換機和路由器。
5. 網絡數據傳輸的基本流程
站在協議分層的背景下來理解。以QQ為例,用戶A給用戶B發送一個hello。
此處網絡數據傳輸的單位我們都以報來命名,不做區分。
5.1 發送方的工作(封裝)
應用層
用戶A在輸入框中輸入hello字符串,qq應用程序就把 字符串,給構造成一個 應用層數據報。這里我們不清楚qq的 應用層協議具體的數據格式,每個應用程序都不一定一樣(自定義的),應用層協議,往往是根據具體的場景,具體的需要,由程序員自主決定的。假設應用層協議的格式為:發送方qq號;發送時間;接收方qq號;消息內容
所謂的"應用層數據報"本質上就是一個遵守了約定格式的字符串(字符串拼接)。程序要調用操作系統的api,把這個應用層數據,交給傳輸層。
傳輸層
進入系統內核了,在傳輸層中要把上述應用層數據,構造成 傳輸層的數據報。傳輸層使用到最知名的協議UDP或TCP。此處以UDP協議為例,就需要構造出 UDP數據報(在應用層數據基礎上,加個UDP報頭,“字符串拼接”)所謂的"報頭"就是一個"標簽",通過標簽表示當前要把這個消息怎樣進行傳輸。 傳輸層的協議報頭包含了源端口和目的端口。
UDP報頭是一個特定格式的字符串(二進制數據),此處就像字符串拼接一樣,把報頭和后面的數據(載荷(payload))拼到一起。UDP數據報 = UDP報頭 + 數據載荷(Payload,也就是完整的應用層數據)然后傳輸層就把這個UDP數據報,交給網絡層。
網絡層
傳輸層使用到最知名的協議IР協議。基于上述數據,打包成一個 IP數據報。
IP報頭也是一個字符串,包含了另外一組信息(最核心的信息, 源IP和目的IP)然后網絡層數據報準備好,還需要進一步的交給數據鏈路層。
數據鏈路層
數據鏈路層最知名的協議,叫做"以太網”,基于上述數據,還要打包成一個 "以太網數據幀"以太網幀頭中包含最重要的信息是,源mac地址和目的mac地址mac地址,也是用來描述一個設備在網絡上的地址的,主要關心的是兩個相鄰節點的數據傳輸。
然后數據鏈路層以太網數據幀準備好,繼續往下傳輸,交給物理層。
物理層
把上述數據,轉換成二進制的數據(一串0101),通過電信號/光信號進行傳輸,此時就真正的把數據給發送出去了。
上述過程,從應用層到物理層,層層加碼。這個過程稱為"封裝”(這個封裝不是面向對象的封裝)
數據發送出去之后,就會經過一系列的交換機和路由器進行轉發,A和B一般來說不是直接網線連接的,中間還要經過很多的交換機/路由器設備進行轉發。
當數據到達B這邊之后,B就要針對上述數據進行"分用"(針對上述數據報進行層層的解析)。
5.2 接收方的工作(分用)
此處只考慮B的接收(省略中間的轉發過程)
物理層
網卡接收到的是光信號和電信號,是在物理層。
把這個光電信號轉換回二進制的數據。轉換回的這個數據,其實是一個以太網數據幀。把這個數據交給數據鏈路層中解析。
數據鏈路層
數據鏈路層以太網協議對這個數據進行解析,去掉幀頭和幀尾,取出載荷(IP數據報),交給上層網絡層。
以太網數據幀幀頭里有記錄,這個載荷是不是一個IP數據報。
網絡層
網絡層(IP協議)對這個數據進行解析,解析出IP報頭,取出載荷(UDP數據報),交給上層傳輸層。
IP報頭里會記錄,載荷是UDP還是 TCP協議的數據報。
傳輸層
傳輸層(UDP協議)再對這個數據進行解析,解析出UDP報頭,取出載荷(應用層數據報),交給上層對應的應用層程序。
UDP報頭里有一個重要的字段"目的端口”,目的端口是一個具體的應用程序關聯在一起的,因此就可以根據這個端口把數據交給應用程序。
應用層
應用層qq應用程序,就會針對應用層協議也進行解析,顯示到界面上。
上述從下到上層層解析,這個過程稱為"分用"。
數據報在網絡中還會經歷一定的轉發過程。物理層傳輸給下一個節點:
- 如果是交換機的話:交換機先分用數據解析到數據鏈路層,更新以太網數據幀的幀頭里的地址,然后再重新封裝并進行轉發。
- 如果是路由器的話:路由器先分用數據到網絡層,拿到IP地址后,進行下一階段的路徑規劃,然后重新往下封裝并進行轉發。
好啦Y(^o^)Y,本節內容到此就結束了。下一篇內容一定會火速更新!!!
后續還會持續更新網絡通信方面的內容,還請大家多多關注本博主,第一時間獲取新鮮的知識。
如果覺得文章不錯,還請一鍵三連喲!