结合 OSI 参考模型与 TCP/IP 模型,本文聚焦于具有五层协议的计算机网络体系结构(物理层、数据链路层、网络层、传输层和应用层)。

OSI

TCPIP

OSI与TCPIP对应关系

分层原因:实现信息在网络中传输非常复杂,分层是将复杂问题简单化、局部化的有效方法。

按覆盖范围将网络分为广域网(WAN)与局域网(LAN)两类。IEEE802.3是以太网的标准,IEEE802.11是无线网的标准。

计算机网络性能指标

  • 速率:传送数据的速率,也称数据速率或比特率,单位:b/s,bps
  • 带宽:通信线路传送数据的能力,即最高数据率
  • 吞吐量:单位时间内通过网络的数据量
  • 时延:数据从网络一端传送到另一端所需的时间,又称为延迟(由发送时延、传播时延、处理时延和排队时延组成)
  • 时延带宽积:即传播时延×带宽
  • 往返时间:从发送方发送数据开始,到收到接收方应答所经历的时间
  • 利用率:包括信道利用率(某信道有百分之几的时间是被利用过的)和网络利用率(全网络的信道利用率的加权平均值)

网络协议三要素包含:

  1. 语法
  2. 语义
  3. 时序

1 物理层

传输单位是比特,体现在电路接口协议规定(网线接口、规定传输信号的意义、交换电路数量及排列等)。

物理层涉及四个特性:

  1. 机械特性
  2. 电气特性
  3. 功能特性
  4. 过程特性

一些补充:

  • 双绞线被广泛用于以太网,网络时代前被广泛应用于电话系统
  • 光纤分为单模光纤和多模光纤
  • xDSL技术使用双绞线
  • FTTH、EPON、GPON使用光纤
  • 数字化话音数据使用时分多路复用(E1-30路与T1-24路)
  • 10Base-T中10是10Mbps,Base是基带传输,T是双绞线

从通信双方信息交互方式来看有三种通信方式:

  1. 单向通信:只有一个方向的通信而没有反方向的交互,仅需一条信道。
  2. 半双工通信:通信的双方均可收发信息,但任何一方都不能同时收发信息,需要两条信道。
  3. 全双工通信:通信双方可以同时收发信息,需要两条信道。

数据报与虚电路:

数据报与虚电路

Nyquist定理:理想低通信道最大数据传输率 $=2Hlog_2(V)$

  • $H$:信道带宽
  • $V$:信号电平级数(信号状态数)

香农定理:信道极限传输速率 $C=Wlog_2(1+\frac{S}{N})$

  • $W$:信道带宽,单位赫兹
  • $S$:信道内所传信号的平均功率
  • $N$:信道内高斯噪声功率

信噪比 $=10log_{10}(\frac{S}{N})$

2 数据链路层

传输单位是,将网络层传来的 IP 数据报组装成帧,功能包括帧组装、差错控制、流量控制和传输管理等。

协议有 PPP、STP、帧中继等。

组帧需要为数据添加首部和尾部,分组( IP 数据报)是帧中的数据部分,不需要添加尾部

IEEE802标准将局域网的数据链路层分为逻辑链路控制(Logic Link Control,LLC)和介质访问控制(Media Access Control,MAC)两个子层。

2.1 组帧

组帧主要解决帧定界、帧同步、透明传输等问题,通常有四种方法:

  1. 字符计数法:在帧头部使用一个计数字段标明帧内字符数,最大的问题在于一旦计数出错则收发双方后续交流全部失去同步。
  2. 字符填充的首尾定界符法:使用特定字符标识一帧的起止,信息位中出现的特定字符应该用转义字符加以区分。
  3. 零比特填充的首尾标志法:使用特定的比特模式01111110来标志一帧的起止,在信息位中每遇到连续的5个1则插入一个0进行编/解码。该方法很容易由硬件实现,性能优于字符填充法。
  4. 违规编码法:常见编码方式(如曼彻斯特编码方法)将1编码为高低电平对,将0编码为低高电平对,高高电平对和低低电平对则为违规的数据比特编码方式,可以用于界定帧的起止位置,IEEE802采用了这种方式。

目前常用的组帧方法是零比特填充的首尾标志法和违规编码法。

2.2 循环冗余校验CRC

循环冗余校验(Cyclic Redundancy Check,CRC)过程中,发送方将数据划分为组,每组 K 比特,在其后添加供差错检测用的 n 位冗余码,将(k + n)比特一起发送。

