计算机网络概述
发展简史
互联网发展历史
- 单个网络 ARPANET:交换机——计算机
- 三级结构互联网:主干网——地区网——校园网
- 多层次 ISP (网络服务提供商)互联网:主干 ISP——地区 ISP——公司/校园/家庭
中国互联网发展简史
- 1980 年开始互联网实验
- 1989 年第一个公共网络建立运行
- 1994 年接入国际互联网
层次结构
层次结构设计的基本原则
- 各层之间是相互独立的
- 每一层要有足够的灵活性
- 各层之间完全解耦
OSI 七层模型
开放式系统互联模型(英语:Open System Interconnection Model,缩写:OSI;简称为OSI模型)是一种概念模型,由国际标准化组织提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。
- 应用层:为计算机用户提供接口和服务
- 表示层:数据处理(编码解码、加密解密等)
- 会话层:管理(建立、维护、重连)通讯会话
- 传输层:管理端到端的通信连接
- 网络层:数据路由(决定数据在网络中的路径)
- 数据链路层:管理相邻节点之间的数据通信
- 物理层:数据通讯的光电物理特性
TCP/IP 四层模型
互联网协议套件(英语:Internet Protocol Suite,缩写IPS)是网络通信模型,以及整个网络传输协议家族,为网际网络的基础通信架构。它常通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。
- 应用层:HTTP、FTP、SMTP、POP3
- 传输层:TCP、UDP
- 网络层:IP、ICMP
- 网络接口层:Ethernet、ARP、RARP
性能指标
速率
网络常用速率单位为 Mbps,bps=bit/s。
时延
总时延=发送时延+排队时延+传播时延+处理时延。 $$ 发送时延=\frac{数据长度(bit)}{发送速率(bit/s)} $$
$$ 传播时延=\frac{传输路径距离}{传播速率(bit/s)} $$
RTT
RTT(Route-Trip Time)是评估网络质量的一项重要指标。表示数据报文在端到端通信中来回一次的时间。通常使用ping
命令查看 RTT。
物理层
物理层的作用
- 为数据端设备提供传送数据通路。
- 传输比特流数据。
物理层设备
- 双绞线
- 同轴电缆
- 光纤
信道
信道是往一个方向传送信息的媒体,一条通信电路包含一个接收信道和一个发送信道。
- 单工信道:只能一个方向通信,有线电视、无线电收音机。
- 半双工信道:双方都可以发送和接受信息,但不能同时发送和同时接收。
- 全双工信道:双方都可以同时发送和接受信息。
分用——复用
- 频分复用
- 时分复用
- 波分复用
- 码分复用
数据链路层
主要功能
封装成帧
“帧”是数据链路层数据的基本单位,发送端在网络层的一段数据前后添加特定标记形成“帧”,接收端根据前后特定标记识别出“帧”。
透明传输
差错检测
物理层只管传输比特流,无法控制是否出错,数据链路层负责“差错检测”。主要有奇偶校验码和循环冗余校验码 CRC 两种方式。
奇偶校验码
奇偶校验位(英语:Parity bit)或校验比特(check bit)是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。
如果传输过程中包括校验位在内的奇数个数据位发生改变,那么奇偶校验位将出错表示传输过程有错误发生。因此,奇偶校验位是一种错误检测码,但是由于没有办法确定哪一位出错,所以它不能进行错误校正。发生错误时必须扔掉全部的数据,然后从头开始传输数据。
循环冗余校验码 CRC
循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。
计算过程:
- 选定一个用于校验的多项式G(x),并在数据尾部添加 r 个 0;
- 将添加 r 个 0 后的数据,使用模 2 除法除以多项式的位串;
- 得到的余数填充在原数据 r 个 0 的位置得到可校验的位串。
CRC-1 多项式(x+1)也称为奇偶校验位。
MTU
最大传输单元(英语:Maximum Transmission Unit,缩写MTU)是指数据链路层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络卡、串口等)。
在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的最大传输单元的最大值。
MAC 地址
MAC地址(英语:Media Access Control Address),直译为媒体访问控制地址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的地址。在OSI模型中,第三层网络层负责IP地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标识一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。MAC地址共48位(6个字节),以十六进制表示。
以太网
以太网是一种广泛使用的局域网技术,应用于数据链路层的协议,使用以太网可以完成相邻设备的数据帧传输。
网络层
网络层 IP 协议相关
IP 协议
网际协议(英语:Internet Protocol,缩写:IP),又称互联网协议,是互联网协议包中的网络层通信协议,用于跨网络边界分组交换。它的路由功能实现了互联互通,并从本质上建立了互联网。
IP地址(英语:IP Address,全称Internet Protocol Address),又译为网际协议地址、互联网协议地址。是网际协议中用于标识发送或接收数据报的设备的一串数字。当设备连接网络,设备将被分配一个IP地址,用作标识。通过IP地址,设备间可以互相通讯,如果没有IP地址,我们将无法知道哪个设备是发送方,无法知道哪个是接收方。IP地址有两个主要功能:标识设备或网络和网络寻址。
常见的IP地址分为IPv4与IPv6两大类,IP地址由一串数字组成。IPv4为32位长,通常书写时以四组十进制数字组成,并以点分隔,如:172.16.254.1
;IPv6为128位长,通常书写时以八组十六进制数字组成,以冒号分割,如:2001:db8:0: 1234:0:567:8:1
。
版本:指 IP 协议的版本,当前主流版本是 4,即 IPv4,也有 IPv6。
首部长度:表示 IP 首部长度,占 4 位最大数值为 15,单位是“32 位字(4 个字节)”,即 IP 首部最大长度为 60 字节。
总长度:占 16 位,最大数值为 65535,表示 IP 数据报总长度(IP 首部+IP 数据)。
- TTL:占 8 位,表明 IP 数据报文在网络中的寿命,每经过一个设备,TTL 减 1,当 TTL=0 时,网络设备丢弃此报文。
协议:占 8 位,表明 IP 数据所携带的具体数据是什么协议。
首部校验和:占 16 位,校验 IP 首部是否出错。
分类的 IP 地址
将 IP 地址划分为若干个固定类,每一类地址都有两个固定长度的字段组成,分别为网络号和主机号。
其中特殊的主机号和网络号有:
- 主机号全 0 表示当前网络段,不可分配为特定主机。
- 主机号全 1 为广播地址表示该网络上的所有主机。
- A 类地址网络号字段为全0 的 IP 地址是个保留地址,意思是“本网络”。
- A 类地址网络号为127(即 01111111 )保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。
- B 类地址实际上 128.0.0.0 是不指派的。
- C 类网络地址 192.0.0.0 也是不指派的。
最小网络号 | 最大网络号 | 子网数量 | 最小主机号 | 最大主机号 | 主机数量 | |
---|---|---|---|---|---|---|
A | 1 | 126 | 2^7-2 | 0.0.1 | 255.255.254 | 2^24-2 |
B | 128.1 | 191.255 | 2^14-1 | 0.1 | 255.254 | 2^16-2 |
C | 192.0.1 | 223.255.255 | 2^21-1 | 1 | 254 | 2^8-2 |
划分子网
从网络的主机号借用若干位作为子网号,在 IP 地址中增加一个“子网号字段”,使两级 IP 地址变成三级 IP 地址。划分子网只是把 IP 地址的主机号这部分进行再划分,而不改变 IP 地址原来的网络号。
从 IP 数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分,需要使用子网掩码(subnet mask) 。把三级 IP 地址的子网掩码和收到的数据报的目的 IP 地址逐位相“与”(AND),即得出所要找的子网的网络地址。
无分类编址CIDR
无分类域间路由选择CIDR(ClasslessInter-DomainRouting),最主要的特点是:
- CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。CIDR 把 32 位的IP 地址划分为前后两个部分。前面部分是“网络前缀” (network-prefix)(或简称为 “前缀”) ,用来指明网络,后面部分则用来指明主机。
- CIDR把网络前缀都相同的连续的 IP 地址组成一个“CIDR 地址块”。
IP 协议的转发流程
在路由表中,对每一条路由最重要的是以下两个信息:目的网络地址,下一跳地址。
IP 层分组转发算法如下:
- 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址为 N;
- 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付(包括把目的主机地址 D 转换为具体的硬件地址,把数据报封装为 MAC 帧,再发送此帧);否则就是间接交付,执行 3;
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 4;
- 若路由表中有到达网络 N 的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行 5;
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行 6;
- 报告转发分组出错。
网络层其它协议
ARP 协议和 RARP 协议
Address Resolution Protocol 地址解析协议,用于将网络层 32 位 IPv4 的地址转为数据链路层 48 位的 MAC 地址。 地址解析协议 ARP 在主机 ARP 高速缓存中存放一个从 IP 地址到硬件地址的映射表, 并且这个映射表还经常动态更新 (新增或超时删除)。
主机 A 使用 ARP 协议找到主机 B 的硬件地址的过程如下:
- A 的 ARP 进程在本局域网上广播发送一个 ARP 请求分组。请求分组的主要内容是:我的 IP 地址是 X,硬件地址是 Y,我想知道 IP 地址为 Z 的主机的硬件地址;
- 在本局域网上的所有主机上运行的 ARP 进程都收到此 ARP 请求分组;
- 主机 B 的 IP 地址与 ARP 请求分组中要查询的 IP 地址一致,就收下这个 ARP 请求分组,并向主机 A 发送 ARP 响应分组,同时在这个 ARP 响应分组中写入自己的硬件地址。B 也会把 A 的 IP 地址和硬件地址映射写入自己的 ARP 高速缓存中;
- 主机 A 收到主机 B 的 ARP 响应分组后,就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。
逆地址解析协议 RARP,它的作用是使只知道自己硬件地址的主机能够通过 RARP 协议找出其 IP 地址。现在的 DHCP 协议己经包含了 RARP 协议的功能。
ICMP 协议
网际控制报文协议ICMP (Internet Control Message Protocol),ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 是 IP 层协议,ICMP 报文作为IP 层数据报的数据,加上数据报的首部,组成IP 数据报发送出去。ICMP 报文格式如图:
ICMP 报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。
ICMP 报文种类 | 类型的值 | ICMP 报文的类型 | 代码 |
---|---|---|---|
差错报告报文 | 3(终点不可达) | 网络不可达 | 0 |
主机可不达 | 1 | ||
5(改变路由) | 对网络重定向 | 0 | |
对主机重定向 | 1 | ||
11 | 传输超时 | ||
12 | IP 头错误 | 0 | |
缺少其它必要参数 | 1 | ||
询问报文 | 0 或 8 | 回送(Echo)请求或应答 | |
13 或 14 | 时间戳(Timestamp)请求或回答 |
ICMP的一个重要应用就是分组网间探测PING(Packet InterNet Groper),用来测试两台主机之间的连通性。PING 使用了ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的一个例子 。它没有通过运输层的 TCP 或 UDP。
另一个非常有用的应用是traceroute / tracert,它用来跟踪一个分组从源点到终点的路径。 traceroute 从源主机向目的主机发送一连串的 IP 数据报,数据报中封装的是无法交付的 UDP 用户数据报。数据报的 TTL 从 1 依次增大,数据报每经过一个路由器 TTL 减 1,每当 TTL 为 0 时,路由器丢弃数据报并向源主机发送一个 ICMP 传输超时差错报告报文; 最后一个数据报因为封装的是无法交付的 UDP 用户数据报,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
当运输层从 IP 层收到UDP 数据报时,就根据首部中的目的端口,把UDP 数据报通过相应的端口,上交到对应的应用进程。如果接收方 UDP 发现收到的报文中的目的端口号不正确 (即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方。
IP 的路由算法
路由的概述
互联网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。可以把整个互联网划分为许多较小的自治系统(AS),自治系统 AS 是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个 AS 对其他 AS 表现出来的是一个单一的和一致的路由选择策略。
内部网关路由协议 RIP
距离矢量(DV)算法:
- 每一个节点使用两个向量 $D_i$ 和 $S_i$
- $D_i$ 描述当前节点到别的节点的距离
- $S_i$ 描述当前节点到别的节点的下一节点
- 每一个节点与相邻的节点交换向量 $D_i$ 和 $S_i$ 的信息
- 每一个节点根据交换的信息更新自己的节点信息
RIP (Routing Information Protocol)协议,RIP 协议把网络的跳数(hop)作为 DV 算法的距离,RIP 协议每隔 30s 交换一次路由信息,认为跳数大于 15 的路由不可达。
- 对地址为 X 的相邻路由器发来的 RIP 报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都修改为 X,并把所有的“距离”字段的值都加 1。每一个项目都有三个关键数据:到目的网络 N,距离是 d,下一跳路由是 X。
- 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络 N,则把该项目添加到路由表中,否则
- 若下一跳路由器地址是 X,则把收到的项目替换原路由表中的项目,否则
- 若收到的项目中的距离 d 小于路由表中的距离,则进行更新,否则什么也不做
- 若 3 分钟还没有收到相邻路由器的更新路由表,则吧此相邻路由器标记为不可达路由器,即把距离置为 16。
举例:己知路由器R6的路由表,现在收到相邻路由器R4发来的路由更新信息。试更新路由器R6的路由表。
R6 的路由表
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net2 | 3 | R4 |
Net3 | 4 | R5 |
R4 发来的路由更新信息
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 3 | R1 |
Net2 | 4 | R2 |
Net3 | 1 | 直接交付 |
修改 R4 中所有项目得到的路由信息
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 4 | R4 |
Net2 | 5 | R4 |
Net3 | 2 | R4 |
R6 更新后的路由表信息
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net1 | 4 | R4 |
Net2 | 5 | R4 |
Net3 | 2 | R4 |
内部网关路由协议 OSPF
OSPF(Open Shortest Path First)的五种分组类型:
- 问候分组,用来发现和维持邻站的可达性
- 数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 链路状态请求分组,向对方请求发送所有链路状态项目的详细信息
- 链路状态更新分组,用洪泛法对全网更新链路状态
- 链路状态确认分组,对链路更新分组的确认
OSPF 的过程:
- 路由器接入网络
- 路由器向邻站发送问候分组
- 与邻站交流链路状态数据库
- 广播和更新未知路由
外部网关路由协议
BGP(Border Gateway Protocol)边际网关协议,是运行在 AS 之间的一种协议。边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
传输层
UDP 协议
UDP(User Datagram Protocol)用户数据报协议。
UDP 的特点
- UDP 是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
- UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
- UDP 是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付IP 层。
- UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。
- UDP 的首部开销小。
- UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP 的首部格式
- 源端口,需要对方回信时选用,不需要时可全 0。
- 目的端口,交付报文时必须使用。
- 长度,UDP 用户数据报的长度,最小值是 8(仅有首部)。
- 校验和,检测 UDP 用户数据报在传输过程中是否有错,有错就丢弃。
- 伪首部,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报,伪首部既不向下传送也不向上递交,而仅仅是为了计算检验和。
TCP 协议
TCP(Transmission Control Protocol)传输控制协议。
TCP 的特点
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的。
- TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复, 并且按序到达。
- TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。
- 面向字节流。TCP 中的“流” (stream)指的是流入到进程或从进程流出的字节序列。
TCP 的首部格式
可靠传输的基本原理
停止等待协议
连续 ARQ 协议
TCP 可靠传输的实现
以字节为单位的滑动窗口
超时重传时间的选择,TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间RTTs。
选择确认 SACK,若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,选择确认可以让发送方只传送缺少的数据而不重传已经正确到达接收方的数据。
TCP 的流量控制
流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收,利用滑动窗口实现流量控制。设A向B发送数据,在连接建立时,B告诉了A:“我的接收窗口rwnd=400”。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。
当rwnd =0时不允许发送方再发送数据,持续到主机B 重新发出一个新的窗口值为止。假设B向A发送了rwnd=400的报文段,然而这个报文段在传送过程中丢失了,A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。
为了解决这个问题,TCP 为每一个连接设有一个持续计时器(persistence timer)。只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段 (仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。
TCP 的拥塞控制
所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
TCP 进行拥塞控制的算法有四种,即慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery) 。
TCP 连接的建立
TCP 连接的释放
应用层
应用层协议
域名系统 DNS
DNS(Domain Name System)域名系统。域名系统DNS能够把互联网上的主机名字转换为IP地址。每一个域名都由标号(label)序列组成,而各标号之间用点隔开。
顶级域名共分为三大类:
- 国家顶级域名nTLD,如:cn表示中国,us表示美国,uk表示英国等。
- 通用顶级域名gTLD,com (公司企业),net (网络服务机构),org (非营利性组织),int (国际组织),edu ( 美国专用的教育机构),gov (美国的政府部门),mil 表示(美国的军事部门)。
- 基础结构域名,即 arpa,用于反向域名解析,因此又称为反向域名。
我国把二级域名划分为“类别域名” 和“行政区域名” 两大类:
- 类别域名:ac (科研机构),com (工、商、金融等企业),edu (中国的教育机构),gov (中国的政府机构),mil (中国的国防机构),net (提供互联网络服务的机构 ),org(非营利性的组织)。
- 行政区域名:共34 个,适用于我国的各省、自治区、直辖市。
动态主机配置协议 DHCP
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,提供了即插即用连网机制,允许一台计算机加入新的网络和获取IP地址而不用手工参与,DHCP 使用客户服务器方式。
需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文(DHCPDISCOVER)(将目的IP地址置为全1,即255.255.255.255),这时该主机就成为DHCP客户。发送广播报文是因为现在还不知道DHCP服务器在什么地方,因此要发现(DISCOVER)DHCP服务器的IP地址。这台主机目前还没有自己的IP地址,因此它将IP数据报的源IP地址设为全0。这样,在本地网络上的所有主机都能够收到这个广播报文,但只有DHCP服务器才对此广播报文进行回答。DHCP 服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的IP地址池(address pool)中取一个地址分配给该计算机。DHCP服务器的回答报文叫做提供报文(DHCPOFFER),表示“提供” 了IP地址等配置信息。
超文本传送协议 HTTP
HTTP(HyperText Transfer Protocol)超文本传输协议。http://<主机><端口>/<路径>
,HTTP 的默认端口号是80,通常可省略。
HTTP的报文结构:
HTTP 响应报文状态码:
- 1xx表示通知信息,如请求收到了或正在进行处理。
- 2xx表示成功,如接受或知道了。
- 3xx表示重定向,如要完成请求还必须采取进 一步的行动。
- 4xx表示客户的差错,如请求中有错误的语法或不能完成。
- 5xx表示服务器的差错,如服务器失效无法完成请求。