计算机网络复习
概述
计算机网络
- 21世纪的重要特征是:数字化、网络化、信息化,以网络为核心的信息时代
- 三类网络:电信网络、有线电视网络、计算机网络
- 互联网的特点:连通性和共享
- 连通性:互联网使得上网用户之间,不管相距多远,都可以非常便捷、非常经济地交换信息
- 共享:信息共享、软件共享、硬件共享
互联网
- 计算机网络由若干结点(node)和连接这些结点的链路(link)组成
- internet 是一个通用名词,它泛指由多个计算机网络互连而成的计算机网络
- Internet 是一个专有名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网,它采用 TCP/IP 协议族作为通信的规则,且其前身是美国的 ARPANET
- 互联网的三个阶段
- 从单个网络 ARPANET 向互连网发展的过程,TCP/IP 协议成为 ARPANET 上的标准协议
- 建成了三级结构的互联网,分为主干网、地区网、校园网(企业网)
- 形成了多层次 ISP 结构的互联网
- ISP:网络服务提供商,例如中国电信
- ISP分为不同的层次:主干 ISP、地区 ISP、本地 ISP
- 主干 ISP 服务面积大,拥有高速主干网
- 地区 ISP 通过一个或多个主干 ISP 连接起来,部分大公司直接接入地区 ISP
- 本地 ISP 负责给用户提供直接的服务,用户数据经由本地 ISP、地区 ISP、主干 ISP、地区 ISP、本地 ISP 发送至目标用户
- IXP:互联网交换点,将两个网络直接相连并交换分组,而不需要再通过第三个网络来转发分组。使得互联网上的数据流量分布更加合理,减少了分组转发的迟延时间,降低了分组转发的费用
- 万维网(WWW)被广泛使用在互联网上,大大方便广大非网络专业人员对网络的使用
- 互联网的标准化工作由互联网协会(ISOC)进行管理
- 互联网体系结构委员会(IAB):负责管理互联网有关协议的开发
- 互联网工程部(IETF)
- 互联网研究部(IRTF)
- 互联网体系结构委员会(IAB):负责管理互联网有关协议的开发
互联网的组成
- 边缘部分:由所有连接在互联网上的主机(端系统 end system)组成。这部分是用户直接使用的,用来进行通信和资源共享
- 核心部分:由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的
边缘部分
互联网的通信方式:
- 客户(Client)-服务器(Server)(C/S方式):主机A运行客户程序而主机B运行服务器程序,在这种情况下,A是客户而B是服务器。客户A向服务器发出服务请求,而服务器B向客户A提供服务。客户是服务请求方,而服务器是服务提供方。
- 对等方式(P2P方式 peer-to-peer):两台主机都运行了对等连接软件(P2P软件),他们可以进行平等的、对等连接通信
互联网的核心部分(通信交换方式)
在互联网核心部分起特殊作用的是路由器。路由器是实现分组交换的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能
电路交换
使用电路交换通话之前,必须先拨号请求连接。当被叫用户听到交换机振铃音并摘机后,从主叫端到被叫端就建立了一条连接,也就是一条专用的物理通路。这条连接保证了双方通话时所需的通信资源,而这些资源在双方通信时不会被其他用户占用。在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。以下三个步骤称为电路交换
- 建立连接(占用通信资源)
- 通话(一直占用通信资源)
- 释放资源(归还通信资源)
如果用户在拨号呼叫时电信网的资源已不足以支持此次呼叫,则主叫用户会听到忙音,表示电信网不接受用户的呼叫(例如对方正在通话中)
但使用电路交换来传送计算机数据时,其线路的的传输效率往往很低。这是因为计算机的数据是突发式地出现在传输线路上的,因此线路上真正用来传送的数据时间往往不到10%,甚至1%。浪费通信线路资源
分组交换
分组交换采用存储转发技术,我们把要发送的整块数据称为一个报文(message),在发送端,先把较长的报文划分成较短的、固定长度的数据段,每一个数据段前面添加上首部(header)构成分组(packet)。分组又称为包,分组的首部也可以称为包头。以下三个步骤
- 路由器/交换机接受数据包(存储)
- 路由器/交换机查看数据段的首部,决定数据包接下来应该发送给哪个路由器
- 路由器/交换机发送数据包(转发)
优点:
- 高效:在分组传输的过程中动态分配传输带宽,对通信链路是逐段占用
- 灵活:为每一个分组独立地选择最合适的转发路由
- 迅速:以分组作为传送单位,可以不先建立连接就能向其他主机发送分组
- 可靠:保证可靠的网络协议,分布式多路由的分组交换网,使网络有很好的生存性
缺点:
- 分组在各路由器存储转发时需要排队,会造成一定的时延
- 分组交换需要携带控制信息
注:图中的报文交换即为将报文不拆分为较短的、固定长度的数据段的报文交换方式
计算机网络类别
- 按照作用范围分
- 广域网(WAN):广域网的作用范围通常为几十到几千公里,是互联网的核心部分,其任务是通过长距离运送主机发送给的数据,速度高、通信量大
- 城域网(MAN):作用范围通常为一个城市,可以跨越几个街区甚至整个城市。目前城域网很多采用以太网技术,因此有时也常常并入局域网的范围
- 局域网(LAN):一般工作范在1km左右
- 个人区域网(PAN):个人网络,通常只有10m左右
- 按照使用者分
- 公用网(public network):指电信公司出资建造的大型网络,这种网络通常是提供给所有愿意缴纳费用的人
- 专用网(private network):某个部门为了满足本单位的需要而建造的网络,这种网络不向本单位以外的人提供服务
- 用来把用户接入到互联网的网络
- 这种网络称为接入网(AN),即与宽带接入技术有关的网络
网络性能
速率
速率的单位为 bit/s
,有时写作bps
,含义为:每秒传输的比特位个数。注意,这与通常提及的网速单位不同,通常网速的单位为 B/s 而不是 b/s
带宽
通常带宽指代某个信号具有的频带宽度,单位为Hz
在计算机网络中,带宽和速率同义,单位为bit/s
吞吐量
在单位时间内,通过某个网络的实际数据量
时延
指数据从网络的一段传送到另一端所需要的时间
- 发送时延:主机或路由器发送数据帧需要的时间。从发送数据帧的第一个比特开始到最后一个比特发送完毕所需要的时间 $发送时延 = \frac{数据帧长度(bit)}{速率(bit/s)}$
- 传播时延:电磁波在信道中传播一定的距离需要花费的时间 $传播时延 = \frac{链路长度(m)}{数据在链路上的传播速度(m/s)}$
- 处理时延:主机或路由器收到分组后需要花费时间进行处理。包括分析数据首部、提取数据部分、差错检验、寻找下一个路由
- 排队时延:分组经过网络传输时,在进入路由器后需要在输入队列中等待处理,待路由器确定了转发接口后,还要在输出队列中等待转发
提高数据的发送速率只能减小数据的发送时延
时延带宽积
表示通信管道链路中总共可以容纳多少个比特
往返时间 RTT
利用率
利用率有信道利用率和网络利用率两种
- 信道利用率:某信道有百分之几的时间是被利用的(有数据通过)。信道利用率并非越高越好,信道利用率越大,则该信道的时延就会增加。令 $D_0$ 表示网络空闲时的时延,$D$ 表示网络当前的时延,信道利用率用$U$表示,则通常较大的主干网的 ISP 的信道利用率不超过 50%
- 网络利用率:全网络的信道利用率的加权平均值
其他非性能特征
- 费用
- 质量
- 标准化
- 可靠性
- 可拓展性和可升级性
- 易于管理和维护
计算机网络体系结构
网络协议
规定了所交换数据的格式以及有关的同步问题规则称为网络协议,主要由下面三个要素构成
- 语法:数据与控制信息的结构或格式
- 语义:需要发出何种控制信息,完成何种动作以及做出何种响应
- 同步:事件实现顺序的详细说明
网络层次
分层的好处:
- 各层之间是独立的
- 灵活性好
- 结构上可分割开
- 易于实现和维护
- 能促进标准化工作
- 差错控制
- 流量控制
- 分段和重装
- 复用和分用
- 连接建立和释放
五层协议结构
应用层(application layer)
通过应用进程间的交互来完成特定网络应用。对于不同的网络应用需要有不同的应用层协议。例如 DNS(域名系统),HTTP(万维网应用),SMTP(电子邮件协议)
运输层(transport layer)
负责向两台主机中进程通信提供通用的数据传输服务。主要有两种协议:
- TCP(传输控制协议):面向连接的、可靠的数据传输服务。其数据传输的单位是报文段
- UDP(用户数据报协议):提供无连接的、尽最大努力的数据传输服务,不保证数据传输的可靠性。其数据传输的单位是用户数据报
网络层(network layer)
负责为分组交换网上的不同主机提供通信服务,将运输层产生的报文段或用户数据封装成分组或包进行传送。IP 协议
数据链路层(data link layer)
将IP数据报组装成帧(framing),添加控制信息(同步信息、地址信息、差错控制)。检查所收到的帧中是否有差错。与 mac 地址有关
物理层(physical layer)
传输比特流
实体、协议、服务 和服务访问点:
- 实体(entity)——表示任何可发送或接收信息的硬件或软件进程。
- 协议——控制两个对等实体进行通信的规则的集合。
- 在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。
- 要实现本层协议,还需要使用下层所提供的服务。
- 下面的协议对上面的服务用户是透明的。
- 协议是“水平的”,即协议是控制对等实体之间通信的规则。
- 服务是“垂直的”,即服务是由下层向上层通 过层间接口提供的。
- 同一系统相邻两层的实体进行交互的地方,称为服务访问点 SAP (Service Access Point)
- 协议必须把所有不利的条件事先都估计到,而不能假定一切都是正常的和非常理想的,必须非常仔细地检查这个协议能否应付各种异常情况。
物理层
物理层的主要任务是确定与传输媒体的接口有关的一些特性
- 机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等
- 电器特性:指明在接口电缆的各条线上出现的电压的范围
- 功能特性:指明某条线上出现的某一电平的电压的意义
- 过程特性:指明对于不同功能的各种可能事件出现的顺序
数据通信的基础知识
数据通信模型
一个数据通信系统可以划分为三大部分
- 源系统
- 源点:源点设备产生要传输的数据
- 发送器:调制器(调制解调器)
- 传输系统
- 目标系统
- 接收器:解调器(调制解调器)
- 终点
通信系统中的术语
- 消息(message):运送消息的实体
- 信号(signal):数据的电气或电磁的表现
- 模拟信号(连续信号):消息的参数取值是连续的
- 数字信号(离散信号):消息的参数取值是离散的
- 单向通信(单工通信):只能有一个方向的通信而没有反方向的交互
- 双向交替通信(半双工通信/单工):双方都可以发送信息,但是双方不能同时发送信息
- 双向同时通信(全双工通信):双方可以同时发送给和接受信息
- 基带信号:由源点产生的信号。通常包含有低频甚至直流成分,需要通过调制器进行调制(modulation)
- 调制:对基带信号进行的变换
- 基带调制(编码):仅仅对基带信号的波形进行变换,使它能够与信道特性相适应,变换后仍然是基带信号
- 不归零制:正电平表示1,负电平表示0
- 归零制:正脉冲表示1,负脉冲表示0
- 曼切斯特编码:周期中心向上跳为0,周期中心向下跳为1
- 差分曼切斯特编码:位开始边界有跳位0,没有跳变为1。每个位中间必须进行一次跳变
- 带通调制:使用载波(carrier)进行调制,将基带的信号频率范围搬移到高频率段,并转换为模拟信号(为了达到更高的信息传输速率,通常采用复杂的多元振幅相位混合调制方法QAM)
- 调幅(AM):载波的振幅随着基带数字信号变化而变化
- 调频(FM):载波的频率随着基带数字信号变化而变化
- 调相(PM):载波的初始相位随基带数字信号变化而变化
- 基带调制(编码):仅仅对基带信号的波形进行变换,使它能够与信道特性相适应,变换后仍然是基带信号
信道的极限容量
- 信道能够通过的频率范围:在任何信道中,,码元传输的速率是有上线的,传输速率超过此上线,就会出现严重的码间串扰的问题,使接收端对码元的识别称为不可能
- 信噪比:所有电子设备和通信信道中,会随机产生噪音。如果信号相对较强,则噪音的影响就相对较小。
- 信道极限信息传输速率$C$为其中,$W$ 为信道的带宽(Hz),$S$ 为信道内所传信号的平均功率,$N$ 信道内部的(高斯)噪音的功率
物理层下面的传输媒体
- 导引型传输媒体:
- 双绞线:屏蔽双绞线,无屏蔽双绞线
- 同轴电缆
- 光缆
- 单模光纤:纤芯细,光线不会经过多次反射,成本高,传输距离远
- 多模光纤:可以同时传输多个光路,容易失真,只适合近距离传输
- 非导引型传输媒体
- 短波
- 微波
- 卫星
信道复用技术
- 频分复用:所有用户在同样的时间占用不同的带宽(频率带宽)资源
- 时分复用:将时间划分为一段段等长的时分复用帧(TDM 帧)。每一个时分复用的用户在每一个 TDM 帧中占用固定序号的时隙。每一个用户所占用的时隙是周期性地出现(其周期就是 TDM 帧的长度)。TDM 信号也称为等时(isochronous)信号。时分复用的所有用户是在不同的时间占用同样的频带宽度。
- 统计时分复用(提供时分复用的利用率)
- 波分复用:光的频分复用。
- 码分复用CDM:常用的名词是码分多址 CDMA。各用户使用经过特殊挑选的不同码型,因此彼此不会造成干扰。这种系统发送的信号有很强的抗干扰能力,其频谱类似于白噪声,不易被敌人发现。每一个比特时间划分为 m 个短的间隔,称为码片(chip)。当码片序列长度为$m$ bit发送的信息的速率为$b$ bit/s,则实际的发送速率要达到$mb$ bit/s。CDMA 的重要特点:每个站分配的码片序列不仅必须各不相同,并且还必须互相正交(orthogonal)。在实用的系统中是使用伪随机码序列。
数字传输系统
略
宽带接入技术
略
数据链路层
链路层使用的信道分为两种类型:
- 点对点信道:一对一
- 广播信道:一对多
使用点对点信道的数据链路层
数据链路和帧
- 链路(link):是一条无源的点到点(一个节点到相邻节点)的物理线路段,中间没有任何其他的交换结点。一条链路只是一条通路的一个组成部分。
- 数据链路(data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。最常用的就是网络适配器(即网卡)。
- 帧:数据链路层的协议数据单元。数据链路层把网络层交下来的数据打包成帧发送到链路上,以及把接收到的帧中的数据取出并交给网络层
数据链路层协议
封装成帧
- 在一段数据的前后分别添加首部和尾部,构成一个帧。
- 首部和尾部的一个重要作用就是进行帧定界(确定一个帧的界限)。
- 每一种链路层协议都规定了所能传送的帧的数据部分长度的上限——最大传送单元(MTU)
- 控制字符SOH(Start Of Header)放在一帧的最前面,EOT(End Of Transmission)放在一帧的结束。如果只有SOH没有EOT则丢弃。(SOH = 0x01,EOT = 0x04)
透明传输
由于数据部分也有可能出现 EOT 的字符导致数据链路层会错误的找到帧的边界。若发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”,则在前面插入一个转义字符“ESC”(其十六进制编码是 0x1B),如果出现了转义字符“ESC”,则再插入一个“ESC”。这种办法称为字节填充
差错检验
CRC(循环冗余检验)
在发送端,先把数据划分为组,每组 $k$ 个比特,将每组的数据用二进制的模2运算进行$2^n$乘的运算,然后在每组数据后添加 $n$ 位冗余码。
假定本组数据为 $M = 101001$,$n = 3$。假定除数$P = 1101(n + 1位)$
首先在 $M$ 后添加 $n$ 位 $0$,得到 $2^nM = 101001000$
将新得到的值与 $P$ 进行模2除法(进行异或运算,直到最后一位)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
110101 (商)
+---------
1101|101001000 (被除数)
1101
----------
1110 (每次运算使用的是异或运算,而不是减法)
1101
----------
0111 (每次运算时,如果首位是0,则商为0,如果首位是1,则商为1)
0000
----------
1110
1101
----------
0110
0000
----------
1100
1101
----------
001 (余数R)
将余数$R = 001$添加至 $M$ 后,得到CPC后的结果为 $101001001$
CPC校验只能判断这个帧是否有差错,不能判断哪一位或者哪几位除了差错
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)。
“无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制
在数据后面添加上的冗余码称为帧检验序列 FCS
点对点协议PPP
- PPP协议的功能
- 简单:这是首要的要求,互操作性提高了
- 封装成帧:必须规定特殊字符作为帧定界符
- 透明性
- 多种网络层协议:同一条物理链路上同时支持多种网络层协议
- 多种类型链路
- 差错检测
- 检测连接状态
- 最大传输单元
- 网络层地址协商
- 数据压缩协商
- PPP协议不需要的功能
- 纠错
- 流量控制
- 序号
- 多点线路
- 半双工或单工链路
- PPP协议的组成
- 一个将IP数据报封装到串行链路的方法
- 链路控制协议 LCP(Link Control Protocol)
- 网络控制协议 NCP(Network Control Portocol)
- PPP协议的帧格式
- 各字段的含义
- 其中,首部的第一个字段和尾部的最后一个字段 F(flag) 都是
0x7E
,表示一个帧的开始或结束。 - 首部中的地址字段 A 规定为
0xFF
,控制字段 C 规定为0x03
这两个字段并没有携带 PPP 帧的信息 - 首部中第四个字段为协议字段,当协议字段为 0x0021 时,PPP 帧的信息字段就是 IP 数据报。若为 0xC021, 则信息字段是 PPP 链路控制数据。若为 0x8021,则表示这是网络控制数据。
- 信息字段的长度是可变的,不超过 1500 字节
- 尾部中的第一个字段是用于CRC的帧校验序列FCS
- 其中,首部的第一个字段和尾部的最后一个字段 F(flag) 都是
- 字节填充
- 将信息字段中出现的每一个
0x7E
字节转变成为 2 字节序列(0x7D
,0x5E
)。 - 若信息字段中出现一个
0x7D
的字节,则将其转变成为 2 字节序列(0x7D
,0x5D
)。 - 若信息字段中出现 ASCII 码的控制字符 (即数值小于
0x20
的字符),则在该字 符前面要加入一个0x7D
字节,同时将该字符的编码加以改变。例如出现0x03
,则要改为0x7D
,0x23
- 将信息字段中出现的每一个
- 零比特填充:PPP 协议用在 SONET/SDH 链路时,是使用同步传输,这时 PPP 协议采用零比特填充方法来实现透明传输。信息字段每出现5个连续的1,则添加一个0,这样不会产生控制字符
F
相同的信息部分。
- 各字段的含义
- PPP协议的工作状态:略
使用广播信道的数据链路层
局域网的数据链路层
共享信道技术:
- 静态划分信道
- 动态媒体接入控制
- 随机接入
- 受控接入
CSMA/CD 协议(Carrier Sense Multiple Access with Collision Detection 载波侦听多路访问/碰撞检测)
- 以太网
- 所有计算机连接到一根总线上
- 采用无连接的工作方式
- 差错帧是否需要重传由高层决定
- 使用曼切斯特编码
- CSMA/CD 协议
- 多点接入:许多计算机以多点接入的方式连接在一根总线上
- 载波监听:用电子技术监听总线上有没有其他计算机在发送数据
- 碰撞检测:边发送边监听
截断二进制指数退避
当发送的数据包发生碰撞冲突时,以太网使用截断二进制指数退避法
- 确定一个争用期时间:以太网把争用期定为 $51.2 \mu s$。
- 早期的以太网的网速为 $10Mbps$,所以在此时间内,计算机总共能够发送 64 字节的数据(512bit)。所以这个时间通常也被叫做512比特时间
- 当数据包开始发送的 $51.2 \mu s$ 内,如果接收到了其他计算机发送的数据包,则认为此次数据包发生了碰撞,并立即停止数据包的传输。
- 发生冲突的双方从 $[0, (2^k - 1)]$ 范围中随机取出一个整数,记为 $r$
- 下一次重传的将在 $r$ 倍的争用期
- 当重传达到 $16$ 次仍不能成功时,则放弃,并向高层报告
例如,在第1次重传时,k=1,随机数 $r$ 从整数中选一个数。因此重传推迟的时间是0或争用期,在这两个时间中随机选择一个。整数范围的选择为2的k次方个数
若再发生碰撞,则重传时,k=2,随机数 $r$ 就从整数中选一个数。因此重传推迟的时间是在$0, 1, 2, 3$倍的争用期这4个时间中随机抽取一个
同样,若在发生碰撞,则重传时k=3,随机数 $r$ 就从整数中选一个数。以此类推
同时,以太网规定了最短的帧长为 64 字节,如果要发送的数据小于此数值,则必须要填入一些字节使得帧长不小于 64 字节。同样,如果发送方发送的帧数据在争用期(64比特)内没有发送碰撞,则后续发送的数据一定不会发生碰撞
对于接收方,如果接收到的帧小于 64 字节,则可以认为这是由于冲突而异常中止的无效帧
同时为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备,以太网还规定了帧间最小间隔 $9.6 \mu s$
CSMA/CD 协议要点归纳
- 准备发送
- 检测信道
- 在发送过程中仍不停检测信道
- 发送成功:在争用期内没有检测到碰撞
- 发送失败:在争用期内检测到碰撞,立即停止发送数据
以太网每发送一帧,一定要把已发送是帧保留一下,如果在争用期内检测到了碰撞,则此帧需要重传
使用集线器的星形拓扑
略
以太网的信道利用率
mac地址
mac地址是计算机中固化在适配器ROM中的地址,简单来说mac地址由电脑硬件直接决定,长度为 48 位(6 个字节)。制作适配器的厂商通常需要向 IEEE 的 RA 购买 OUI(组织唯一标识符,也可以理解为是mac地址段)
适配器过滤
适配器在接收到 mac 帧后,先用硬件检查 mac 帧中的目的地址,如果是发往本站的帧则收下,否则丢弃掉。
这里“发往本机的帧”包括以下三种:
- 单播(unicast):一对一
- 广播(broadcast):一对全体
- 多播(multicast):一对多
一些适配器可以设置为混杂模式,工作在混杂方式的适配器会将以太网上传输的所有帧都接受下来。这样实际上是窃听其他站点的通信
mac帧格式
- 前两个字段为目的地址和源地址
- 第三个字段为类型字段,用来标志上一层使用的是说明协议。例如为
0x0800
时为 IP 数据报,为0x8137
为 Novell IPX - 第四个字段为数据段,长度在 46 到 1500 字节(46 = 最短长度 64 字节 - 第一个字段 6 字节 - 第二个字段 6 字节 - 第三个字段 2 字节 - 第五个字段 4 字节)
- 第五个字段是帧校验序列 CRC
- 将 mac 帧向物理层传输时,还需要在开头加上 7 个字节的前同步码,同步码是由
10
串组成,使得接收端的适配器能够根据同步码的频率来调制时钟频率。和一个字节的帧开始界定符
无效的 mac 帧
- 帧的长度不是整数个字节
- 用收到的帧检验序列 FCS 由差错
- 收到的帧的 mac 数据字段的长度不在 46-1500 字节之间
扩展的以太网
略
网络层
网络层提供的两种服务
- 虚电路服务:通过网络层来实现可靠的传输网络协议,面向连接,类似打电话时的连接建立过程
- 数据报服务:不提供服务质量的保证,不需要建立连接
方面 | 虚电路服务 | 数据报服务(采用的) |
---|---|---|
思路 | 可靠的通信应当由网络来保证 | 可靠的通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点的地址 | 仅在建立连接阶段使用,每个分组使用短的虚电路号 | 每个分组都有终点的完整地址 |
分组转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出现故障时 | 所有通过出故障的结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按照顺序到达终点 | 到达终点的顺序不一定按照发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
网络协议 IP
与 IP 协议配套使用的还有三个协议
- ARP(地址解析协议)
- ICMP(网络控制报文协议)
- IGMP(网际组管理协议)
虚拟互连网络
网络上使用的中间设备
- 物理层:转发器
- 数据链路层:网桥
- 网络层:路由器
- 网络层以上:网关
分类的 IP 地址
IP地址有两个固定长度的字段组成,第一个字段为网络号,第二个为主机号。一个 IP 地址在整个互联网范围内是唯一的,
- A类、B类、C类地址的网络号字段分别为1个、2个和3个字节长,而在网络号字段的最前面有 1-3 位的类别位,其数值分别规定位
0
、10
、110
- A类、B类、C类地址的主机号的主机号字段分别为3个、2个、1个字节长
- A类、B类、C类的地址都是单播见适配器过滤地址
- D类地址(前4位是
1110
)用于多播 - E类地址(前4位是
1111
)保留为以后用
IP 地址的指派范围
网络类别 | 最大可以指派的网络数 | 第一个可以指派的网络号 | 最后可以指派的网络号 | 每个网络中的最大主机数 |
---|---|---|---|---|
A | 126($2^{7} - 2$) | 1 | 126 | 16777214($2^{24} - 2$) |
B | 16383($2^{14} - 1$) | 128.1 | 191.255 | 65534($2^{14} - 1$) |
C | 2097151($2^{21} - 1$) | 192.0.1 | 223.255.255 | 254 |
特殊的 IP 地址
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的含义 |
---|---|---|---|---|
0 | 0 | 可以 | 不可以 | 本网络上的本主机 |
0 | 非全0且非全1 | 可以 | 不可以 | 在本网络上的某台主机 |
全1 | 全1 | 不可以 | 可以 | 在本网络上进行广播 |
非全0且非全1 | 全1 | 不可以 | 可以 | 对某个网络上的所有主机进行广播 |
127 | 非全0且非全1 | 可以 | 可以 | 本机 |
IP 地址的一些特点
- 每一个 IP 地址都由网络号和主机号两部分组成
- 实际上 IP 地址标志的是一台主机(或路由器)和一条链路的接口
- 一个网络指的是具有相同网络号的主机的集合
- 在 IP 地址中,所有分配到网络号的网络都是平等的
- 同一个局域网上的主机或者路由器的 IP 地址中的网络号必须是一样的
- 用网桥(它工作在链路层)互连的网段仍然是一个局域网,网络号必须相同
- 路由器总是拥有两个或更多的 IP 地址,即路由器的每一个接口都有一个不同网络号的 IP 地址
- 当两个路由器相连时,在接口两端处,可以分配也可以不分配 IP
IP 地址与硬件地址(mac地址)
- 物理地址/硬件地址/mac 地址是数据链路层和物理层使用的地址,是固定的
- IP 地址是网络层和以上各层使用的地址,是一种逻辑地址
- 在 IP 层抽象的互联网上只能看到 IP 数据报。IP 数据报不论转发多少次,其数据报中的 IP 地址始终是源地址和目的地址。
- 虽然 IP 数据报首部有源 IP 地址,但是路由器只根据目的站的 IP 地址进行转发
- 在链路层,只能看到 mac 帧,IP。数据报倍封装在 mac 帧中,mac 地址在不同网络中时,mac 帧内的源地址和目标地址会发生变化,具体表现为,对于每一次转发,其 mac 帧内的源地址和目标地址都会发生变化
- 考虑网络层时,可以是哟个统一的、抽象的 IP 地址来研究主机和主机或者路由器之间的通信
ARP(地址解析协议)
将网络层得到的 IP 地址转为下一跳的 mac 地址的过程(将 IP 地址映射到 mac 地址)
- 当主机 A 需要向 主机 B 发送 IP 数据报时,首先根据主机 B 的 IP 的地址,在本机的 ARP 缓存中寻找是否有主机 B 的 IP 地址,如果有,则可以获取主机 B 的 mac 地址
- 如果没有主机 B 的 IP,则向本局域网上广播一个 ARP 请求
- 在本局域网上的所有主机运行的 ARP 进程都收到此 ARP 请求
- ARP 进程查询本机的 IP 是否与请求的 IP 相同,如果相同,则向主机 A 发送 ARP 响应
- 主机 A 收到主机 B 的 ARP 响应后,将此 mac 地址和 IP 写入 ARP 缓存
为什么不直接使用 mac 地址进行通信
全世界存在各种各样的异构网络,它们使用不同的硬件地址(网络的异构性体现),要使这些异构网络能够进行通信,就需要非常复杂的硬件地址转换工作,因此由用户主机来完成这件事几乎是不可能的,使用统一的IP地址,就使得所有的主机都在同一个IP网络内进行通信。
mac地址不具备归属地特征,不能作为地址
为什么不直接使用 IP 地址进行通信
- 因为并非每个主机都一个公网IP,很多主机都是使用的内网IP,依据NAT对外访问
- IP地址是动态变化的
IP 数据报的格式
- 版本:占 4 位,指 IP 协议的版本。目前广泛使用的协议为 4 (即 IPv4)
- 首部长度:占 4 位,可表示最大十进制数值是 15,单位是 4 字节(32位)。首部长度必须是 4 字节的倍数。由于首部至少为 20 字节,所以首部长度至少为 5
- 区分服务:占 8 位,用来获得更好的服务。一般情况下不使用这个字段
- 总长度:占 16 位,指首部和数据之和的长度,单位是字节。所以数据报的最长长度位 65535 字节。通常是极少遇到的
- 标识:占 16 位,一个存在于 IP 软件中的计数器,每产生一个数据报,计数器就加一,并把此值赋给标识字段。当数据报因为过长而分片时,多个分片的标识符相同,便于接收方进行组装
- 标志:占 3 位,但是目前只有两位有意义
- MF(More Fragment),最低位:MF = 1表示后面还有分片
- DF(Don`t Fragment),中间位:DF = 1表示不能分片
- 片偏移:占13位,较长的数据报分片后,此片在原分组中的相对位置(不是序号),以 8 个字节位单位。每个分片的长度也一定是 8 个字节的整数倍
例如,一个数据报长度为 3820 字节,数据部分为 3800 字节,20字节的首部。分为 1400、1400、1000 四个片段,则每个片段的首部的偏移分别为 0、175($1400/8$)、350($2800/8$)
- 生存时间(TTL):占 8 位,当此数据报经过一次路由器时,TTL 会被减去1,当 TTL 等于 0 时,此数据报就会被丢弃
- 协议:表示数据报的协议类型。
常见的协议 | ICMP | IGMP | IP(一种特殊的数据报) | TCP | UDP | IPv6 |
---|---|---|---|---|---|---|
协议字段值 | 1 | 2 | 4 | 6 | 17 | 41 |
- 首部检验和:占 16 位。仅检验数据报首部的数据是否正确
- 源地址:占 32 位
- 目的地址:占 32 位
- 可变字段:很少被用到
IP 层的转发分组的流程
- 从数据报的首部提取目标主机的 IP 地址 D,得出目的网络地址位 N
- 若 N 就是与此路由器直接相连的某个网络地址,则直接交付
- 若路由表中有目的地址位 D 的特定主机路由,则将数据报交给下一跳的路由器
- 若路由表中有到达网络 N 的路由,则将数据报交给下一跳的路由器
- 若路由表中有默认的路由,则将数据报交给默认路由
- 报告分组出错
划分子网
由于两级 IP 地址不够灵活,于是 IP 地址从原来的两级结构改为了通过子网掩码划分网络的 CIDR (无分类域间路由选择)模式,即 IP + 子网掩码的方式,不再有 A类、B类、C类的划分
即
通常可以使用“斜线记法”来表示 IP,即在 IP 地址后加上斜线,并写上网络前缀所占的位数
例如 IP = 128.14.35.7/20 表示 128.14.35.7 的前 20 位作为网络前缀,剩下的作为主机号。即网络前缀为:128.14.32.0
最长前缀匹配
由于使用了变长的子网掩码,导致路由表中会出现多个匹配的结果,此时应当选择匹配结果中具有最长网络前缀的路由
子网的划分方法
- 将需要的划分网络出的网络分割为最小的单元
- 不断合并最小单元,直到满足最大的网络
- 重复上述操作,直到所有网络都满足
例如,一个自治系统内有 5 个局域网,该自治系统分配到的 IP 地址块为
218.75.230.0/24
将此网络划分为 5 个子网,每个子网的设备数如下:9、28、15、13、4
首先将所有的子网的设备数加2后,向上取整至2的幂次倍数,然后再将所有值分割为最小值的 $k$ 次倍,假定最小值为 $2^n$,这里取 $n = 3$
ID | 设备数 | 加2后 | 取整后 | 分割后 |
---|---|---|---|---|
1 | 9 | 11 | 16 | 2个8 |
2 | 28 | 30 | 32 | 4个8 |
3 | 15 | 17 | 32 | 4个8 |
4 | 13 | 15 | 16 | 2个8 |
5 | 4 | 6 | 8 | 1个8 |
总计需要 13 个 长度为 8 的子网
由于 IP 地址块为218.75.230.0/24
,即可以分配的位数为 $t = 32 - 24 = 8$ 位的字符,相当于可以划分出 $2^{t - n} = 32$ 个子网,每个子网可以容纳 $6$ 台设备,此时掩码为255.255.255.248
可以分割整个 IP 地址块得到
ID | 网络号 | 掩码 |
---|---|---|
1 | 218.75.230.0 | 255.255.255.248 |
2 | 218.75.230.8 | 255.255.255.248 |
3 | 218.75.230.16 | 255.255.255.248 |
4 | 218.75.230.24 | 255.255.255.248 |
5 | 218.75.230.32 | 255.255.255.248 |
6 | 218.75.230.40 | 255.255.255.248 |
7 | 218.75.230.48 | 255.255.255.248 |
8 | 218.75.230.56 | 255.255.255.248 |
9 | 218.75.230.64 | 255.255.255.248 |
10 | 218.75.230.72 | 255.255.255.248 |
11 | 218.75.230.80 | 255.255.255.248 |
12 | 218.75.230.88 | 255.255.255.248 |
13 | 218.75.230.96 | 255.255.255.248 |
由于只需要 13 个子网,这里只罗列出前 13 个,实际上可以罗列出 32 个
按照设备数排序后划分子网得到(注意,合并后,掩码也要合并)
ID | 设备数 | 加2后 | 取整后 | 分割后 | 子网号 | 子网掩码 |
---|---|---|---|---|---|---|
2 | 28 | 30 | 32 | 4个8 | 218.75.230.0 | 255.255.255.224 |
3 | 15 | 17 | 32 | 4个8 | 218.75.230.32 | 255.255.255.224 |
4 | 13 | 15 | 16 | 2个8 | 218.75.230.64 | 255.255.255.240 |
1 | 9 | 11 | 16 | 2个8 | 218.75.230.80 | 255.255.255.240 |
5 | 4 | 6 | 8 | 1个8 | 218.75.230.96 | 255.255.255.248 |
ICMP(网际控制报文协议/互联网控制消息协议)
它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决
ICMP报文类型
报文类型 | 类型值 | 种类 |
---|---|---|
终点不可达 | 3 | 差错报告报文 |
时间超过 | 11 | 差错报告报文 |
参数问题 | 12 | 差错报告报文 |
改变路由 | 5 | 差错报告报文 |
回送请求和回答 | 8或0 | 询问报文 |
时间戳请求和回答 | 13或14 | 询问报文 |
不应发送 ICMP 差错报文的类型
- 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文
- 对非第一个分片的数据报片,不发送 ICMP 差错报告报文
- 对具有多播地址的数据报,不发送 ICMP 差错报告报文
- 对具有特殊地址的数据报(127.0.0.0或0.0.0.0),不发送 ICMP 差错报告报文
ICMP 的应用
- PING:ping 使用了 ICMP 回送请求与回送回答报文,ping 没有通过 TCP 或者 UDP
- traceroute:路由跟踪,利用了 ICMP 时间超过,通过设置 TTL 来发送一系列报文,获取源主机和目标主机之间的路由线路
互联网的路由选择协议
路由表中的路由是如何动态更新获取的
理想的路由算法
- 算法必须是正确的完整的
- 算法在计算上应简单
- 算法应能适应通信量和网络拓扑的变化
- 算法应具有稳定性
- 算法应是公平的
- 算法应是最佳的
分层次的路由选择协议
- 内部网关协议IGP:在一个小的网络系统(AS)内的路由协议,常见的有 RIP和OSPF协议
- 外部网关协议EGP:不同网络系统内的路由协议,目前使用的最多的是 BGP 的版本4(BGP-4)
RIP
一个基于距离向量的路由选择协议
距离指的是跳数,每经过一次路由器则跳数加一,相邻的路由器的跳数为1,跳数最多为 15,超过 15 表示不可达。
RIP 协议会按照固定的时间间隔和相邻的路由器交换自己的路由表,经过若干次交换后,所有路由器都会得到当前网络中任意一个网络的最优的下一跳路由器地址
算法逻辑:
- 对于来自地址为 X 的相邻路由器发送来的 RIP 报文,先将报文中的所有项目中的下一跳地址都改为 X,然后将所有的距离字段都加一
- 对于新的报文中的每一项,假定其目的网络为 N,距离为 d
- 如果自己的路由表中没有目标网络为 N 的,则直接加入到自己的路由表中(从没有数据到有数据)
- 如果有目标网络为 N 的,且下一跳地址为 X 的,则直接替换此项(更新原来旧的数据)
- 如果有目标网络为 N 的,且下一跳地址不为 X 的,则用 d 与其进行比较,选择距离小的写入路由表(选择最优的)
- 若一段时间内(3分钟)没有收到相邻的路由器的 RIP 包,则视为此路由器不可达,把其距离设定为 16
RIP的报文由首部和路由部分组成
- 首部:占 4 个字节,其中的命令字段指出报文的意义,1 表示请求路由信息,2 对请求的路由信息的响应或未被请求而发出的路由更新报文。首部后面的全 0 用于凑足 4 个字节,对齐
- 路由部分:路由部分由若干个路由信息组成,每个路由信息需要 20 个字节,最多一次可以传输 25 个路由信息
- 协议标记(地址族标识符、地址类别)表示所使用的地址协议,如果采用 IP 地址则此字段为 2
- 路由标记填入自治系统号 ASN(此字段考虑的是如果非 RIP 路由器发送的信息时,可以进行区别)
- 网络地址
- 子网掩码
- 下一跳的路由器地址
- 度量值:到此网络的距离
RIP 协议的优点:实现简单,开销小,使用 UDP
RIP 协议的问题:但是 RIP 能使用的最大距离为 15,限制了网络的规模。当网络出现故障时,要经过比较长的时间才能将此信息传递到所有的路由器(好消息传播得快,坏消息传播的慢)
OSPF
开放最短路径优先协议
使用分布式的链路状态协议,所有路由器都拥有整个网络的拓扑结构图
- 使用洪泛法向本网络中的所有路由器发送信息
- 发送的信息是本路由器相邻的所有路由器的链路状态,以及该链路的度量(费用、距离、时延、带宽等)
- 只有链路状态发生变化时,路由器才向所有路由器发送此信息
特点
- 所有路由器最终都能获得本网络中的整个路由器拓扑图
- 链路状态路由器更新速度快,收敛快
有时为了能够解决大型网络拓扑图太大的问题,OSPF 可以将网络划分为多个不同的区域,每个路由器仅知道本区域内的拓扑情况,区域之间通过区域边界路由器进行交互
OSPF 不使用 UDP 而是直接用 IP 数据报传送,减少信息的通信量
- 版本:当前的版本号为 2
- 类型
- 问候(Hello):用来发现和维持邻站的可达性,每隔 10 秒钟交换一次,如果 40 秒内没有发生交换,则认为此路由器不可达,更新数据库并且向其他路由器进行报告
- 数据库描述(Database Description):向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 链路状态请求(Link State Request):向对方请求发送某些链路状态项目的详细信息
- 链路状态更新(Link State Update):用洪泛法对全网更新
- 链路状态确认(Link State Acknowledgment):对链路更新的确认
- 分组长度:包括 OSPF 首部在内的分组长度,以字节为单位
- 路由器标识符:标志发送该分组的路由器的接口的 IP 地址
- 区域标识符:分组属于的区域的标识符
- 检验和:用来检测分组中的出错
- 鉴别类型:目前只有两种,0 和 1
- 鉴别:鉴别类型为 0 时就填入 0,鉴别类型为 1 则填入 8 个字节的口令
OSPF的特点
- 允许管理员给每条线路指派不同的代价,使得 OSPF 相对灵活
- 如果到达同一个网络有多条相同代价的路径,那么可以将通信量分配给这几条路径,使得负载平衡
- 所有在 OSPF 路由器之间交换的分组都具有鉴别的功能,保证了仅在可信赖的路由器之间交换链路状态信息
- OSPF 支持可变长度的子网划分和无分类的编址 CIDR
- 由于网络中的链路状态经常发生变化,所以链路状态会带上一个 32 位的序号,序号越大状态越新
BGP
边界网关协议(BGP)采用路径向量(path vector)路由选择协议。协议交换路由信息节点数量级是自治系统个数的数量级。刚开始运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。
- 标记:16字节长,用来鉴别收到的 BGP 报文。若不适用鉴别时,应当全为 1
- 长度:包括通用首部在内的整个 BGP 报文的长度,以字节为单位
- 类型
- OPEN:打开,用来和另一个 BGP 路由器建立关系
- UPDATE:更新,用来通知某一路由的信息,以及列出要撤销的多条路由
- KEEPALIVE:保活,用来周期性验证邻站的连通性
- NOTIFICATION:通知,用来发送检测到的错误
- 报文:
- OPEN
- 版本:1字节,现在为 4
- 本自治系统号:2字节,全球唯一
- 保持时间:2字节
- BGP 标识符:4个字节,通常为此路由器的 IP 地址
- 可选参数长度:1字节
- 可选参数
- UPDATE
- 不可行路由长度:2字节
- 撤销的路由
- 路径属性总长度:2字节
- 路径属性
- 网络层可达性信息(NLRI)
- KEEPALIVE:无报文部分
- NOTIFICATION
- 差错代码:1字节
- 差错子代码:1字节
- 差错数据
- OPEN
路由器
路由选择和分组转发
IPv6
IPv6 的长度为 128 位,而 IPv4 仅 32 位IPv4至IPv6的变化:
- 更大的地址空间
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项
- 允许的协议继续扩充
- 支持即插即用,不需要 DHCP 进行 IP 分配
- 支持资源的预分配
- IPv6 首部改为 8 字节对齐
IP 多播
实现一对多通信,主机只需要发送一个数据报,路由器负责复制数据报
- 在目的地址中使用多播的标识符(D类地址),来标识一个多播组
- 尽最大努力交付,不保证一定能交付
- 首部中的协议字段值为 2,表示使用 IGMP(网际组管理协议)
- 不产生 ICMP 差错报文
- 无法 Ping 通
IGMP
略
虚拟专用网络(VPN)和网络地址转换(NAT)
IP 地址中有一部分被指定为专有地址。当使用的是专有地址时,说明此地址并非是互联网上的地址,而是本地局域网(专用网)内的地址
10.0.0.0
至10.255.255.255
172.16.0.0
至172.31.255.255
192.168.0.0
至192.168.255.255
VPN
由于这些地址是专有地址,无法直接在互联网上访问到,所以可以使用 VPN 技术来实现内网的访问。VPN的数据在互联网段是加密数据,所以效果上和真正的专用网一样。
- 内联网:两个地区的专用网进行连接
- 远程接入VPN:在互联网上的主机访问在专用网内的主机
NAT
每个专用网拥有至少一个互联网的 IP 地址,当专用网内的主机需要和互联网通信时,通过此专用网的 IP 地址和不同端口来临时当作主机的 IP,实现对互联网的访问
多协议标志交换(MPLS)
略
运输层
运输层的协议概述
进程之间的通信
运输层使得两台主机之间的交互细化到应用程序的进程
运输层的一个很重要的功能:复用和分用
- 复用:发送方不同的应用进程都可以使用同一个运输层协议传输数据
- 分用:接收方的运输层在剥去报文的首部后,能够把这些数据正确交付目的应用程序
两个主要协议
- UDP(用户数据报协议):不需要连接,不提供可靠交互。但在某些情况下却是一种最有效的工作方式
- TCP(传输控制协议):在传输数据之前必须先建立连接,数据传送结束后,要释放连接,不提供广播或多播服务。提供可靠的、面向连接的运输服务,增加了许多开销
应用 | 应用层协议 | 运输层协议 |
---|---|---|
名字转换 | DNS(域名服务器) | UDP |
文件传送 | TFTP(简单文件传送协议) | UDP |
路由选择协议 | RIP(路由信息协议) | UDP |
IP 地址配置 | DHCP(动态主机配置协议) | UDP |
网络管理 | SNMP(简单网络管理协议) | UDP |
远程文件服务器 | NFS(网络文件系统) | UDP |
IP 电话 | 专用协议 | UDP |
流式多媒体通话 | 专用协议 | UDP |
多播 | IGMP(网际组管理协议) | UDP |
电子邮件 | SMTP(简单邮件传送协议) | TCP |
远程终端接入 | TELNET(远程终端协议) | TCP |
万维网 | HTTP(超文本传送协议) | TCP |
文件传送 | FTP(文件传送协议) | TCP |
运输层的端口
将不同的应用程序绑定至不同的端口,通过端口来区别不同的应用程序。系统同时拥有 65535 个不同的端口
- 服务器端使用的端口号
- 熟知端口号:数值范围为 0-1023 的端口
- 登记端口号:数值范围在 1024-49151 的端口
应用程序 | 端口号 |
---|---|
FTP | 21 |
TELNET | 23 |
SMTP | 25 |
DNS | 53 |
TFTP | 69 |
HTTP | 80 |
SNMP | 161 |
SNMP(trap) | 162 |
HTTPS | 443 |
- 客户端使用的端口号:数值范围为 49152-65535 临时的端口号
UDP
UDP 概述
- UDP 是无连接的
- UDP 尽最大的努力交付
- UDP 是面向报文的
- UDP 没有拥塞控制
- UDP 支持一对一、一对多、多对一、多对多的交互通信
- UDP 的首部开销小
UDP 的首部格式
- 源端口:源端口号。需要对方回信时使用,不需要时可全为 0
- 目的端口:目的端口号。这在终点交付报文时必须使用
- 长度:UDP 用户数据报的长度,其最小值为 8(仅有首部)
- 检验和:检验 UDP 用户数据报在传输中是否有错
TCP(传输控制协议)
TCP特点
- 面向连接的运输层协议
- 每条 TCP 只能连接两个端点,即{(IP1, 端口1), (IP2,端口2)}
- 提供可靠交付的服务
- 提供全双工通信
- 面向字节流
可靠传输的工作原理
- 超时重传:当发送端发送的数据后,需要等待接收端发送确认收到报告,如果在一段时间内没有收到确认收到报告,则重新发送数据
- 暂存已发送的副本:发送端发送了一个分组后,需要暂时保留已发送的分组的副本,同时对所有分组和确认分组进行编号,只有在收到了对应的编号的确认,才可以删除此副本
- 确认迟到:当收到重复的分组时,需要丢弃,但仍然需要向发送端发送确认收到
- 滑动窗口协议:可以连续发送多个分组,每收到一个请求就可以将滑动窗口向前滑动。而接收方采用累积确认,对按序到达的最后一个分组进行确认,不再对所有有分组进行确认
以上的逻辑称为自动重传请求(ARQ)
TCP 报文段的首部格式
TCP报文段首部的前20个字节是固定的
- 源端口和目的端口:各占2个字节,表示源端口号和目的端口号,与 UDP 相似
- 序号:占4个字节,表示当前数据部分中,第一个字节在整个数据流中的位置
- 确认号:占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为 N,则序号 N - 1 为止的所有数据都已经收到了
- 数据偏移:占4位,表示TCP首部的长度,单位为 32 位(4字节),最大值为 15,所以TCP首部最大为 60 字节
- 保留:占6位,保留为今后使用,但目前为0
- Flag标记:占6位
- URG(紧急):表示此数据应当紧急发送
- ACK(确认):在建立连接后的所有报文段都必须把 ACK 置为 1
- PSH(推送):很少使用,希望对方的应用程序尽快处理
- RST(复位):释放连接,拒绝打开连接
- SYN(同步):和 ACK 一起配合来实现连接的建立和释放
- FIN(终止):释放连接
- 窗口:占2个字节,表示发送本报文的主机的接受数据缓存空间,指明了现在允许对方发送的数据量
- 检验和:占2个字节,检验和字段检验的范围包括首部和数据
- 紧急指针:占2个字节,仅 URG 为 1 时有意义,指出本报文段中紧急的数据字节数
- 选项:长度可变,最长为 40 字节,且必须是 4 字节的整数倍
- MSS:数据字段长度,默认为 536 字节
TCP 可靠传输的实现
以字节为单位的滑动窗口
TCP 的滑动窗口是以字节为单位的,滑动窗口内的所有数据包会一次性发送出去,窗口内的数据表示已经发送但是未被确认。假定主机 A 收到的来自主机 B 的确认包的 ACK 为 36,那么滑动窗口将会前移至 36
超时重传时间的选择
基于 RTT,定义一个值,此值基于新的 RTT 不断更新,更新公式如下:
通常 $\alpha = 0.125$
所以定义超时重传时间
其中 $RTT_D$ 为 $RTT$ 的偏差的加权平均值,其公式如下
通常 $\beta = 0.25$
选择确认 SACK
略
TCP 流量控制
TCP 流量控制让发送方发送速率不要太快,要让接收方有足够的缓存来接受数据
如图中所示,通过 TCP 数据结构中的窗口,实现双方的流量的控制。接收方(R)在发送确认包的同时,将当前的缓存空间发送给发送方(T),使得双方能够控制传输的速度。而当程序将收到的数据读出后,再将新的空间剩余发送给发送方
TCP 零窗口死锁:当图片中第五个数据包因为意外丢失时,发送方(T) 一直在等待接收方(R) 发送的新的窗口信息,而接收方(R)也一直在等待发送方(T)发送新的数据,导致了死锁
解决办法:为每个连接设有一个持续计时器。当连接的一方收到对方的零窗口通知时,就启动计时器,在计时器到达一定的时间内,就发送一个零窗口探测报文段,而对方如果再次回复零窗口,则重置计时器,如果回复的不是零窗口,则死锁解开
TCP 的传输效率
略
TCP 拥塞控制
拥塞控制就是防止过多的数据注入到网络中,这样可以使得网络中的路由器或链路不致过载。
主要是两类控制:
- 开环控制:在设计网络时就将有关拥塞的因素考虑周全,力求网络在工作时不会产生拥塞
- 闭环控制
- 基于反馈环路,监测网络系统以便在检测到拥塞在何时何处发生
- 把拥塞的信息传送到可采取行动的地方
- 调整网络的运行以解决出现的问题
实现拥塞控制的四个方法
慢开始
- 发送方设定一个发送窗口(cwnd),即每次发送的数据不能大于发送窗口的数据(可以认为是 TCP 的滑动窗口)
- 开始时,发送窗口的大小设定为一个很小的值
- 每当发送方收到一个来自接收方的确认包时,就增大此窗口的大小
- 每当出现拥塞(超时)时,就将此窗口再次调整为很小的初始值
拥塞避免
- 设定一个窗口的极大值(ssthresh),当窗口的大小超过此极大值时,无论接受到多少个确认包,每次缓慢的增加窗口大小
- 出现拥塞时,将此极大值设置为当前窗口的一半
快重传
- 要求接收方不论收到什么数据,都要发送确认包,确认包只确认连续的数据包的最后一项
- 发送方遇到连续三次相同的确认,但是没有出现确认超时的情况(收到了确认但是并非是正确的确认信息),则认为在网络中出现了丢失数据包的情况,则立刻进行重传丢失的数据包
快恢复
- 在出现只丢失部分数据包的情况下,即出现快重传的情况时,不会将窗口设置为初始值,而是仅仅将窗口的大小减半,同时极大值设置为当前窗口的一半
图中,0-1的过程为慢开始,1-2的过程即为拥塞避免,2-3的过程中出现了数据包确认超时,4-5的过程中发生了快重传和快恢复
TCP 的运输连接管理
连接的三个阶段
- 连接建立
- 数据传送
- 连接释放
三个问题
- 要使每一方能够确知对方的存在
- 要允许双方协商一些参数
- 能够对运输实体资源进行分配
TCP 的连接建立
- 客户端(A) 和 服务器(B) 都处于 CLOSED(关闭) 状态
- B 创建传输控制模块,进入 LISTEN(收听) 状态
- A 创建传输控制模块,向 B 发送TCP连接请求,此报文中 SYN=1,且 seq=J,A 进入 SYN-SENT(同步已发送)
- B 接收到请求,如果同意建立连接,则向 A 发送数据包,此报文中 SYN=1,ACK=1,且 ack=J+1,seq=K,进入 SYN-RCVD(同步收到)
- A 收到 B 的确认后,再次给 B 发送确认数据包,此报文中 ACK=1,且ack=K+1,进入 ESTABLISHED(已建立连接)
- B 收到 A 的确认后,也进入 ESTABLISHED(已建立连接)
TCP 的连接释放
略
应用层
DNS(域名服务器)
- 功能:将域名转换为 IP 地址
域名结构:从域名的最后一个单词开始,通过
.
来分割,表示了“顶级域名”、“二级域名”、“三级域名”。例如对于域名:mail.google.com
,顶级域名为:com
,二级域名:google
,三级域名:mail
。无论域名内容是什么,一定是按照此逻辑进行分配。例如域名:mail.zjgsu.edu.cn
的顶级域名为:cn
,二级域名为:edu
,三级域名为:zjgsu
,四级域名:mail
DNS 的递归查询过程见计算机网络实验复习
递归是用户只向本地DNS服务器发出请求,然后等待肯定或否定答案。而迭代是本地服务器向根DNS服务器发出请求,而根DNS服务器只是给出下一级DNS服务器的地址,然后本地DNS服务器再向下一级DNS发送查询请求直至得到最终答案
FTP(文件传送协议)
提供文件的交互式访问
- 语序客户指明文件的类型与格式
- 允许文件具有存储权限
- 输入有效的口令
- 屏蔽了各计算机系统的细节
TFTP(简单文件传送协议)
略
TELNET(远程终端协议)
明文的远程终端协议,目前通常使用 ssh(Secure Shell 加密的网络传输协议) 来代替 TELNET
WWW(万维网)
HTTP
明文传输的超文本传输协议,由于是明文传输,很容易受到中间人攻击,植入广告
HTTPS
加密传输的超文本传输协议,不会被中间人攻击
电子邮件
SMTP(简单邮件传送协议)
IMAP和POP3(邮件接受协议)
操作位置 | 操作内容 | IMAP | POP3 |
---|---|---|---|
收件箱 | 阅读、标记、移动、删除等操作 | 客户端与邮件更新同步 | 仅在客户端内 |
发件箱 | 保存到已发送 | 客户端与邮件更新同步 | 仅在客户端内 |
创建文件夹 | 新建自定义文件夹 | 客户端与邮件更新同步 | 仅在客户端内 |
草稿 | 保存草稿 | 客户端与邮件更新同步 | 仅在客户端内 |
垃圾文件夹 | 接受并移入垃圾文件夹的邮件 | 客户端与邮件更新同步 | 仅在客户端内 |
广告邮件 | 接受并移入广告邮件夹的邮件 | 客户端与邮件更新同步 | 仅在客户端内 |