计算 n 位冗余码过程如下:

  1. 在 k 比特数据后添 n 位 0 得到 M
  2. 用 M 除以长度(n + 1)位的除数 P(收发双方提前商定好除数),得到商是 Q,余数是 R,其中 n 位的余数即为冗余码

接收方计算(k + n)% P 为 0 则表示未出错。

2.3 滑动窗口协议

ARQ协议(Automatic Repeat reQuest 使用校验和、确认帧、超时重发、帧序号解决帧传输过程中可能出现的错误)在同一时刻仅有一个帧在链路上传输,信道利用率较低,表现为:$U=\frac{T_D}{T_D+RTT+T_A}$。因此,滑动窗口协议(sliding window protocol)允许发送方连续发送多个帧,并通过滑动窗口实现流量控制

  1. 接收窗口向前滑动时发送窗口才有可能向前滑动
  2. 接收窗口的大小为1时,可以保证帧的有序接收
  3. 数据链路层滑动窗口协议中窗口的大小在传输过程中是固定的
  4. 窗口最大尺寸为1的滑动窗口协议即为ARQ协议
  5. 帧出错或丢失后,有后退N帧(当某帧出错时该帧之后的帧全被丢弃)和选择性重传(只选重发出错/丢失帧,要求接收方可以临时缓存接收窗口的帧)两种方案

数据链路层滑动窗口

2.4 点对点协议PPP

点对点协议(Point-to-Point Protocol,PPP)是广泛应用于点到点链路的数据传输,它面向字节,提供有连接的不可靠服务,由以下三个部分组成:

  1. 将IP数据报封装到串行链路的方法
  2. 链路控制协议(Link Control Protocol,LCP)
  3. 网络控制协议(Network Control Protocol,NCP)

对同步传输,PPP采用零比特填充;对异步传输,PPP采用字符填充

2.5 介质访问控制

信道划分介质访问控制分为四种方式:

  1. 频分多路复用(FDM):充分利用介质带宽,系统效率较高,技术成熟,实现容易。
  2. 时分多路复用(TDM):类似时间片轮转。
  3. 波分多路复用(WDM):光的频分多路复用,即在一根光纤中传输多种不同波长的光信号。
  4. 码分多路复用(CDM):采用不同的编码来区分各路原始信号,也称码分多址(Code Division Multiple Access,CDMA),原理是每个比特时间划分为m(通常为64,128)个短的时间槽码片(Chip),数据比特1和0分别用码片序列和其反码来表示,通过保证各站点码片序列正交即可保证各信号互不干扰。

载波侦听多路访问/碰撞检测(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)协议:在发送数据前先侦听共用信道,发现信道空闲再发送数据,并在发送数据时继续侦听信道。

$最小帧长=总线传播时延\times 数据传输速率 \times 2$,最小帧长用于争用信道,在此之后的数据一定不会发生冲突(因为已经成功抢占信道)。

CSMA/CD 采用二进制指数退避算法避免碰撞:

  1. 确定基本退避时间,一般取两倍总线端到端传播时延 $2d$
  2. 定义参数 k=min[重传次数,10]
  3. 从离散整数集 $\{0,1,\cdots,2^k-1\}$ 中随机抽取一个数 r,重传所需的退避时间为 r 倍基本退避时间:$2rd$
  4. 当重传达16次仍不成功时,说明网络过于拥挤,认为此帧永远无法正确发出,抛弃此帧并向高层报错

CSMA/CA 用于无线局域网,CSMA/CD 用于有线连接的局域网

3 网络层

传输单位是数据报,关注通信子网的运行控制,把网络层数据单元从源端传到目的端,为不同主机提供通信服务。功能包括路由选择、流量控制、拥塞控制、差错控制和网际互连等。

协议有 IP、ICMP、ARP、OSPF 等。

3.1 路由算法

自治系统(Autonomous System,AS):一个AS的所有路由器在本自治系统内必须连通。一个AS需要在AS内部和AS之间选择协议。

