[TOC]
## 網絡棧
對于一個進程來說下述要素就構成了他發起和響應網絡請求的基本環境。
### 網卡(Network Interface)
### 回環設備(Loopback Device)
### 路由表(Routing Table)
### iptables規則
## 網絡組成
### **邊緣部分**:用戶直接使用的終端
### **核心部分**:路由器連接的網絡
### **名字(naming)、地址(addressing)、路由(routing)[2]**
名字指出我們所要尋找的那個資源,地址指出那個資源在何處,路由告訴我們如何到達該處。
### **通信方式**
網絡邊緣的端系統(end system)中運行的程序之間的通信方式通常為2大類:
* C/S(Client/Server)。Client:客戶,服務的請求方;Server:服務器,服務的提供方。B/S(Brower/Server)方式是特殊的C/S方式
* P2P(Peer to Peer),對等連接,進行平等、對等連接通信。運行P2P軟件的雙方都可以下載對方已經存儲在硬盤中的共享文檔。對等連接中的每個主機既是客戶同時又是服務器。
### **報文**
(message,header/data)的分組(packet)交換,路由器對分組進行存儲轉發。
### **網絡協議**
網絡協議(network protocol):為網絡中的數據交換而建立的規則、標準或約定,簡稱為協議。主要有以下三個要素:
* 語法,即數據與控制信息的結構或格式;
* 語義,即需要發出的是什么樣的控制信息,要完成什么樣的動作,要做出什么樣的動作響應。
* 同步,即事件(event)實現順序的詳細說明。
### **體系結構[1]**
體系結構(architecture):計算機網絡的各層及其協議的集合;是這個計算機網絡及其構件所應完成的功能的精確定義。
上述功能采用什么樣的硬件或軟件完成,則是如何實現(implementation)這個體系結構的問題。
體系結構是抽象的,而實現是具體的,是真正在運行的計算機硬件和軟件。

* 應用層(application layer)協議,直接為用戶的進程(process)提供服務,如HTTP、SMTP、FTP等。
* 運輸層(transport layer)協議,為2個主機中進程間的通信提供服務。
* TCP(Transmission Control Protocol):傳輸控制協議,面向連接的,數據傳輸的單位為報文段(segment),能提供可靠的交付/傳輸連接。
* UDP(User Datagram Protocol):用戶數據報協議,無連接的,數據傳輸的單位為用戶數據報,不保證可靠的交付/傳輸連接,只能提供“盡最大努力交付(best-effort delivery)”。
* 網絡層(network layer)協議,為網絡中不同的主機提供通信服務。現在的互聯網是由大量的異構(heterogeneous)網絡通過路由器(router)相互連接的。在TCP/IP體系中,網絡層協議的數據單元是`IP數據報`,就是使用無連接的IP(Internet Protocol)將運輸層產生的報文段或用戶數據報封裝成分組(packet)或包進行傳送。再通過不同的路由選擇協議進行分組的路由選擇。
* 數據鏈路層(data link layer)協議,常簡稱為鏈路層。在兩個相鄰節點間傳送數據時,鏈路層將IP層發來的IP數據報`組裝成幀(framing)`,在兩個相鄰節點間的鏈路上“透明”地傳送幀(frame)中的數據。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。典型的幀長是幾百byte到一千多byte。
* 物理層(physical layer)協議,透明地傳送bit流。考慮用多大的電壓代表“1”或“0”,接受方如何識別發送方所發送的bit;還有連接電纜的插頭的引腳數,各條引腳應如何連接。
通常各層所要完成的功能主要有(可以包括一種或多種):
1. 差錯控制,使得和網絡對等端的相應層次的通信更加可靠。
2. 流量控制,使得發送端的發送速率不要太快,要能讓接收端來得及接收處理。
3. 分段和重裝,發送端要將發送的數據塊分為更小的單元;接收端則將各個單元接收處理后還原。
4. 復用和分用,發送端幾個高層會話復用一條低層的連接;接收端則進行分用。
5. 連接建立和釋放,交換數據前先建立以邏輯連接。數據傳輸結束偶釋放連接。
### **層間關系[1]**

