天天看點

開發人員必備的網絡知識(非原創)

文章大綱

一、網絡類型介紹

二、網絡七層協定詳細介紹

三、其他介紹

四、參考文章

開發人員必備的網絡知識(非原創)

網際網路

網際網路是當今世界上最大的網絡, 是”網絡的網絡”. 即網際網路是所有網絡互連起來的一個巨型網絡.

網際網路的組成 :

(1)邊緣部分 : 主機

(2)核心部分 : 大量網絡和連接配接這些網絡的路由器(此路由器不是我們家用的路由器)

以太網

以太網是現在最常用的區域網路通信協定, 以太網上傳輸的是MAC幀. 由于以太網同一時間隻允許一台計算機發送資料, 是以必須有一套檢測機制, 那就是CSMA/CD協定 :

多點接入 : 多台計算機以多點接入的方式連接配接在一根總線上

載波監聽 : 不管是否正在發送, 每個站都必須不停地檢測信道

碰撞檢測 : 邊發送邊監聽

網絡規模

區域網路:一個私有網絡,一般為一個公司,小區

城域網:覆寫一個城市的範圍

廣域網:全國、全球

開放系統互連基本參考模型, 隻要遵守這個OSI标準, 任何兩個系統都能進行通信. OSI是七層協定體系結構, 而TCP/IP是一個四層協定體系結構, 于是我們采取折中的方法, 學習計算機網絡原理的時候往往用的是五層協定的體系結構 : 實體層, 資料鍊路層, 網絡層, 傳輸層和應用層

開發人員必備的網絡知識(非原創)

1. 實體層

計算機的世界裡隻有0和1, 正如你現在所看這篇文章的文字, 存儲在計算機中也是一大串0和1的組合. 但是這些數字不能在真實的實體媒體中傳輸的, 而需要把它轉換為光信号或者電信号, 是以這一層負責将這些比特流(0101)與光電信号進行轉換.

如果沒有實體層, 那麼也就不存在網際網路, 不存在資料的共享, 因為資料無法在網絡中流動.

2. 資料鍊路層

資料在這一層不再是以比特流的形式傳輸, 而是分割成一個一個的幀再進行傳輸.

MAC位址

又稱計算機的硬體位址, 被固化在擴充卡(網卡)ROM上的占48位的位址. MAC位址可以用來唯一差別一台計算機, 因為它在全球是獨一無二的

分組交換

由于資料在這次曾要被分割成一個一個的幀, 由于不同的鍊路規定了不同的最大幀長, 即MTU(最大傳輸單元), 凡是超出這個MTU的幀都必須被分塊. 例如一台貨車一次能運輸5噸的貨物, 而有條公路限載重2噸, 那麼你隻好分3次運輸.

網橋

網橋工作在資料鍊路層, 根據MAC幀的目的位址對收到的幀進行轉發和過濾.

以太網交換機

實際上就是一個多接口的網橋, 以太網交換機的每個接口都直接與一個單個主機或另一個集線器相連, 可以很容易實作VLAN(虛拟區域網路)

以太網的MAC幀

MAC幀的格式為 :

開發人員必備的網絡知識(非原創)

目的位址 : 接收方48位的MAC位址

源位址 : 發送方48位的MAC位址

類型字段 : 标志上一層使用的是什麼協定, 0×0800為IP資料報

3. 網絡層

如果隻有資料鍊路層沒有網絡層, 資料就隻能在同一條鍊路上傳輸, 不能跨鍊路傳輸. 有了網絡層, 資料便能跨域不同的資料鍊路傳輸.

IP位址

IP位址又稱為軟體位址, 存儲在計算機的存儲器上, IPv4位址為32位, IPv6位址為128位

IP位址和MAC位址

網絡層以上使用IP位址, 資料鍊路層以下使用MAC位址

IP位址是邏輯位址, MAC位址是實體位址

IP分組中首部的源位址和目的位址在傳輸中不會改變, MAC幀中首部的源位址和目的位址每到一個路由器會改變一次

IP位址分類