路由信息协议(Routing Information Protocol,RIP)是一种基于距离向量的路由选择协议(距离由跳数定义)。

  1. 优点是实现简单、开销小、收敛过程快
  2. 缺点是限制网络规模;开销随网络规模成正比(路由器间交换的信息为完整路由表);网络出现故障时会出现慢收敛现象。
  3. 一条路径最多只能包含15个路由器,距离更远则视为不可达
  4. 两个RIP路由器之间默认每30S广播一次RIP路由更新信息
  5. 仅相邻路由器交换信息
  6. RIP路由器将持续180S及以上时间没收到更新路由表的相邻路由器标记为不可达路由器(设置距离为16)
  7. RIP是应用层协议,使用UDP传送数据(端口520

开放最短路径优先协议(OSPF)使用链路状态路由算法,特点如下:

  1. OSPF向本AS中所有路由器发送信息,RIP仅向邻居发送
  2. OSPF发送的信息是与本路由器相邻所有路由器的链路状态信息,RIP发送自己的路由表
  3. 只有链路状态发生变化时OSPF路由器才向所有路由器发送信息
  4. OSPF是网络层协议,不使用UDP或TCP,而直接使用IP数据报传送(首部协议字段89
  5. 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径,实现多路径间的负载平衡
  6. 每个链路状态都带上一个32位的序号,序号越大状态越新
  7. OSPF路由器使用Dijkstra计算到各目的网络的最优路径(仅存储下一跳,而非完整路径)

边界网关协议(BGP)是不同AS间的路由器之间交换路由信息的外部网关协议,常用于互联网的网关之间。

  1. BGP力求找到无环可达的路径,并不保证是最佳路由
  2. 是基于TCP的应用层协议
  3. BGP交换路由信息的结点数量级即为AS的数量级
  4. 在BGP刚运行时,BGP的邻站交换整个BGP路由表,后续仅针对变动进行更新

三种路由协议对比

3.2 IP & NAT

各类 IP 地址中有些 IP 地址用作特殊用途,不用做主机的 IP 地址:

  • 主机号全0表示网络本身
  • 主机号全1表示网络的广播地址
  • 环回地址的 IP 数据不会出现在任何网络上
  • 32位全为0表示本网络上的本主机
  • 32位全为1表示整个 TCP/IP 网络的广播地址

IP地址与硬件地址的区别:

  • IP地址是网络层及以上各层使用的地址,是一种逻辑地址,存放在IP包头部
  • 物理地址是数据链路层及物理层使用的地址,存放在数据链路层的帧中

IP地址分类

网络地址转换(NAT)将专用网络地址转换为公用地址,NAT 转换表中存放着{本地IP地址:端口}{全球IP地址:端口}的映射(专用地址:10/8172.16/12192.168/16)。

IPv6主要特点:

  1. 地址空间更大,从32位变成128位
  2. 灵活,可扩展
  3. 即插即用自配置,支持资源预分配
  4. 安全性更好
  5. IPv6首部长度必须为8B的整数倍,IPv4首部是4B的整数倍
  6. 与IPv4不兼容
  7. 点分十进制改为冒号十六进制
  8. 实现IPv4/IPv6互操作的技术主要有双协议栈隧道技术两种

3.3 子网划分与子网掩码、CIDR

子网划分下的三级IP地址:

$\{<网络号>,<子网号>,<主机号>\}$。

子网主机号不能被指派全0与全1的地址,其中全0地址为子网的网络号,全1地址为子网的广播地址。

主机IP逐位&子网掩码=网络号

在CIDR中,

$IP::=\{<网络前缀>,<主机号>\}$

路由聚合的好处:路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由,可以减少路由表中表项个数,并减少路由器间交换的路由信息量。

3.4 地址解析协议(ARP)

IP地址是网络层使用的地址,硬件地址是数据链路层使用的MAC地址,在不同抽象层次中地址可见性不同。地址解析协议(Address Resolution Protocol,ARP)用于完成IP地址到MAC地址的映射。

ARP协议工作在网络层,用于解决同一局域网的主机与路由器的IP地址与硬件地址的映射问题,如果目标不在该局域网,则需要找到本局域网的某个路由器由其转发至下一个网络。

3.5 路由表

路由表表项一般包含:

  1. 目的网络IP地址
  2. 子网掩码
  3. 下一条IP地址
  4. 接口

转发是路由器根据转发表把IP数据报从合适的端口转发出去,仅涉及一个路由器;路由选择则涉及多个路由器,路由表是许多路由器协同工作的结果。

3.6 ICMP

网际控制报文协议(Internet Control Message Protocol,ICMP)主要用于报告出错和测试等控制信息,位于IP层,封装在IP包中进行传输。

Ping、Traceroute/Tracert 为ICMP的应用示例

ICMP报文有9种类型,分为差错报告报文和询问报文两种。

差错报告报文:

  • Destination unreachable:重点不可达,路由器或主机无法传输报文
  • Source quench:源点抑制,路由器或主机由于拥塞丢弃报文
  • Time exceeded:超时,报文TTL字段为0时路由器丢弃报文
  • Parameter problem:参数问题,路由器或主机收到的报文中头部有非法字段时丢弃数据包
  • Redirect:重定向,路由器向主机报告路由发生改变

询问报文:

  • Echo request/reply:回声探测,用于测试网络连通性
  • Timestamp request/reply:请求时间,可用于时间同步

4 传输层

传输单位是报文段 TCP 或用户数据报 UDP,负责主机中两个进程之间的通信,为端到端连接提供可靠的传输服务,如流量控制、差错控制、服务质量、数据传输管理、拥塞控制、顺序控制等服务。

协议有 TCP、UDP。

4.1 传输层服务

较网络层而言,传输层会提供对报文的差错检测服务,以及面向连接的TCP和无连接的UDP两种传输协议。

端口(软件端口)是传输层服务访问点(SAP),用于标识主机中的应用进程。

数据链路层的SAP是MAC地址;网络层的SAP是IP地址;传输层的SAP是端口。

  1. 端口号长度为16bit,可以表示65536个不同的端口号

  2. 服务器端使用的端口号分为两类,熟知端口号(0~1023)被IANA(互联网地址指派机构)指派给TCP/IP最重要的一些应用程序;登记端口号(1024~49151)供没有熟知端口号的应用程序使用,使用时必须在IANA登记

    熟知端口号

  3. 客户端端口号(49152~65535)仅在客户端进程运行时才动态选择,在通信结束后即被释放

套接字 $Socket=(IP地址: 端口号)$ 是一个通信端点,唯一地标识了网络中的一台主机和其上的一个应用(进程),这是TCP/IP协议向应用层提供的编程接口

面向连接服务TCP主要适用于可靠性较重要的场合,如文件传输协议(FTP)、超文本传输协议(HTTP)、远程登录(TELNET)等。

UDP在IP之上提供多路复用和对数据的错误检查两个附加服务,速度较快,实时性好,主要适用于小文件传送协议(TFTP)、DNS、SNMP和实时传输协议(RTP)。

4.2 UDP

UDP不保证可靠交付,可靠性由用户在应用层完成。

UDP可以应用于一对一、一对多、多对一、多对多交互通信。

UDP数据报包含首部和用户数据。首部有8B共4个字段,每个字段长度2B,在计算校验和时需要提供12B的伪首部(可以检查源端口号、目的端口号、源IP、目的地址和数据报数据部分)。

为了实现网络互连,互联网中的所有端系统和路由器都必须实现UDP协议。

UDP与TCP校验机制一样。

UDP首部

4.3 TCP

TCP首部长度20B+4NB(4N字节视需求扩展)。

TCP首部

建立TCP连接(连接两个套接字)有三个阶段:连接建立、数据传送和连接释放。这一过程采用客户/服务器模式,主动发起连接建立的应用进程称为客户(Client),被动等待连接建立的应用进程称为服务器(Server)。

TCP连接管理要确保:

  1. 每一方能够知道对方的存在
  2. 允许双方协商一些参数(最大窗口值等)
  3. 能够对运输实体资源(缓存大小等)进行分配

TCP连接建立时经历的三个步骤称为三次握手

服务器端资源在第二次握手时分配,客户端资源在第三次握手时分配

TCP三次握手

TCP连接释放时经历的四个步骤称为四次挥手

image-20230602173258687

超时冗余ACK这两种事件会导致TCP对报文段进行重传。

  1. 超时重传:TCP每发送一个报文段就对这个报文段设置一次计时器,在计时器到期但还未收到确认时就要重传这一报文段。(保留报文段往返时间Round-Trip Time,$RTT$ 的加权平均往返时间 $RTT_s$,超时重传时间 Retransmission Time-out,$RTO$ 应该比 $RTT_s$ 略大)
  2. 冗余确认:接收方在收到失序报文段后会向发送方回复一个冗余ACK指明期望收到的报文序号,当发送方收到三个对于同一序号的冗余ACK时,即认为该序号报文已经丢失,可以立刻进行重传(这么做是因为超时触发重传的超时周期往往较长,所以冗余确认技术也被称为快速重传

TCP提供流量控制服务来平衡发送方的快速发送速率与接收方缓冲区空间有限的矛盾,这种服务基于滑动窗口协议的流量控制机制。

接收方将接收窗口rwnd的大小写入TCP报文段首部来限制发送方注入报文的速率,同时,发送方根据对当前网络拥塞程度的估计而确定的窗口值称为拥塞窗口cwnd

拥塞控制是全局过程,让网络能够承受现有的网络负荷;流量控制是指点对点的通信量的控制。

拥塞控制有四种算法:

  1. 慢开始
  2. 拥塞避免
  3. 快重传
  4. 快恢复

接收窗口rwnd与拥塞窗口cwnd由发送方进行维护,实际的发送窗口的上限值 $=min[rwnd, cwnd]$。

慢开始算法率先设置cwnd=1,随后每经过一个传输轮次(往返时延RTT),cwnd翻倍,直到超过慢开始门限ssthresh,改用拥塞避免算法。

拥塞避免算法在每个传输轮次后将cwnd加一。

发送方一旦判断出网络拥塞(未按时收到确认),就将慢开始门限ssthresh设置为出现拥塞时发送方的cwnd的一半(但不小于2),并将拥塞窗口cwnd重新设置为1,并使用慢开始算法。

慢开始和拥塞避免算法

快重传算法在发送方连续收到三个重复的ACK报文时直接重传对方尚未收到的报文(使用冗余ACK)。

快恢复算法在发送方连续收到三个冗余ACK时将慢开始门限ssthresh设置为发送方cwnd的一半,并将cwnd设置为修改后的ssthresh值,并使用拥塞避免算法。

快恢复算法

5 应用层

负责用户与网络的交互,提供所有高层协议,如 FTP、DNS、SMTP、HTTP。

网络应用有客户服务器C/S模型和P2P模型

5.1 DNS

域名系统(Domain Name System,DNS)采用C/S模型,使用53号端口,基于UDP协议,分为层次域名空间、域名服务器和解析器。

  1. 标号不超过63个字符,总长不超过255个字符
  2. 域名从左到右级别逐次提升

分布式设计DNS主要有四种类型的域名服务器:

  1. 根域名服务器,共十三个,每个都知道所有的顶级域名服务器
  2. 顶级域名服务器,负责管理在该顶级域名服务器注册的所有二级域名
  3. 授权(权限)域名服务器,每台主机都必须在该类型服务器处登记
  4. 本地域名服务器,本机中的DNS地址即为该类型服务器地址

域名解析是指把域名映射成IP地址或把IP地址映射成域名的过程,前者为正向解析,后者为反向解析。域名解析一般有递归查询和迭代查询两种形式,递归查询仅向根域名服务器查询一次;递归与迭代查询相结合的方式则会首先向本地域名服务器进行递归查询,随后由本地域名服务器依次向根域名服务器、顶级域名服务器、权限域名服务器进行迭代查询。

5.2 FTP

文件传输协议(File Transfer Protocol,FTP)是使用最广泛的文件传输协议,允许客户指明文件的类型与格式。其采用C/S模式,使用TCP传输服务,一个FTP服务器进程可以同时为多个客户进程提供服务。

FTP在工作时使用两个并行的TCP连接:控制连接(端口号21)数据连接(端口号20)

5.3 电子邮件

电子邮件系统的三个最主要组成构件是用户代理(User Agent,UA)、邮件服务器和电子邮件使用的协议(如SMTP、POP3,IMAP)。

常见UA有Outlook、Foxmail等。

邮件服务器采用C/S模式。

收发邮件

SMTP只能传送一定长度的ASCII码邮件,无法传送许多其他国家字符,多用途网际邮件扩充(MIME)改进了SMTP这一缺点。SMTP使用TCP连接,端口号为25

POP也使用C/S模式,在传输层使用TCP,端口号为110

目前出现了许多基于万维网的电子邮件,如Hotmail、Gmail,其特点是用户浏览器与邮件服务器之间的邮件交互使用HTTP,仅在不同邮件服务器之间使用SMTP传送邮件。

e-mail中,用户代理使用SMTP协议发送邮件,使用POP3协议收取邮件。

5.4 HTTP

万维网(World Wide Web,WWW)是一个信息存储空间,其中的事物称为资源,并由一个全域的统一资源定位符URL标识,这种资源通过超文本传输协议(Hyper Text Transfer Protocol,HTTP)传送给使用者,使用者点击链接获取资源。

万维网的内核由三个标准构成:

  1. URL:标识文档
  2. HTTP:应用层协议,使用TCP进行传输
  3. HTML:文档结构语言

URL中不区分大小写

WWW服务器不断监听TCP的端口80,获得请求后即与浏览器建立TCP连接,随后浏览器向服务器发送获取某个Web页面的HTTP请求,服务器收到请求并构建Web页面再通过HTTP相应返回给浏览器。

HTTP是无连接无状态的,可以通过Cookie进行缓存、记录

HTTP可以使用非持久连接,也可以使用持久连接(HTTP/1.1,在HTTP响应后不释放连接,且使用流水线式持久连接,每次使用资源有一个RTT延迟)。

HTTPS是安全的HTTP协议,建立在SSL基础上,使用端口号443