* 每一層使用不同的協議。
* 第n層的2個實體(n)(entity)之間通過協議(n)進行通信;
* 第n+1層的2個實體(n+1)(entity)之間通過協議(n+1)進行通信;
* 下層為上層提供服務。服務的提供通過`服務訪問點(SAP,Server Access Point)`實現。SAP是一個邏輯接口。
### **TCP/IP協議族[1]**

IP協議是核心。TCP/IP協議可以為各類應用提供服務(everything over IP),也允許IP協議在各類網絡上運行(IP over everything)。

服務器進程可以同時向多個甚至幾百個客戶進程提供服務。

### **ISP**
ISP(Internet Service Provider):因特網服務提供商。每個ISP都從因特網的管理機構或從一個更大的ISP申請到一批IP地址。ISP擁有與因特網通過高速通信專線相連的路由器。大的ISP還擁有屬于自己的通信線路,而小的ISP則向電信運營商租用通信線路。
用戶在接通ISP后,ISP就分配給該用戶一個臨時IP地址,通過該IP地址就可以使用因特網所提供的各種服務。
## 網絡性能指標
### **速率(bps)**
速率:連接計算機網絡上的主機在數字信道上傳送數據的速率,往往是指網絡的額定速率或標稱速率。單位:bps(b/s,bit per second)
### **帶寬(bandwidth)**
網絡帶寬:表示在單位時間內從網絡中某一點到另一點所能通過的“最高數據率”,單位b/s
### **吞吐量(throughput)**
吞吐量:表示在單位時間內通過某個網絡(或信道、接口)的數據量。
吞吐量受網絡的帶寬和網絡的額度速率的限制。
例如:100Mb/s的以太網,其典型的吞吐量可能也只有70Mb/s。
有時吞吐量還可以用每秒傳送的字節數或幀數來表示。
### **時延(delay/latency)**
總時延=發送時延+傳播時延+處理時延+排隊時延
1. 發送時延(transmission delay)
發送時延:是主機或路由器發送數據幀所需要的時間。與發送的數據幀長度成正比,與信道寬度(帶寬)成反比。
發送時延=數據幀長度(b)/信道寬度(b/s)
2. 傳播時延(propagation delay)
傳播時延:是電磁波在信道中傳播一定距離所需耗費的時間。
傳播時延=信道長度(m)/電磁波在信道上的傳播速率(m/s)
電磁波的傳播速率:
* 自由空間:3.0X10E8m/s
* 銅線電纜:2.3X10E8m/s
* 光纖:2.0X10E8m/s
例如:1000Km長的光纖線路產生的傳播時延大約為5ms。1Km長的同軸電纜線路產生的傳播時延約為5us
3. 處理時延
處理時延:主機或路由器在收到分組后進行處理所花費的時間。
一般處理過程有:
* 分析分組的首部
* 從分組中提取數據部分
* 進行差錯校驗
* 查找適當的路徑
4. 排隊時延
排隊時延:分組在傳輸過程中經過各個路由器時,在路由器的輸入隊列和輸出隊列中排隊等待轉發的時間。
排隊時延的長短往往取決于網絡當時的通信量。若網絡通信量很大時會發生隊列溢出,導致分組丟失,這時就相當于排隊時延為無窮大。
### **時延帶寬積**
時延帶寬積:以bit為單位的鏈路長度。
時延帶寬積=傳播時延X帶寬
可以將時延帶寬積看作是一個圓柱體(以傳播時延為長度,帶寬為截面積的圓柱體)的體積,這個體積表示了這條鏈路可容納的bit數量。
### **往返時間(RTT)**
往返時間:round-trip time,表示發送方從發送數據開始,到發送方收到來自接收方的確認,總共經歷的時間。
在互聯網中,往返時間還包括各個中間節點的處理時延、排隊時延以及轉發數據時的發送時延。
發送很長的數據塊時的往返時間要比發送很短數據塊的往返時間要多。
### **利用率**
1. 信道利用率
信道利用率:指出某信道被利用(有數據通過)的時間的百分比。
信道利用率并非越高越好。因為,根據排隊論的理論,當某信道的利用率增大時,該信道引起的時延也就迅速增加。
2. 網絡利用率
網絡利用率:全網絡的信道利用率的加權平均值。
>[danger] 信道或網絡的利用率過高會產生非常大的時延。
> 一般信道利用率不宜超過50%。如果超過了就要準備擴容,增大線路的帶寬。
**香農公式**
C=Wlog2(1+S/N) (以2為對數底數,單位b/s)
上述香農公式給出了信息傳輸速率的上限。
C:信道的信息傳輸速率的上限
W:通信信道的帶寬(Hz)
S/N:信噪比(信號的平均功率與噪聲的平均功率之比)
## 網絡性能調優
## IPv4地址
由因特網名字與號碼指派公司`ICANN` (Internet Corporation for Assigned Names and Numbers)進行分配。
(1)MAC地址:物理地址(48位),每臺機器出廠時規定的唯一地址。如果根據物理地址來判斷某臺主機,數據將十分龐大且不利于管理。
(2)IP地址:邏輯地址 (32位),可以由用戶根據規定進行更改和設置。
這兩類地址,需要解析協議 `ARP` 與逆地址解析協議`RARP`來進行翻譯。
由于通過各種物理網絡存在異構性,利用 IP 協議就可以使這些性能各異的網絡從用戶看起來好像是一個統一的、抽象的邏輯互連網絡。
### **子網分類**
IPv4地址是32位地址,以點分十進制表示,如172.16.0.0。地址格式為:
IP地址=網絡地址+主機地址
或:
IP地址=主機地址+子網地址+主機地址。
為了便于尋址以及層次化構造網絡,每個IP地址包括兩個標識碼(ID),即網絡ID和主機ID。同一個物理網絡上的所有主機都使用同一個網絡ID,網絡上的一個主機(包括網絡上工作站,服務器和路由器等)有一個主機ID與其對應。IP地址根據網絡ID的不同分為5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。