IP位址 = {

A類位址 : 0.0.0.0 ~ 127.0.0.0

B類位址 : 128.0.0.0 ~ 191.255.0.0

C類位址 : 192.0.0.0 ~ 223.255.255.0

劃分子網之後的IP位址

例如某機關擁有一個B類IP位址, 145.13.0.0, 但凡目的位址為145.13.x.x的資料報都會被送到這個網絡上的路由器R. 内部劃分子網後變成 : 145.13.3.0, 145.13.7.0, 145.13.21.0. 但是對外仍表現為一個網絡, 即145.13.0.0. 這樣路由器R收到封包後, 再根據目的位址發到對應的子網上.

子網路遮罩

一般由一串1和一串0組成, 不管網絡有沒有劃分子網, 将子網路遮罩和IP位址做按位與運算即可得出網絡位址.

所有的網絡都必須使用子網路遮罩, 同時在路由表中必須有子網路遮罩這一欄. 如果一個網絡不劃分子網, 那麼該網絡的子網路遮罩就是預設的子網路遮罩.

A類位址的預設子網路遮罩為255.0.0.0

B類位址的預設子網路遮罩為255.255.0.0

C類位址的預設子網路遮罩為255.255.255.0

盡管劃分子網增加了靈活性, 但是卻減少了能夠連接配接在網絡上的主機總數.

構成超網的IP位址

使用網絡字首, 無分類域間路由選擇CIDR

例如, 128.14.35.7/20, 意思是前20位為網絡字首, 後12位為主機号. 另外, CIDR把網絡字首相同的連續的IP位址組成一個”CIDR位址塊”

位址掩碼 : CIDR使用32位的位址掩碼, 類似于子網路遮罩.

IP資料報

在網絡層, 資料是以IP資料報(IP分組)的形式傳輸的

開發人員必備的網絡知識(非原創)

IP資料報的格式

首部前20位元組為固定長度, 是所有IP資料報必備的. 後4位元組是可選字段, 其長度可變.

IP資料報首部固定的字段分析 :

版本号 : IP協定的版本, IPv4或IPv6

首部長度 : 記錄了首部的長度, 最大為1111, 即15個32位字長, 即60位元組. 當首部長度不是4位元組的整數倍時, 需要使用最後的填充字段加以填充.

服務類型 : 一般無用

總長度 : 指首部和資料之和的長度. 最大為216-1 = 65535位元組. 但是由于資料鍊路層規定每一幀的資料長度都有最大長度MTU, 以太網規定MTU為1500位元組, 是以超出範圍的資料報就必須進行分片處理

辨別 : 每産生一個IP資料報, 計數器就+1, 并将此值指派給辨別字段. 再以後需要分片的資料報中, 辨別相同說明是同一個資料報

标志 : 占3位, 最低位記為MF(More Fragment). MF = 1說明還有分片; MF = 0說明這已經是最後一個分片. 中間一位記為DF(Don’t Fragment), 意思是不能分片. 隻有當DF = 0時才允許分片.

段位移 : 又稱片位移, 相對于使用者資料字段的起點, 該片從何處開始. 片位移以8個位元組為偏移機關. 是以, 每個分片的長度一定是8位元組的整數倍.

生存時間 : TTL(Time To Live). 資料報能在網際網路中經過路由器的最大次數為255次, 每經過一個路由器則TTL – 1, 為0時丢棄該封包.

協定 : 記錄該封包所攜帶的資料是使用何種協定.

首部檢驗和 : 隻檢驗資料報的首部, 不檢驗資料部分. 不為0則丢棄封包.

源位址和目的位址 : 不解釋

IP層轉發分組的流程

每個路由器内部都維護一個路由表, 路由表包含以下内容(目的網絡位址, 下一跳位址).

使用子網時分組轉發時, 路由表必須包含以下三項内容: 目的網絡位址, 子網路遮罩和下一跳位址.

特定主機路由 : 對特定的目的位址指明一個路由

預設路由 : 不知道分組該發給哪個路由器時就發給預設路由. 當一個網絡隻有很少的對外連接配接時使用預設路由非常合适.

路由器的分組轉發算法

從資料報中拿到目的IP位址D, 得出目的網絡位址N

若N就是與此路由器直接相連的某個網絡位址, 則直接傳遞(不需要再交給其他路由器轉發, 直接找到該目的主機傳遞), 否則 -> (3)

若路由表中有目的位址為D的特定主機路由, 則把資料報傳給該路由器, 否則 -> (4)

若路由表中有到達網絡N的路由, 則把資料報傳給該路由器, 否則 -> (5)

若路由表中有預設路由, 則交給該路由器, 否則 -> (6)

報告轉發分組出錯

虛拟專用網VPN

網際網路中的所有路由器對該目的位址是專用位址的資料報一律不轉發, 下面有3種專用位址(虛拟IP位址)

10.0.0.0 ~ 10.255.255.255

172.16.0.0 ~ 172.31.255.255

192.168.0.0 ~ 192.168.255.255

假設現在公司A有一個部門在廣州和另一個在上海, 而他們在當地都有自己的專用網. 那麼怎麼将這兩個專用網連接配接起來呢?

租用電信的通信線路為本機構專用, 但是太貴了

利用公用的網際網路當做通信載體, 這就是虛拟專用網VPN

網絡位址轉換NAT

多個專用網内部的主機公用一個NAT路由器的IP位址, 在主機發送和接收IP資料報時必須先通過NAT路由器進行網絡位址轉換.

開發人員必備的網絡知識(非原創)

NAT路由器的工作原理

不僅如此, NAT還能使用端口号, 搖身一變成為網絡位址和端口轉換NAPT

ARP協定

ARP是解決同一個區域網路上的主機或路由器的IP位址和MAC位址的映射問題, 即 IP位址 -> ARP -> MAC位址

每一個主機都有一個ARP高速緩存, 裡面有本區域網路上的各主機和路由器的IP位址到MAC位址的映射表. 以下是ARP的工作原理 :

開發人員必備的網絡知識(非原創)

4. 傳輸層

這一層是重中之重, 因為資料鍊路層, 網絡層這兩層的資料傳輸都是不可靠的, 盡最大能力傳遞的. 什麼意思的? 就是它們不負責送出給你的就是正确的資料. 然而這一層的TCP協定将要提供可靠傳輸

這一層主要重點是兩個協定 : UDP 和 TCP

使用者資料報協定UDP

UDP主要特點 :

無連接配接

盡最大努力傳遞

面向封包 : 應用層交下來的封包直接加上UDP頭部就往IP層扔, 不合并也不拆分

沒有擁塞控制

支援一對一, 一對多, 多對一和多對多的互動通信

首部開銷小, 隻有8個位元組

UDP首部

開發人員必備的網絡知識(非原創)

UDP首部格式

源端口 : 源端口号. 在需要對方回信時選用, 不需要則全0

目的端口 : 目的端口号. 這在終點傳遞封包時必須要使用到

長度 : UDP資料報的長度, 最小值為8(僅有首部)

檢驗和 : 與IP資料報隻檢驗首部不同的是, UDP需要把首部和資料部分一起檢驗

傳輸控制協定TCP

TCP主要特點 :

面向連接配接的運輸層協定

每一條TCP連接配接隻能有2個端點, TCP是點對點的

提供可靠傳遞

全雙工通信

面向位元組流

TCP的工作流程

開發人員必備的網絡知識(非原創)

TCP三向交握

TCP三向交握建立連接配接和四次揮手斷開連接配接是面試愛問的知識點.

開發人員必備的網絡知識(非原創)

Q : 為什麼要三次握手, 兩次不可以嗎?

A : 試想一下, A第一次發送請求連接配接, 但是在網絡某節點滞留了, A逾時重傳, 然後這一次一切正常, A跟B就愉快地進行資料傳輸了. 等到連接配接釋放了以後, 那個迷失了的連接配接請求突然到了B那, 如果是兩次握手的話, B發送确認, 它們就算是建立起了連接配接了. 事實上A并不會理會這個确認, 因為我壓根沒有要傳資料啊. 但是B卻傻傻地以為有資料要來, 苦苦等待. 結果就是造成資源的浪費.

更加接地氣的解釋就是 : A打電話給B

第一次握手 : 你好, 我是A, 你能聽到我說話嗎

第二次握手 : 聽到了, 我是B, 你能聽到我說話嗎

第三次握手 : 聽到了, 我們可以開始聊天了

三次握手其實就是為了檢測雙方的發送和接收能力是否正常, 你說呢?

TCP四次揮手

開發人員必備的網絡知識(非原創)

Q : 為什麼要四次揮手, 而不是兩次, 三次?

A :

首先, 由于TCP的全雙工通信, 雙方都能作為資料發送方. A想要關閉連接配接, 必須要等資料都發送完畢, 才發送FIN給B. (此時A處于半關閉狀态)

然後, B發送确認ACK, 并且B此時如果要發送資料, 就發送(例如做一些釋放前的處理)

再者, B發送完資料之後, 發送FIN給A. (此時B處于半關閉狀态)

然後, A發送ACK, 進入TIME-WAIT狀态

最後, 經過2MSL時間後沒有收到B傳來的封包, 則确定B收到了ACK了. (此時A, B才算是處于完全關閉狀态)

PS : 仔細分析以上步驟就知道為什麼不能少于四次揮手了.

Q : 為什麼要等待2MSL(Maximum Segment Lifetime)時間, 才從TIME_WAIT到CLOSED?

A : 在Client發送出最後的ACK回複,但該ACK可能丢失。Server如果沒有收到ACK,将不斷重複發送FIN片段。是以Client不能立即關閉,它必須确認Server接收到了該ACK。Client會在發送出ACK之後進入到TIME_WAIT狀态。Client會設定一個計時器,等待2MSL的時間。如果在該時間内再次收到FIN,那麼Client會重發ACK并再次等待2MSL。MSL指一個片段在網絡中最大的存活時間,2MSL就是一個發送和一個回複所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那麼Client推斷ACK已經被成功接收,則結束TCP連接配接。

更加接地氣的解釋 :

第一次揮手 : A告訴B, 我沒資料發了, 準備關閉連接配接了, 你要發送資料嗎

第二次揮手 : B發送最後的資料

第三次揮手 : B告訴A, 我也要關閉連接配接了

第四次揮手 : A告訴B你可以關閉了, 我這邊也關閉了

5. 應用層

應用層協定最著名的就是HTTP, FTP了, 還有一個重要的DNS

域名系統(DNS, Domain Name System)

DNS 能将域名(例如, www.jianshu.com)解析成IP位址.

域名伺服器分類

根域名伺服器 : 最高層次的域名伺服器

頂級域名伺服器 : 如其名

權限域名伺服器 : 負責一個區的應伺服器

本地域名伺服器 : 主機發送DNS查詢請求就是發給它

DNS查詢

開發人員必備的網絡知識(非原創)

(1)主機向本地域名伺服器的查詢一般都是采用遞歸查詢

(2)本地域名伺服器向根域名伺服器的查詢通常是采用疊代查詢

遞歸查詢 : B問A廣州怎麼去, A不知道, A就問C, C不知道就問D...直到知道了再一層一層轉告直到A告訴B. 疊代查詢 : B問A廣州怎麼去, A不知道, A就告訴你可以去問C, 然後B就去問C, C不知道, C就告訴你可以去問D, 然後B就去問D...直到B知道為止

DNS查詢例子

域名為x.tom.com的主機想知道y.jerry.com的IP位址

主機x.tom.com先向本地域名伺服器dns.tom.com進行遞歸查詢

本地域名伺服器采用疊代查詢. 它先問一個根域名伺服器

根域名伺服器告訴它, 你去問頂級域名伺服器dns.com

本地域名伺服器問頂級域名伺服器dns.com

頂級域名伺服器告訴它, 你去問權限域名伺服器dns.jerry.com

本地域名伺服器問權限域名伺服器dns.jerry.com

權限域名伺服器dns.jerry.com告訴它所查詢的主機的IP位址

本地域名伺服器把查詢結果告訴主機x.tom.com

PS : 該查詢使用UDP, 并且為了提高DNS查詢效率, 每個域名伺服器都使用高速緩存.

1. 什麼是交換機?

作用:實作多台主機之間進行通訊。

原理:交換機采用廣播方式進行通訊。

在交換網絡中,需要給每台PC機一個身份表示資訊,便于在交換網絡中互相通訊,

這個身份表示資訊就稱為MAC位址,并且MAC位址具有全球唯一行,又稱為實體位址

MAC位址:采用十六進制方式顯示,共由48位二進制組成

網絡中資料傳輸,是有去必有回

開發人員必備的網絡知識(非原創)

2. 什麼是路由器?

實作不同區域網路之間主機裝置通訊,實作不同網段之間的主機通訊

可以隔離廣播風暴,路由器進行資料通訊時,隻識别IP位址,不識别MAC位址

路由器轉發資料資訊時,需要檢視路由表。

IP位址=區域網路網絡位+主機位

route -n :檢視centos系統路由表資訊指令

開發人員必備的網絡知識(非原創)

3. 如何實作資料通訊?

(1)要有傳輸媒體:網線、光纖、wifi、藍牙

(2)網卡硬體裝置

(3)調制過程:利用網卡将二進制數字資訊,轉換為相應的高低電壓,程序傳輸發送,

(4)解調過程:在利用網卡将高低電壓轉換為相應的二進制數,最終識别出傳輸的資料資訊

網絡資料傳輸過程:

繼續閱讀