[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)这个体系结构的问题。
体系结构是抽象的,而实现是具体的,是真正在运行的计算机硬件和软件。
![计算机网络体系结构](https://box.kancloud.cn/9456dc97dba5f33bf1ede6c308a2255f_2820x1376.jpg)
* 应用层(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]**
![层间关系](https://box.kancloud.cn/f1f740cacd464d3a6fb67c199589ca17_2956x1060.jpg)
* 每一层使用不同的协议。
* 第n层的2个实体(n)(entity)之间通过协议(n)进行通信;
* 第n+1层的2个实体(n+1)(entity)之间通过协议(n+1)进行通信;
* 下层为上层提供服务。服务的提供通过`服务访问点(SAP,Server Access Point)`实现。SAP是一个逻辑接口。
### **TCP/IP协议族[1]**
![TCP/IP协议族](https://box.kancloud.cn/f3964cde883ef1eb357ba68f66f10f2c_2500x1288.jpg)
IP协议是核心。TCP/IP协议可以为各类应用提供服务(everything over IP),也允许IP协议在各类网络上运行(IP over everything)。
![客户进程与服务器进程间通信](https://box.kancloud.cn/3dc4c5309e6dbe4f8e30aff400a5ca74_2512x1636.jpg)
服务器进程可以同时向多个甚至几百个客户进程提供服务。
![局域网中主机的IP地址与MAC地址](https://box.kancloud.cn/463fc3e4e0e80961f34b975cfb6c34c1_1860x1152.jpg)
### **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类地址。
![](https://box.kancloud.cn/fffb7e7f5af064fbfaadf6b0fa88c55f_471x280.jpg)
| 地址类型 / 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地址相与,可以求得子网号。
![](https://box.kancloud.cn/e88f6a845655c9f93832d18c3418b3e0_480x262.jpg)
:-: 三级IP地址1
![](https://box.kancloud.cn/abd7ff6458255db301ca6de9e834a686_480x422.jpg)
:-: 三级IP地址2
### **CIDR** (Classless Inter-Domain Routing,无分类编址方法)
特点:
* 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
* 使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
* IP 地址从三级编址(使用子网掩码)又回到了两级编址。
![](https://box.kancloud.cn/77e0a0aa1f932e448aca77f268a2c427_480x288.jpg)
:-: 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