| 地址類型 / net-id | 可用地址范圍 | 網絡掩碼 | 網絡規模 | 說明 |私有地址|
| --- | --- | --- | --- | --- | --- |
| A類 / 0~127 | 1.0.0.0 ~ 126.255.255.255 | 255.0.0.0 | 大型網絡,具有大量主機(直接個人用戶)而局域網絡個數較少的大型網絡。例如IBM公司的網絡。<br> 可用的A類網絡有127個,每個網絡能容納1億多個主機。 | 其中`127.0.0.1`是一個特殊的IP地址(回環測試地址),表示主機本身,用于本地機器的測試。<br>0代表任何地址`0.0.0.0` | 10.0.0.0~10.255.255.255?|
| B類 / 128~191 | 128.1.0.0 ~ 191.254.0.0 | 255.255.0.0 | 一般的中型網絡。可用的B類網絡有16382個,每個網絡能容納6萬多個主機 。 | 其中`128.0.0.0`和`191.255.0.0`為保留IP地址 | 172.16.0.0~172.31.255.255 |
| C類 / 192~223 | 192.0.1.0 ~ 223.255.254.0 | 255.255.255.0 | 小型網絡,如一般的局域網和校園網,它可連接的主機數量是最少的,采用把所屬的用戶分為若干的網段進行管理。 | 其中`192.0.0.0`和`223.255.255.0`為保留IP | 192.168.0.0~192.168.255.255 |
| D類 / 224~239 | 224.0.0.0~239.255.255.255 | 無 | 多點廣播地址,用來一次尋址一組計算機,它標識共享同一協議的一組計算機。 | 無 | 無 |
| E類 / 240~255 | 240.0.0.0~255.255.255.254 | 無 | 保留給將來使用 | `255.255.255.255`用于廣播地址 | 無 |
**子網劃分**
(1)在IP 地址中增加了一個“子網號字段”,使兩級的 IP 地址變成為三級的 IP 地址。??
(2)從主機號借用若干個位作為子網號 subnet-id,而主機號 host-id 也就相應減少了若干個位。
(3)通過子網掩碼與IP地址相與,可以求得子網號。

