2020-heibaiying- 计算机网络
计算机网络
一、体系结构
计算机网络的各层及其协议的集合被称为网络的体系结构,按照不同的维度,其常被分为七层、五层、四层网络结构:
1.1 七层网络模型
开放式系统互联模型(Open System Interconnection Model,简称为
1.2 四层网络模型
互联网协议套件(Internet Protocol Suite,IPS)是多个网络传输协议的集合,它为网际网络的基础通信提供架构支撑。由于该协议族中最核心的两个协议分别为
1.3 五层网络模型

- 应用层
(application layer) :直接为应用进程提供服务。应用层协议定义的是应用进程间通讯和交互的规则,不同的应用有着不同的应用层协议,如HTTP 协议(万维网服务) 、FTP 协议(文件传输) 、SMTP 协议(电子邮件) 、DNS(域名查询)等。 - 传输层
(transport layer) :有时也译为运输层,它负责为两台主机中的进程提供通信服务。该层主要有以下两种协议:- 传输控制协议
(Transmission Control Protocol ,TCP):提供面向连接的、可靠的数据传输服务,数据传输的基本单位是报文段(segment) ; - 用户数据报协议
(User Datagram Protocol ,UDP):提供无连接的、尽最大努力的数据传输服务,但不保证数据传输的可靠性,数据传输的基本单位是用户数据报。
- 传输控制协议
- 网络层
(internet layer) :有时也译为网际层,它负责为两台主机提供通信服务,并通过选择合适的路由将数据传递到目标主机。 - 数据链路层
(data link layer) :负责将网络层交下来的IP 数据报封装成帧,并在链路的两个相邻节点间传送帧,每一帧都包含数据和必要的控制信息(如同步信息、地址信息、差错控制等) 。 - 物理层
(physical Layer) :确保数据可以在各种物理媒介上进行传输,为数据的传输提供可靠的环境。
二、物理层
物理层考虑的是如何在各种媒介上传输数据,它定义了与传输媒介相关的接口特性,如:
- 机械特性:指明接口所用的接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。
- 电气特性:指明在接口电缆的各条线上出现的电压的范围。
- 功能特性:指明某条线上出现的某一电平的电压的意义。
- 规程特性:指明对于不同功能的各种可能事件的出现顺序。
2.1 传输媒介
物理层并不指具体的传输媒介,相反物理层希望能够尽量屏蔽不同媒介间的差异。这些传输媒介可以分为以下两类:
- 导引型传输媒介:信号被导引沿着固体媒介进行传播,如双绞线、同轴电缆、光缆。
- 非导引型传输媒介:信号在自由空间内进行传播,如短波通信、微波通信。
2.2 信道分类
信道是指信息传输的基本通道,它可以分为以下三类:
- 单工信道:只能有一个方向的通信而没有反方向的通信;
- 半双工信道:通信的双方都能发送信息,但双方不能同时发送或接收信息。
- 全双工信道:通信的双方可以同时发送和接收信息。
2.3 信道复用
信道复用是信息传输当中最常使用的技术,用于提高信息传输的效率,根据采用技术的不同,可以分为以下几类:
频分复用(FDM,Frequency Division Multiplexing)是将用于传输信道的总带宽划分成若干个子频带(或称子信道

时分复用(TDM,

如上图所示,在一个时分复用帧中,不同用户的信号周期性出现,如果某个用户处于闲置状态,则其对应的帧上也会出现空闲:

为了解决时分复用的这个缺点就产生了统计时分复用。
在统计时分复用(Statistic TDM)模式下,各用户将数据发送到集中器的输入缓存中,然后由集中器进行顺序扫描并放入到

波分复用(WDM,Wavelength Division Multiplexing)是将两种或多种不同波长的光载波信号在发送端经复用器汇合在一起,并耦合到光线路的同一根光纤中进行传输;在接收端,经分用器将各种波长的光载波分离,然后由光解调器作进一步处理以恢复原信号:

码分复用(CDM,Code Division Multiplexing)是靠不同的编码来区分各路原始信号的一种复用方式。
三、数据链路层
3.1 基本功能
数据链路层会将网络层传递下来的数据拆分为多段,并在每段数据前后分别添加首部和尾部,以构成一个完成的帧,帧是链路层传输的基本数据单元。帧首部用控制字符 SOH
表示,帧尾部用控制字符 EOT
表示:

透明传输是指不论何种数据都应当能够在链路上进行安全地传输。由于我们采用控制字符来封装帧,当传输数据中出现了控制字符时,就会导致无法正确区分出帧头帧尾,此时需要使用转移字符 ESC
来进行转义:

由于现实环境中的通信链路都是不理想的,因此比特在传输过程中可能会产生差错:
3.2 PPP 协议
点到点协议(PPP,Point to Point Protocol)是目前使用最为广泛的数据链路层协议,主要用于建立点对点的连接来传输数据单元。它由以下三部分组成:
- 一个将
IP 数据报封装到串行链路的方法; - 链路控制协议
(LCP) :一种扩展链路控制协议,用于建立、配置、测试和管理数据链路连接。 - 网络控制协议
(NCP) :协商该链路上所传输的数据包格式与类型,建立、配置不同的网络层协议。
3.3 Mac 地址
08:00:20:0A:8C:6D
,前
3.4 局域网
局域网(LAN,Local Area Network)是连接住宅、学校、实验室、大学校园或办公大楼等有限区域内计算机的网络。 按照
3.5 以太网
以太网(Ethernet)是目前使用范围最广的局域网,以常用的以太网

其中
四、网络层
4.1 网际协议IP
网际协议(Internet Protocol)是网络层中最重要的协议,也是

各字段的含义如下:
- 版本:占
4 位,指IP 协议的版本(IPv4 或IPv6 ) 。 - 首部长度:占
4 位,可表示的最大十进制数是15 。 - 区分服务:只有在使用区分服务时,该字段才有用,一般情况下不会用到。
- 总长度:指首部长度和数据长度之和,单位为字节。该字段为
16 位,因此数据报最大长度为65535 个字节,由于数据链路层规定了一个帧中数据字段的最大长度MTU (Maximum Transfer Unit,最大传送单元) ,以以太网为例,该值为1500 ,所以当数据报长度超过MTU 时,需要对数据进行分片。 - 标识:占
16 位,由IP 软件内部的计数器维护,每产生一个数据报,计数器就加1 ,用于发生分片时,将相同数据报标识的分片重组为原数据报。 - 标志:占
3 位,目前只有两位有意义:- 最低位
MF (More Fragment) :为1 时表示后面还有分片,为0 时表示该数据报分片已经是最后一个; - 中间位
DF (Don’t Fragment) :代表不能分片,只有将其设为1 时,才允许分片。
- 最低位
- 片偏移:占
13 位,标识该片在原数据报中的偏移位置。 - 生存时间:TTL,每经过一个路由器,其值就会减
1 ,当值为0 时,就将该数据报丢弃。这样做是为了避免数据报目的地址不存在时,数据报一直在网络中无限制转发。 - 协议:占
8 位,指明数据报携带的数据所使用的协议。 - 首部校验和:占
16 位,其只校验数据报的首部,不包括数据部分。 - 源地址:占
32 位,数据来源的IP 地址; - 目的地址:占
32 位,目的地的IP 地址。
4.2 ARP 协议
主机名称 | ||
---|---|---|
A | 192.168.38.10 | 00-AA-00-62-D2-02 |
B | 192.168.38.11 | 00-BB-00-62-C2-02 |
C | 192.168.38.12 | 00-CC-00-62-C2-02 |
D | 192.168.38.13 | 00-DD-00-62-C2-02 |
E | 192.168.38.14 | 00-EE-00-62-C2-02 |
你也可以使用
arp -a
来查看你本机的ARP 缓存表 。
拥有
- 主机
A 发送数据前, 会先查看自己的ARP 表中是否有目标IP 对应的Mac 地址,如果有则将其封装到帧里,然后发送; - 如果没有找到,主机
A 则会以广播的方式向同一网段内的所有主机发出对该IP 地址的询问; - 对应
IP 地址的主机接收到这个消息后以单播的方式将对应的Mac 地址回复给主机A 。
4.3 IP 地址分类
网络号 + 主机号
组成,分为以下五类:

A,B,
网络号限制:
- 网络号全为
0 的IP 地址是保留地址,代表 “本网络”(B,C 两类地址的网络号开头都是1 ,所以不存在全0 的情况) ; - 网络号为
127 (即01111111 )也是保留地址,作为回环测试使用(同上,B 和C 两类地址也不存在该情况) ; B 类地址128.0.0.0 (网络号为10000000 00000000 )不能用于分配;C 类地址192.0.0.0 (网络号为11000000 00000000 )不能用于分配;
主机号限制:
- 全
0 主机号表示该IP 地址是本主机所连接到的单个网络地址,如IP 地址为5.6.7.8 的主机所在的网络地址就是5.0.0.0 ,该地址不能用于分配; - 全
1 主机号表示该网络上的所有主机,因此也不能被分配。
综上所述,每种网络类型所能分配到
网络类别 | 最大可分配的网络数 | 第一个可分配的网络号 | 最后一个可分配的网络号 | 每个网络的最大主机数 |
---|---|---|---|---|
A | 126(27-2) | 1 | 126 | 16 777 215(224-2) |
B | 16 383(214-1) | 128.1 | 191.255 | 65 534(216-2) |
C | 2 097 151(221-1) | 192.0.1 | 223.255.255 | 254(28-2) |
从该表我们可以看出来,两级(254-20)*4
,为解决两级
4.4 划分子网
划分子网方案诞生与

由于子网对外是不可见的,所以需要使用子网掩码来辅助路由,假设目标
IP 地址:192.168.10.198 二进制IP地址:11000000.10101000.00001010.11000110
子网掩码:255.255.255.224 二进制掩码:11111111.11111111.11111111.11100000
网络地址:192.168.10.192 按位逻辑与运算结果为:11000000.10101000.00001010.11000000
现代互联网标准规定:所有网络都必须使用子网掩码,同时路由器的路由表中也必须包含子网掩码这一项。因为路由表包含了
最后,如果一个网络不划分子网掩码,则其子网掩码取默认值,各类
类别 | 子网掩码的二进制数值 | 子网掩码的十进制数值 |
---|---|---|
A | 11111111 00000000 00000000 00000000 | 255.0.0.0 |
B | 11111111 11111111 00000000 00000000 | 255.255.0.0 |
C | 11111111 11111111 11111111 00000000 | 255.255.255.0 |
4.5 构成超网
无类别域间路由(CIDR,Classless Inter-Domain Routing)是一个给用户分配
IP地址 ::= {<网络前缀>,<主机号>}
并使用斜线记法进行表示:
十进制 | 二进制 | |
---|---|---|
最小地址 | 128.14.32.0 | 10000000 00001110 00100000 00000000 |
最大地址 | 128.14.47.255 | 10000000 00001110 00101111 11111111 |
每个地址块可以使用地址块中的最小地址和网络前缀的位数进行指定,例如上面的地址块可以记为/20地址块
。为更方便的进行路由选择,/20地址块
的地址掩码为
由于一个
4.6 ICMP 和IGMP
在网络层,除了上面介绍的
- 互联网控制消息协议
(ICMP ,Internet Control Message Protocol):为了提高IP 数据报的交付率,ICMP 允许主机或路由器报告差错情况和提供异常报告给发送者,以便发送者进行补偿行为。 - 网路群组管理协议
(IGMP ,Internet Group Management Protocol) :是用于管理网路协议多播组成员的一种通信协议。IP 主机和相邻的路由器可以利用IGMP 来建立多播组的组成员。
4.7 专用地址
- 10.0.0.0 – 10.255.255.255(或记为
10.0.0.0/8 ,又称为24 位块) ; - 172.16.0.0 – 172.31.255.255(或记为
172.16.0.0/12 ,又称为20 位块) ; - 192.168.0.0 – 192.168.255.255(或记为
192.168.0.0/16 ,又称为16 位块) 。
因为不同机构可以采用相同的专用地址,因此其也被称为可重用地址。
4.8 VPN
如果一个机构内使用的是由专用地址构成的专用网,但该机构的部门却分布在不同的、远距离的地理位置上,此时可以利用公共的互联网作为本机构内各专用网之间的通信载体,这样的专用网称为虚拟专用网(Virtual Private Network
4.8 NAT
当某台主机获取到的地址是专用地址时,其是无法和外部互联网进行通讯的,如果想要和外部互联网进行通讯,可以采用
由上面的原理也可以看出,具有

4.9 IPv6
上面我们介绍过
五、传输层
传输层负责为两台主机中的进程提供通信服务,它使用
5.1 UDP
用户数据报协议
-
UDP 是无连接的; -
UDP 提供尽最大努力的交付服务,但不保证交付的可靠性; -
UDP 是面向报文的; -
UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低; -
UDP 支持一对一、一对多、多对一和多对多的交互通信; -
UDP 的首部开销较小,只有8 个字节,远小于TCP 的20 个字节。首部共由四个字段组成,每个字段两个字节:- 源端口号:在需要对方回信时选用,不需要时可用全
0 表示; - 目标端口号;
- 长度:
UDP 用户数报的总长度; - 校验和:检测
UDP 用户数据报在传输中是否有错,如果有错则丢弃。
- 源端口号:在需要对方回信时选用,不需要时可用全
5.2 TCP 简介
传输控制协议
-
TCP 是面向连接的; -
TCP 提供可靠的交付服务; -
TCP 提供全双工的通信,两端都设有缓存,用来临时存放通信数据; -
面向字节流,这里的流指的是流入或流出进程的字节序列;
-
每一条
TCP 连接唯一地被通信两端的两个端点所确定,即:TCP 连接 ::= {socket1,socket2} = {(IP1,port1),(IP2,port2)}
5.3 TCP 报文首部

各字段的含义如下:
-
源端口和目的端口:各占
2 个字节。 -
序号:占
4 字节,序号范围为[ 0 , 2 32- 1 ] ,序号增加到2 32- 1 后又会回到0 。在一个TCP 连接中,传送的字节流中的每一个字节都要按顺序进行编号。 -
确认号:占
4 字节,表示期望收到对方下一个报文段的第一个数据字节的序号。例如B 收到A 的报文,序号值为501 ,数据长度为200 字节(序号501 ~ 700 ) ,此时表明B 正确收到了序号700 及其之前的所有数据,因此B 在发送给A 的确认报文段中确认号的值为701 。 -
数据偏移:占
4 位,其所能表达的最大数字是15 。数据偏移表示该数据报中数据的起始位置,由于数据报是由 首部+ 数据 组成,所以实际上就是指报文段的首部长度。数据偏移的单位是32 位字(即以4 字节长为单位) ,所以数据偏移的最大长度是60 (15*4)字节,即TCP 报文段的首部长度不能超过60 字节,对应的选项长度不能超过40 字节。 -
保留:占
6 位,保留为今后使用,目前应置为0 。 -
六个控制位:其作用分别如下:
- 紧急
URG (URGent) :当值为1 时,表明紧急指针字段有效,代表此报文中有紧急数据,应尽快传送,而无需按原来的排队顺序传送。 - 确认
ACK (ACKnowledgment) :当值为1 时,确认号有效;值为0 时,确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把ACK 置为1 。 - 推送
PSH (Push) :当值为1 时,表示接受方应该将数据立即交付给应用进程,而不是等待缓存填满后再向上交付。 - 复位
RST (Reset) :当值为1 时,表明TCP 连接出现严重差错,必须立即释放,然后再重新建立连接;也可以用来拒绝一个非法的报文段或拒绝打开一个连接。 - 同步
SYN (SYNchronization) :在连接建立时用来同步序号。当SYN = 1 而ACK = 0 时,表明这是一个连接请求报文段;对方若同意建立连接,则应在响应的报文段中使SYN = 1 和ACK = 1 。 - 终止
FIN (FINis) :当值为1 时,表明此报文段发送方的数据已发送完毕,并要求释放连接。
- 紧急
-
窗口:占
2 字节,取值范围为[ 0 , 2 16- 1 ] 之间的整数。窗口字段保持动态变化,用于指明接收方允许发送方发送的数据量。 -
校验和:占
2 字节,校验的字段范围包括首部和数据。 -
紧急指针:占
2 字节,仅在URG = 1 时才有意义,用于指明紧急数据的结束位置,位于结束位置之后的就是普通数据。 -
选项:长度可变,最长可达
40 字节。可用的选项有:最大报文段长度 ,窗口扩大选项、时间戳选项等。
5.4 三次握手

-
服务器进程
B 首先创建传输控制模块TCB ,然后进入LISTEN (收听)状态,准备接受客户端的连接请求; -
客户端进程
A 首先创建传输控制模块TCB ,然后发出连接请求报文段,此时同步位SYN = 1
,同时选择一个初始序号seq = x
,之后进入SYN-SENT (同步已发送)状态; -
B 收到连接请求报文段后,如果同意建立连接,则发送确认报文段,此时SYN 和ACK 都置为1 ,确认号ack = x + 1
,并为自己选择一个初始序号seq =y
,之后进入SYN-RCVD (同步收到)状态; -
A 收到来自B 的确认后,发出最后的确认,确认报文段的ACK 为1 ,确认号ack = y + 1
,序号seq = x + 1
。TCP 标准规定,ACK 报文段可以携带数据也可以不携带,如果不携带则该序号不被消耗,下一个数据报文段的序号仍然是seq = x + 1
。之后A 进入ESTABLISHED (已连接)状态; -
当
B 收到A 的确认后,也进入ESTABLISHED 状态。
5.5 四次挥手
数据传输结束后,通信的双方都可以释放连接,具体过程如下:

-
假设应用进程
A 先主动关闭连接,此时需要发送连接释放报文段:首部终止控制位FIN 为1 ,序号seq = u
,其中u 等于前面传送过的数据的最后一个字节的序号加1 。之后A 进入FIN-WAIT-1 (终止等待1 )状态; -
应用进程
B 收到连接释放报文段后立即发出确认,确认号ack = u + 1
,序号seq = v
,其中v 等于前面传送过的数据的最后一个字节的序号加1 。之后B 进入CLOSE-WAIT (关闭等待)状态,并通知高层应用进程。此时TCP 连接处于半关闭状态,即A 已经没有数据需要发送,但如果B 发送数据,A 仍要接收; -
A 收到来自B 的确认后就进入FIN-WAIT-2 (终止等待2 )状态,等待B 发出连接释放报文段; -
若高层应用进程已经没有数据要发送,则通知
B 释放TCP 连接。此时B 发出释放连接报文段:首部终止控制位FIN 为1 ,序号seq = w
(在半关闭状态下B 可能又发送了一些数据) ,另外还需要重复上次已经发送过的确认号ack = u + 1
。之后B 进入LAST-ACK (最后确认)状态; -
A 收到B 的连接释放报文段后,发出最后确认:ACK 为1 ,确认号ack = w + 1
,序号seq = u + 1
,然后进入TIME-WAIT (有时间限制的等待)状态; -
B 收到来自A 的最后确认后进入CLOSED (关闭)状态; -
A 经过2 倍的MSL (Maximum Segment Lifetime,最长报文段寿命)后,才进入CLOSED 状态。
- 为了保证
A 发送的最后一个ACK 报文段能够到达B 。如果B 没有收到该最后确认,则会进行超时重发FIN+ACK 报文段,A 在2MSL 等待时间内会响应该报文段并重发最后确认; - 确保本次连接内产生的所有报文段都从网络消失,进而确保下一个新的连接中不会出现旧的连接请求报文段。
5.6 可靠传输的原理
想要实现可靠性传输,最基本的可以使用停止等待协议:每发送完一个数据单元就停止发送,并等待对方的确认。

此时面临两个问题:
- 如果
A 给B 发送数据的过程中出现了丢失,此时B 无法收到数据,自然也不会返回确认,那么程序就会一直等待; - 如果
B 给A 发送确认的过程中出现了丢失或经过很长时间才到达A ,那么程序也会持续等待。
针对第一个问题,解决方案是如果在给定的时间内没有收到确认,则进行超时重传:

针对第二个问题,其解决方案依然是超时重传,具体细分为以下两种情况:
-
如果
B 收到了M1 ,只是返回的确认丢失了,当超时重传后,B 需要丢弃重复收到的M1 ; -
如果
B 的返回确认没有丢失,只是超过了重传时间后才到达A ,此时A 可能会收到两次确认,一次是补传得到确认,一次是原有的延迟到达的确认,A 需要丢弃延时到达的确认,不做任何处理:
在基本的停止等待协议中,一次只发送一个数据单元,此时信道利用率非常低,为了解决这个问题,可以采用流水线传输,一次发送多个数据单元:

当使用流水线传输时,为保证可靠性,需要配合使用连续
连续

通常接收方一般都是采用累积确认的方式。此时接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,它表示:这个分组及其之前的所有分组都已正确到达。
5.7 TCP 的可靠传输
RTO = RTT_S + 4 × RTT_D
其中
新的 RTT_S = (1-α) × 旧的 RTT_S + α × 新的 RTT 值
- RTT (Round Trip Time)代表报文段的往返时间,它记录一个报文段从发出去到收到确认的时间长度;
- 第一次测量时,
RTT S的值就等于 RTT 的值,之后的RTT S则采用上面的公式进行计算; - 其中
0 ≤ α < 1 ,RFC 6298 推荐其值取0.125 。
新的 RTT_D = (1-β) × 旧的 RTT_D + β × |RTT_S - 新的 RTT 值|
- 第一次测量时,
RTT D的值就等于 RTT 值的一半,之后的RTT D则采用上面的公式进行计算; β 值是一个小于1 的系数,RFC 6298 推荐其值取0.25 。
5.8 流量控制
流量控制(flow control)是指控制发送方的发送速率,以便接收方来得及接收。假设
5.9 拥塞控制
网络拥塞(congestion)是指传输的数据量超过节点承受能力而导致传输能力下降的情况。而拥塞控制就是防止过多的数据注入到网络中而造成路由器和链路过载。
慢开始和拥塞避免都是基于窗口的拥塞控制:发送方会维持一个名为拥塞窗口
慢启动的思路如下:由于不知道网络的负载能力,所以最好的选择就是逐步探测,即由小到大成倍地增大发送窗口,也就是说,由小到大成倍地增大拥塞窗口的值。
拥塞避免算法的思路是让拥塞窗口

快重传算法要求接收方不要等待自己发送数据时才进捎带确认,而是要立即发送确认,即使收到了失序报文段也要立即发出对已收到的报文段的重复确认。示例如下:

如上图所示,当

六、应用层
6.1 域名系统DNS
目前我们都是使用易于理解的域名来访问互联网应用,但传输层需要的则是
域名是一个逻辑上的概念,分为多级域名,其中最基础的是根域名,其次是顶级域名,顶级域名共分为四类:
- 国家顶级域名
nTLD :如cn 表示中国,us 表示美国; - 通用顶级域名
gTLD :如com 表示公司企业,org 表示非盈利性组织,net 表示网络服务机构; - 基础结构域名:又称为反向域名,用于反向域名解析,该顶级域名只有一个
arpa ; - 新顶级域名
New gTLD :ICANN 机构在2011 年6 月20 日批准新顶级域名,允许任何满足条件的公司或机构进行申请。

6.2 文件传输协议FTP
文件传输协议(FTP,File Transfer Protocol)是用于在网络上进行文件传输的一套标准协议,允许客户指明文件的类型和格式,并获得文件的存储权限。
- 一个主进程:负责接收新的请求;
- 若干个从属进程:负责处理单个请求。
因此一个
6.3 远程终端协议TELNET
6.4 万维网WWW
万维网是一个分布式的超媒体系统,它是超文本系统的扩展。它包含以下重要概念:
用于定位互联网上资源的位置和访问这些资源的方法,其格式如下:
<协议>://<主机>:<端口>/<路径>
超文本标记语言
6.5 动态主机配置协议DHCP
通常连接到互联网的计算机的协议软件都需要配置多个项目,如

此时需要进行联网的主机在启动时候会广播发现报文(DHCP DISCOVER
通常不是每个网络都有
参考资料
- 谢希仁
. 计算机网络(第七版). 电子工业出版社. 2017-01 James F. Kurose / Keith W. Ross . 计算机网络 —— 自顶向下方法(第七版). 机械工业出版社. 2018-06 - 子网划分详解与子网划分实例精析
- 网络基础之 –
IP 数据报、分片策略、路由表 - 完全理解
ICMP 协议