:-: 三級IP地址1

:-: 三級IP地址2
### **CIDR** (Classless Inter-Domain Routing,無分類編址方法)
特點:
* 消除了傳統的 A 類、B 類和 C 類地址以及劃分子網的概念,因而可以更加有效地分配 IPv4 的地址空間。?
* 使用各種長度的“網絡前綴”(network-prefix)來代替分類地址中的網絡號和子網號。
* IP 地址從三級編址(使用子網掩碼)又回到了兩級編址。

:-: CIDR與點分十進制間的轉換
**示例1**:主機地址192.168.1.53/27,其所處網絡的各參數
1. 主機地址:192.168.1.53(十進制)
2. 子網掩碼:/27=11111111.11111111.11111111.11100000(二進制,網絡號向主機號借用3位)=255.255.255.224(十進制)。
3. 子網數:8個=2^3
4. 每個子網最多可以容納的主機數:2^5=32。所有可用的主機數由主機號所剩下的5位掩碼算出。本例中是8位主機號減網絡號借去的3位,所剩下5位。
5. 每個子網可用的主機數:2^5-2=30。
7. 主機所在子網地址:192.168.1.32
8. 主機所在子網廣播地址:192.168.1.63
* 第1子網
* IP地址范圍:192.168.1.0~192.168.1.31(32個)
* 可用主機地址:192.168.1.1~192.168.1.30(30個)
* 子網地址:192.168.1.0
* 廣播地址:192.168.1.31
* 第2子網
* IP地址范圍:192.168.1.32~192.168.1.63(32個)
* 可用主機地址:192.168.1.33~192.168.1.62(30個)
* 子網地址:192.168.1.32
* 廣播地址:192.168.1.63
其他子網依次類推
**示例2**:要建設可容納888個主機數的網絡:192.168.?.?/*????????
需要計算
1. 最大可容納主機數:2^10=1024
2^n – 2 >=888 -> n=10
2. 可用的主機數:2^10 – 2 =1022
3. 具體的子網掩碼
11111111.11111111.11111100.00000000(二進制,網絡號是22位)=255.255.252.0(十進制)。
正常的C網最大主機位數是256,所以1024/256=4,即4個正常的C網加起來就組成一個大子網;而網絡地址都是從0開始的,所以192.168.0.\*,192.168.1.\*,192.168.2.\*,192.168.3.\*每個網段最大容納主機數為256個,相加起來就等于1024。
4. 要建設的網絡地址:192.168.0.0
5. 要建設的網絡廣播地址:192.168.3.255
6. 可用的IP范圍為:192.168.0.1~192.168.3.254
7. 192.168.4.2/22 不能訪問192.168.1.53/22。因為192.168.4.0/22 與192.168.0.0/22 不在同一個網段里!
## 參考資源
[1] 計算機網絡/謝希仁編著. —5版. —北京:電子工業出版社,2008.1
[2] Shoch,J.F., "Inter-networking Naming, Addressin, and Routing," Compcon, pp.72-79, Fall 1978.
- 軟件工程
- 1. 基礎
- 計算
- 網絡
- 存儲
- 2. 開發/運維
- 微服務
- 容器化(Docker)
- 容器網絡
- 持續集成
- 持續發布
- 3. 架構
- 操作系統
- Linux服務器
- windows
- 內存
- 應用軟件
- 前端
- 后端
- 數據庫
- 協議
- 服務
- 分布式
- LNMP+Vue.js
- web網站架構技術
- 架構演化
- 架構分層
- Layer1. Frontend
- Layer2. Application
- Layer3. Service
- Layer4. Storage
- Layer5. Backend
- Layer6. Operation
- Layer7. Security
- Layer8. DataCenter
- 架構模式
- 架構要素
- 1. Performance
- 2. Availability
- 3. 可伸縮性
- 4. 可擴展性
- 5. 安全
- 6. 成本
- 4. 開發項目
- vue-php