计算机网络学习笔记
- 第1章 网络概述
- 第2章 物理层
- ⭐第3章 数据链路层
- ⭐⭐第4章 网络层
- ⭐⭐第5章 传输层
- 第6章 应用层
- 补充
ACL
访问控制列表
第1章 网络概述
因特网(Internet)是世界上最大的互连网络【小写
i
的internet
是通用名词,互连的网络都叫internet
】
因特网的前身是1969年创建的第一个分组交换网:ARPANT
普通用户如何接入因特网?
通过
ISP
接入因特网。ISP
可以从因特网管理机构申请到成块的IP
地址,同时拥有通信线路以及路由器等连网设备,任何机构和个人只要向ISP
交纳规定的费用,就可以从ISP
得到所需要的IP
地址。互联网上的主机都必须有IP
地址才能通信
定义
互联、自治、计算机系统的集合
- 互连:指计算机之间可以通过有线或无线的方式进行数据通信
- 自治:指独立的计算机,它有自己的硬件和软件,可以单独运行使用
- 集合:指至少需要两台计算机
组成
-
从组成部分上看,一个完整的计算机网络主要由硬件、软件、协议三大部分组成。
硬件主要由主机(也称端系统)、通信链路(如双绞线、光纤)、交换设备(如路由器、交换机等)和通信处理机(如网卡)等组成。
软件主要包括各种实现资源共享的软件和方便用户使用的各种工具软件(如网络操作系统、邮件收发程序、FTP 程序、聊天程序等)。软件部分多属于应用层。
协议是计算机网络的核心,如同交通规则制约汽车驾驶一样,协议规定了网络传输数据时所遵循的规范。
-
从工作方式上看,计算机网络(这里主要指 Internet,即因特网)可分为边缘部分和核心部分。
边缘部分由所有连接到因特网上、供用户直接使用的主机组成,用来进行通信(如传输数据、音频或视频)和资源共享;核心部分由大量的网络和连接这些网络的路由器组成,它为边缘部分提供连通性和交换服务。
-
从功能组成上看,计算机网络由通信子网和资源子网组成。通信子网由各种传输介质、通信设备和相应的网络协议组成,它使网络具有数据传输、交换、控制和存储的能力,实现联网计算机之间的数据通信。资源子网是实现资源共享功能的设备及其软件的集合,向网络用户提供共享其他计算机上的硬件资源、软件资源和数据资源的服务。
分类
按交换技术:①电路交换网络 ②报文交换网络 ③分组交换网络
按使用者:①公用网 (Public Network)②专用网(Private Network)
按传输介质:①有线网络 ②无线网络
按传播技术:①广播式 ②点对点
- 是否采用分组存储转发与路由器选择机制,是点对点网络与广播式网络的重要区别
- 广域网基本都属于点对点网络
按覆盖范围:
①广域网WAN( Wide Area Network) ②城域网MAN(Metropolitan Area Network) ③局域网LAN( Local Area Network) ④个域网PAN( Private Area Network)
广域网和局域网之间的差异不仅在于所覆盖范围不同,还在于他们所使用的协议和网络技术不同,广域网使用点对点技术,局域网使用广播技术
若中央处理器之间的距离非常近(如仅1m的数量级或更小),则一般称为多处理器系统,而不称为计算机网络
按拓扑结构:①总线型网络 ②星型网络 ③环型网络 ④网状型网络
拓扑结构主要是指通信子网的拓扑结构
- 星形、总线型和环形网络多用于LAN,网状形网络多用于WAN
⭐性能指标
性能指标可以从不同的方面来度量计算机网络的性能
1. 速率Speed
(比特率/数据率)
比特
计算机中的数据量单位,也是信息论中信息量的单位。一个比特就是二进制数字中的一个1
或0
连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或数据率
注意:
速率提高体现在单位时间内发送到链路上的比特数增多了,而并不是比特在链路上跑得更快了。所以速率才可以称为比特率或数据率
2. 带宽(Bandwidth)
带宽在模拟信号系统中的意义
信号所包含的各种不同频率成分所占据的频率范围
单位:
Hz(kHz,MHz,GHz)
带宽在计算机网络中的意义
传送数据的能力,最高速率
单位:
b/s(kb/s,Mb/s,Gb/s,Tb/s)
一条通信线路的"频带宽度"越宽,其所传输数据的"最高数据率"也越高
3. 吞吐量(Throughput)
吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。
吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。
吞吐量受网络的带宽或额定速率的限制
4. ★时延(Delay)
在处理过程中所需要的时间
包括发送时延、传播时延、处理时延、排队时延
5. 时延带宽积
6. 往返时间(Round-Trip Time / RTT)
在许多情况下,因特网上的信息不仅仅单方向传输,而是双向交互
我们有时很需要知道双向交互一次所需要的时间
因此,往返时间RTT(Round-Trip Time)
也是一个重要的性能指标
7. ★利用率
信道利用率:用来表示某信道有百分之几的时间是被利用的(有数据通过)
网络利用率:全网络的信道利用率的加权平均
-
根据排队论,当某信道的利用率增大时,该信道引起的时延也会迅速增加。因此信道利用率不是越高越好
-
如果令$D_0$表示网络空闲时的时延,D表示网络当前的时延,那么在适当的假定条件下,可以用下面的简单公式来表示
D
、$D_0$和利用率U之间的关系 $D=\dfrac{D_0}{1-U}$
当网络利用率
U
到50%
时,时延急剧增大。当网络利用率接近
100%
时,时延趋于无穷大但是也不能使信道利用率过低,这回使宝贵的通信资源被浪费
因此一些拥有较大主干网的ISP
通常会控制它们的信道利用率不超过50%
。如果超过了,就要准备扩容,增大线路带宽
8. 丢包率
丢包率即分组丢失率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率
具体可分为:接口丢包率、结点丢包率、链路丢包率、路径丢包率、网络丢包率等
丢包率是网络运维人员非常关心的一个网络性能指标,但对于普通用户来说往往并不关心这个指标,因为他们意识不到丢包
分组丢失的两种情况
- 分组在传输过程中出现误码,被结点丢弃
- 分组到达一台队列已满的分组交换机时被丢弃,在通信量较大时就可能造成网络拥塞
丢包率反映了网络的拥塞情况
- 无拥塞时路径丢包率为
0
- 轻度拥塞时路径丢包率为
1%~4%
- 严重拥塞时路径丢包率为
5%~15%
⭐体系结构和参考模型
我们把计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之,计算机网络的体系结构就是这个计算机网络及其所应完成的功能的精确定义,它是计算机网络中的层次、各层的协议及层间接口的集合。需要强调的是,这些功能究竟是用何种硬件或软件完成的,则是一个遵循这种体系结构的实现(Implementation)问题。体系结构是抽象的,而实现是具体的,是真正在运行的计算机硬件和软件
分层体系结构
第n层实体实现的服务为第n+1层所利用。在这种情况下,第n层称为服务提供者,第n+1层则服务于用户。
每一层还有自己传送的数据单位,其名称、大小、含义也各有不同。
在计算机网络体系结构的各个层次中,每个报文都分为两部分:一是数据部分,即SDU;二是控制信息部分,即PCI,它们共同组成PDU。
$$
PDU=SDU+PCI
$$
- 服务数据单元(SDU):为完成用户所要求的功能而应传送的数据。第n层的服务数据单元记为n-SDU。
- 协议控制信息(PCI):控制协议操作的信息。第n层的协议控制信息记为n-PCI。
- 协议数据单元(PDU):对等层次之间传送的数据单位称为该层的PDU。第n层的协议数据单元记为n-PDU。
在实际的网络中,每层的协议数据单元都有一个通俗的名称,如物理层的PDU称为比特,数据链路层的PDU称为帧,网络层的PDU称为分组,传输层的PDU称为报文段。
在各层间传输数据时,把从第n+1层收到的PDU作为第n层的SDU,加上第n层的PCI,就变成了第n层的PDU,交给第n-1层后作为SDU发送,接收方接收时做相反的处理,因此可知三者的关系为
$$
n-SDU+n-PCI=n-PDU=(n-1)-SDU
$$
具体地,层次结构的含义包括以下几方面:
- 第n层的实体不仅要使用第n-1层的服务来实现自身定义的功能,还要向第n+1层提
供本层的服务,该服务是第n层及其下面各层提供的服务总和。 - 最低层只提供服务,是整个层次结构的基础;中间各层既是下一层的服务使用者,又是
上一层的服务提供者;最高层面向用户提供服务。 - 上一层只能通过相邻层间的接口使用下一层的服务,而不能调用其他层的服务;下一层
所提供服务的实现细节对上一层透明。 - 两台主机通信时,对等层在逻辑上有一条直接信道,表现为不经过下层就把信息传送到
对方。
专用术语
①实体
任何可发送或接收信息的硬件或者软件进程,通常是一个特定的软件模块
对等实体
收发双方相同层次中的实体
②协议
控制两个对等实体进行逻辑通信(这种通信实际上不存在,只是便于我们考虑问题)的规则的集合,是水平的
三要素
协议由语法,语义,同步三部分构成.
一个完整的协议通常应该具有线路管理(建立\连接\释放连接),差错控制,数据转换等功能
- 语法:定义所交换信息的格式(即报文格式)
- 语义:定义收发双方所要完成的操作(即收,发任务需要各自定义)
- 同步:定义收发双方的时序关系(如先建立侦听才可以通信是有先后顺序的)
③服务
- 在协议控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务(也就是说通过协议完成本层的内容后就可以向上提供服务)
- 要实现本层协议,还需要使用下面一层所提供的服务
- 协议是"水平的",服务是"垂直的"
- 实体看得见相邻下层所提供的的服务,但是并不知道实现该服务的具体协议。也就是说,下面的协议对上面的实体是"透明"的
服务原语:上层使用下层所提供的服务必须通过与下层交换一些命令,这些命令称为服务原语
OSI参考模型将原语划分为4类
- 请求(Requst)
- 指示(Indication)
- 响应(Response)
- 证实(Confirmation)
④服务访问点(接口)
接口是同一结点内相邻两层间交换信息的连接点,是一个系统内部的规定
在典型的接口上,同一结点内相邻两层间实体通过服务访问点SAP
进行交互,服务是通过SAP
提供给上层使用的
服务访问点SAP(Service Access Point)
:在同一系统中相邻两层的实体交换信息的逻辑接口(就像Web里的request域,后端前端都能取到),用于区分不同的服务类型,每个SAP
都有一个能唯一标识它的地址
- 链路层的服务访问点:
帧的"类型"字段
- 网络层的服务访问点:
IP数据报首部中的"协议字段"
- 运输层的服务访问点:
"端口号"
协议和服务的区别
一定要注意,协议和服务在概念上是不一样的。首先,只有本层协议的实现才能保证向上一层提供服务。本层的服务用户只能看见服务而无法看见下面的协议,即下面的协议对上层的服务用户是透明的。其次,协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层通过层间接口向上层提供的。另外,并非在一层内完成的全部功能都称为服务,只有那些能够被高一层实体“看得见”的功能才称为服务。
ISO/OSI参考模型
国际标准化组织(ISO)提出的网络体系结构模型,称为开放系统互连参考模型(OSI/RM),通常简称为OSI参考模型。OSI参考模型有7层,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。低三层统称为通信子网,它是为了联网而附加的通信设备,完成数据的传输功能:高三层统称为资源子网,它相当于计算机系统,完成数据的处理等功能。
1. 物理层(Physical Layer)
物理层的传输单位是比特,功能是在物理媒体上为数据端设备透明地传输原始比特流。物理层主要定义数据终端设备(DTE)和数据通信设备(DCE)的物理与逻辑连接方法,所以物理层协议也称物理层接口标准(物理层规程)
物理层接口标准很多,如EIA-232C、EIA/TIARS-449、CCITT的X.21等
物理层主要研究以下内容:
-
通信链路与通信结点的连接需要一些电路接口物理层规定了这些接口的一些参数,如机械形尺寸、交换电路的数量和排列等
-
物理层也规定了通信链路上传输的信号的意义和电气特征
采用什么信号表示比特0/1
注意,传输信息所利用的一些物理媒体,如双绞线、光缆、无线信道等,并不在物理层协议
之内而在物理层协议下面。因此,有人把物理媒体当作第0层
2. 数据链路层(Data Link Layer)
数据链路层的传输单位是帧,任务是将网络层传来的IP数据报
封装成帧
物理层的功能可以概括为:封装成帧、差错控制、流量控制和传输管理等
广播式网络在数据链路层还要处理新的问题,即对共享信道的访问。物理层的一个特殊的子层——介质访问层,就是专门处理这个问题的
- 标识网络中各主机(MAC地址)
- 从比特流中区分出地址和数据(数据封装格式)
- 协调各主机征用总线(媒体接入控制)
- 体验得花交换机的实现(自学习和转发帧)
- 检测数据是否出现误码(差错检测)
- 出现传输差错如何处理(可靠传输和不可靠传输)
典型的数据链路层协议有SDLC、HDLC、PPP、STP和帧中继等
3. 网络层(Network Layer)
网络层的传输单位是数据报,它关心的是通信子网的运行控制,主要任务是把网络层的协议数据单元(分组)从源端传到目的端,为分组交换网上的不同主机提供通信服务。
关键问题是对分组进行路由选择,并实现流量控制、拥塞控制、差错控制和网际互连等功能。
因特网是一个很大的互联网,它由大量异构网络通过路由器(Router)相互连接起来。因特网的主要网络层协议是无连接的网际协议(Internet Protocol,IP)
和许多路由选择协议
因特网的网络层也称网际层或IP层
注意,网络层中的“网络”一词并不是我们通常谈及的具体网络,而是在计算机网络体系结构中使用的专有名词
网络层的协议有 IP、IPX、ICMP、IGMP、ARP、RARP和OSPF等
- 表示网络和网络中的各主机(网络和主机共同编址,例如IP地址)
- 路由器转发分组(路由器选择协议、路由表和转发表)
4. 传输层(运输层)(Transport Layer)
传输层也称运输层,传输单位是报文段,传输层负责主机中两个进程之间的通信,功能是为端到端连接提供可靠的传输服务,为端到端连接提供流量控制、差错控制、服务质量、数据传输管理等服务。
数据链路层提供的是点到点的通信,传输层提供的是端到端的通信,两者不同。通俗地说,点到点可以理解为主机到主机之间的通信,一个点是指一个硬件地址或I地址,网络中参与通信的主机是通过硬件地址或地址标识的;端到端的通信是指运行在不同主机内的两个进程之间的通信,一个进程由一个端口来标识,所以称为端到端通信。
使用传输层的服务,高层用户可以直接进行端到端的数据传输,从而忽略通信子网的存在。通过传输层的屏蔽,高层用户看不到子网的交替和变化。由于一台主机可同时运行多个进程,因此传输层具有复用和分用的功能。
传输层的协议有TCP、UDP。
- 进程之间基于网络的通信(进程的标识,例如端口号)
- 出现传输差错如何处理(可靠传输和不可靠传输)
5. 会话层(Session Layer)
会话层允许同主机上的各个进程之间进行会话。会话层利用传输层提供的端到端的服务,向表示层提供它的增值服务。这种服务主要为表示层实体或用户进程建立连接并在连接上有序地传输数据,这就是会话,也称建立同步(SYN)。
会话层负责管理主机间的会话进程,包括建立、管理及终止进程间的会话。会话层可以使用校验点使通信会话在通信失效时从校验点继续恢复通信,实现数据同步。
6. 表示层(Presentation Layer)
表示层主要处理在两个通信系统中交换信息的表示方式。不同机器采用的编码和表示方法不同,使用的数据结构也不同。为了使不同表示方法的数据和信息之间能互相交换,表示层采用插象的标准方法定义数据结构,并采用标准的编码形式。数据压缩、加密和解密也是表示层可提供的数据表示变换功能。
7. 应用层(Application Layer)
应用层是OSI参考模型的最高层,是用户与网络的界面。应用层为特定类型的网络应用提供访问0SI参考模型环境的手段。因为用户的实际应用多种多样,这就要求应用层采用不同的应用协议来解决不同类型的应用要求,因此应用层是最复杂的一层,使用的协议也最多。
典型的协议有用于文件传送的FTP、用于电子邮件的SMTP、用于万维网的HTTP等。
TCP/IP模型
ARPA在研究 ARPAnet 时提出了TCP/IP 模型,模型从低到高依次为网络接口层(对应OSI参考模型中的物理层和数据链路层)、网际层、传输层和应用层(对应OSI参考模型中的会话层、表示层和应用层)。TCPIIP 由于得到广泛应用而成为事实上的国际标准。
1.网络接口层
网络接口层的功能类似于OSI参考模型的物理层和数据链路层。它表示与物理网络的接口,但实际上TCP/IP 本身并未真正描述这一部分,只是指出主机必须使用某种协议与网络连接,以便在其上传递IP分组。具体的物理网络既可以是各种类型的局域网,如以太网、令牌环网、令牌总线网等,也可以是诸如电话网、SDH、X.25、帧中继和 ATM等公共数据网络。网络接口层的作用是从主机或结点接收IP分组,并把它们发送到指定的物理网络上。
2. 网际层
网际层(主机-主机)是TCP/IP 体系结构的关键部分。它和0SI参考模型的网络层在功能上非常相似。
网际层将分组发往任何网络,并为之独立地选择合适的路由,但它不保证各个分组有序地到达,各个分组的有序交付由高层负责。网际层定义了标准的分组格式和协议,即 IP。
3. 传输层
同样和OSI参考模型中的传输层类似
1)传输控制协议(Transmission Control Protocol,TCP),能够提供可靠的交付。
2)用户数据报协议(User Datagram Protocol,UDP)。它是无连接的,数据传输的单位是用
户数据报,不保证提供可靠的交付,只能提供“尽最大努力交付”。
4. 应用层
应用层(用户-用户或进程-进程)包含所有的高层协议,如虚拟终端协议(Telnet)、文件传输协议(FTP)、域名解析服务(DNS)、电子邮件协议(SMTP)和超文本传输协议(HTTP)。
IP协议是因特网中的核心协议:TCP/IP可以为各式各样的应用提供服务(所谓的everything over IP),同时TCP/IP也允许IP协议在由各种网络构成的互联网上运行(所谓的IPover everything)。正因为如此,因特网才会发展到今天的规模。
总结:TCP/IP模型与OSI参考模型的比较
TCP/IP模型与OSI参考模型有许多相似之处。
-
都采取分层的体系结构
-
都是基于独立的协议栈的概念。
-
都可以解决异构网络的互连,实现世界上不同厂家生产的计算机之间的通信。
两个模型除具有这些基本的相似之处外,也有很多差别。
-
OSI参考模型的最大贡献就是精确地定义了三个主要概念:服务、协议和接口,这与现代的面向对象程序设计思想非常吻合。而TCP/IP 模型在这三个概念上却没有明确区分,不得合软件工程的思想。
-
OSI参考模型产生在协议发明之前,没有偏向于任何特定的协议,通用性良好。但计者在协议方面没有太多经验,不知道把哪些功能放到哪一层更好。TCP/IP模型正好相反,首出现的是协议,模型实际上是对已有协议的描述,因此不会出现协议不能匹配模型的情况,但模型不适合于任何其他非TCP/IP的协议栈。
-
TCP/IP 模型在设计之初就考虑到了多种异构网的互连问题,并将网际协议(IP)作一个单独的重要层次。OSI参考模型最初只考虑到用一种标准的公用数据网将各种不同的系给连。OSI 参考模型认识到IP的重要性后,只好在网络层中划分出一个子层来完成类似于TG模型中的IP的功能。
-
0SI参考模型在网络层支持无连接和面向连接的通信,但在传输层仅有面向连接的通信。
而TCP/IP模型认为可靠性是端到端的问题,因此它在网际层仅有一种无连接的通信,但传输层支持无连接和面向连接两种模式。这个不同点常常作为考查点OSI TCP/IP 网络层(TCP/IP叫网际层) 无/有连接 仅无连接 传输层 仅无连接 无/有连接 图1.14通信协议栈的通信过程示例
原理体系结构
学习计算机网络时,我们往往采取折中的办法,即综合OSI参考模型和TCP/IP模型
基于通信协议栈进行通信的结点的数据传输过程
当我们利用浏览器发送网页请求到服务器并发生响应的过程中,数据会怎么变化呢?
浏览器发送
- 应用层:按照
HTTP协议
的规定构建一个HTTP请求报文(请求要干什么)。应用层将HTTP请求
的报文交给运输层处理 - 运输层:给
HTTP请求
报文添加一个TCP首部(区分应用进程),使之成为TCP报文段
。运输层将TCP报文段
交给网络层处理 - 网络层:给
TCP报文段
添加一个IP首部(使之可以在互联网上传输),使之成为IP数据报
。网络层将IP数据报
交付给数据链路层处理 - 数据链路层:给
IP数据报
添加一个首部(让其能在一段链路上传输,能被相应主机接收)和一个尾部(让目的主机检查所接收到的帧是否有误码),使之成为帧。数据链路层将帧交给物理层 - 物理层:将帧看作比特流,如果网络是以太网,它还会在帧上加前导码(让目的主机做好接收帧的准备)。接着将比特流变成相应信号发送到传输媒体
路由器转发
- 物理层收到信号将其变为比特流,去掉前导码后,将其交付给数据链路层(交付的实际是帧)
- 数据链路层将帧去掉首部和尾部后,将其交付给网络层(交付的实际是IP数据报)
- 网络层解析
IP数据报
首部,从中提取目的网络地址,然后查找自身路由表,确定转发端口。接着数据链路层封装,物理层再封装,将比特流变成信号发送出去。
服务器接收
- 物理层收到信号将其变为比特流,去掉前导码后,将其交付给数据链路层(交付的实际是帧)
- 数据链路层收到帧后,去除首部和尾部,将其交付给网络层(交付的实际是IP数据报)
- 网络层收到
IP数据报
后,去除IP首部
,将其交付给运输层(交付的实际是TCP报文) - 运输层收到
TCP报文
后,从中得知是与哪个端口上的进程通信,去除TCP头部
后,交付给应用层(交付的实际是HTTP请求报文) - 应用层收到
HTTP请求
报文后,将其解析给对应进程,并执行相关操作,返回HTTP响应报文
⭐具体有哪些功能
流量控制(FLow Control)
一般来说,我们希望数据传输能快一些,但如果发送方把数据发送得过快,接收方就可能来不及接收,这会造成数据的丢失
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收(即接收缓存有可能溢出),因此流量控制可以说是一种速度匹配服务
传输层和数据链路层的流量控制的区别
传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化
例题
拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况叫做拥塞
若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
拥塞控制基本方法
-
开环控制
当网络的流量特征可以准确规定且性能要求可以事先获得时,适合使用开环控制。
- 试图用良好的设计来解决问题。
- 从一开始就保证问题不会发生。
- 一旦系统启动并运行起来,就不需要中途修正。
-
闭环控制
当网络的流量特征不能准确描述或者当网络不提供资源预留时,适合使用闭环控制。因特网采用的就是闭环控制方法。
- 基于反馈的控制方法
根据拥塞信息的反馈形式,可将闭环拥塞控制算法分为:
-
显式反馈算法
从拥塞节点(即路由器)向源点提供关于网络中拥塞状态的显式反馈信息。
-
隐式反馈算法
源点自身通过对网络行为的观察(例如超时重传或往返时间RTT)来推断网络是否发生了拥塞。TCP采用的就是隐式反馈算法。
拥塞控制并不仅仅是运输层要考虑的问题。显式反馈算法就必须涉及网络层。虽然一些网络体系结构(如ATM网络)主要在网络层实现拥塞控制,但因特网主要利用隐式反馈在运输层实现拥塞控制。
进行拥塞控制是需要付出代价的
- 可能需要在节点之间交换信息和各种命令,以便选择拥塞控制的策略并实施控制,这样会产生额外开销。
- 可能需要预留一些资源用于特殊用户或特殊情况,这样就降低了网络资源的共享程度。
然而,为了确保网络性能的稳定,不会因为输入负载的增长而导致网络性能的恶化甚至出现崩溃,使用拥塞控制而付出一定的代价是值得的。
衡量网络拥塞的指标
流量控制与拥塞控制的区别
流量控制:以接收方的接收能力控制发送方(源点)的发送速率,只与特定的点对点通信的发送方和接收方之间的流量有关
拥塞控制:源点根据各方面因素,按拥塞控制算法自行控制发送速率,全局性问题,涉及网络中所有的主机、路由器等
总结:ISO/OSI各层功能实现
灵魂拷问
1. 计算机网络和分布式计算机系统的主要区别是什么?
2. 端到端通信和点到点通信之间的区别?
直接相连的结点之间的通信称为点到点通信,不涉及程序或进程的概念
端到端通信建立在点到点通信的基础上,以完成应用程序进程之间的通信
点到点通信 | 端到端通信 | |
---|---|---|
程序或进程 | 🎏 |
第2章 物理层
考虑怎样才能在连接各种计算机的传输媒体上传输数据比特流
物理层为数据链路层屏蔽了各种传输媒体的差异,使数据链路层只需要考虑如何完成本层的协议和服务,而不必考虑网络具体的传输媒体是什么
通信基础
数据、信号、码元
数据是传送信息的实体
信号是数据的电气或电磁表现
信道上传送的信号有基带信号和宽带信号之分
基带信号将数字信号1和0直接用两种不同的电压表示
- 数字基带信号(CPU和内存传输的信号)
- 模拟基带信号(麦克风收到声音后转变的电信号)
宽带信号将基带信号进行调制后形成频分复用模拟信号
码元是指用一个固定时长的信号波形(数字脉冲)表示一位k进制数字,代表不同离散数值的基本波形。是数字通信中数字信号的基本单位
例如,在使用二进制编码时,1码元表示2bit信息量
模拟信号和数字信号
模拟信号:连续变化
数字信号:有限的离散值
信源、信道、信宿
一个通信系统通常划分为信源、信道、信宿三部分
波特率/比特率
波特率(码元传输速率/调制速率/波形速率/符号速率),单位是Baud
,码元速率与进制数无关
比特率(信息传输速率),单位是比特/秒(b/s)
若
1码元
携带n比特
的信息量,则1Baud=n bit/s
串行/并行传输
串行传输是指数据是1
个比特1
个比特依次发送的,发送端与接收端之间只用1
条数据传输线即可
并行传输是指一次发送n
个比特而不是一个比特,在发送端和接收端之间要有n
条传输线路
在计算机网络中,数据在传输线路上的传输时串行传输;而计算机内部(如CPU和内存)多使用并行传输
同步/异步传输
同步传输
指数据块以稳定的比特流形式传输,字节之间没有间隔。接收端在每个比特信号的中间时刻(有区分0,1
的标志)进行检测,以判别接收到的是比特0
还是1
由于不同设备的时钟频率存在一定差异,不可能完全相同,在传输大量数据的过程中,所产生的判别时刻的累计误差会导致接收端对比特信号的判别错位。因此需要采取方法使双方的时钟保持同步
收发双方时钟同步方法
- 外同步:在收发双方之间加一条单独的时钟信号线
- 内同步:发送端将时钟同步信号编码到发送数据中一起传输(如曼彻斯特编码)
异步传输
指以字节为独立的传输单位,字节间的时间间隔不是固定的,接收端仅在每个字节的起始处对字节内的比特实现同步,为此通常传送前要在每个字节前后加上起始位和结束位。
- 异步是指字节之间异步(字节之间的时间间隔不固定)
- 字节中的每个比特仍然要同步(各比特的持续时间是相同的)
单工/半双工/全双工通信
单工:一条信道。例如:无线电广播,电视广播
半双工:两条信道。例如:对讲机
全双工:两条信道。例如:手机
⭐奈奎斯特定理和香农定理
码间串扰
具体的信這所能通过的频率范围总是有限的。信号中的许多高頻分量往往不能通过信道,否则在传输中会衰减,导致接收端收到的信号波形失去码元之间的清晰界限,这种现象称为码间串扰
奈奎斯特定理(奈式准则)
为了避免码间单扰,极限码元传输速率为 2W波特,其中W是理想低通信道的带宽。若用 V表示每个码元离散电平的数目(码元的离散电平数目是指有多少种不同的码元,比如有16 种不同的码元,则需要 4 个二进制位,因此数据传输速率是码元传输速率的4倍)
$$
理想低通信道(无噪,带宽有限)下的极限数据传输速率=2WlogV (单位为 b/s)
$$
$$
理想带通信道下的极限数据传输速率=WlogV (单位为 b/s)
$$
低通信道就是信号的频率只要不超过某个上限值,都可以不失真地通过信道(有上限,无下限),理想低通信道的最高码元传输速率是每秒2个码元;
带通信道既有上限也有下限,,理想带通信道的最高码元传输速率是每秒1个码元实际值远低于这个值
对于奈氏准则,可以得出以下结论
-
在任何信道中,码元传输速率是有上限的。若传输速率超过此上限,就会出现严重的码间串扰问题
-
信道的频带越宽(即通过的信号高频分量越多),就可用更高的速率进行码元的有效传输。
-
奈氏准则给出了码元传输速率的限制,但并未对信息传输速率给出限制,即未对一个码元可以对应多少个二进制位给出限制。
由于码元传输速率受奈氏准则的制约,所以要提高数据传输速率,就必须设法使每个码元携带更多比特的信息量,此时就需要采用多元制的调制方法
香农定理
香农(Shannon)定理给出了带宽受限且有高斯白噪声干扰的信道的极限数据传输速率,当用此速率进行传输时,可以做到不产生误差。
$$
信道的极限数据传输速率= Wlog(1+ S/N)(单位b/s)
$$
W为信道的带宽,S 为信道所传输信号的平均功率,N 为信道内部的高斯噪声功率。S/N为信噪比(单位dB),即信号的平均功率与噪声的平均功率之比
$$
信噪比=10log_{10}(S/N)(单位为 dB)
$$
例如:
当 S/N=10 时,信噪比为 10dB,而当 S/N=1000 时,信噪比为 30dB。
对于香农定理,可以得出以下结论
-
对一定的传输带宽和一定的信噪比,信息传输速率的上限是确定的
-
信道的带宽或信道中的信噪比越大,信息的极限传输速率越高
-
只要信息传输速率低于信道的极限传输速率,就能找到某种方法来实现无差错的传输
实际值依旧低于这个值
奈氏准则只考虑了带宽与极限码元传输速率的关系,而香农定理不仅考虑到了带宽,也斜
到了信噪比。这从另一个侧面表明,一个码元对应的二进制位数是有限的。
例题
⭐编码与调制
在不改变信号性质的前提下,仅对基带信号的波形进行变换,称为编码。
把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,称为调制。
简单理解:把数据变换为数字信号的过程称为编码,把数据变换为模拟信号的过程称为调制
编码后产生的信号还是数字信号,可以在数字信道中传输,调制后产生的信号还是模拟信号,可以在模拟信道中传输
主要编码方式
①不归零编码(NRZ)
正电平代表比特1
,负电平代表比特0
。在整个码元时间内,电平不会出现零电平
这种编码方式如何区分连续几个相同电平呢?
这要求发送方发送和接收方要额外一根时钟线实现严格同步
②归零编码(RZ)
每个码元传输结束后信号都要"归零",所以接收方只要在信号归零后进行采样即可,不需要单独的时钟信号
实际上,归零编码相当于把时钟信号用"归零"方式编码在了数据之内,这称为"自同步"信号
归零编码中的大部分数据带宽都用来传输"归零"而浪费掉了(编码效率低)
③曼彻斯特编码(Manchester Encoding)
将一个码元分为两个相等的时间间隔,前高后低表示1,前低后高表示0
该编码的特点是:
在码元的中间时刻出现电平跳变,码元的中间时刻既可作为时钟同步,又表示数据。
以太网使用的编码方式就是曼彻斯特编码
④差分曼彻斯特编码
跳变仅表示时钟,码元开始处电平是否发生变化表示数据。
比曼彻斯特变化少,更适合较高的传输速率
并且抗干扰性较好
调幅(AM)、调频(FM)、调相(PM)(基本带通调制方法)
使用基本调制方法,1个码元只能包含1个比特信息
如上一个码元对应一个比特,如何能让1个码元包含多个比特呢?
可以使用混合调制。正弦信号$A\sin \omega(x+\dfrac{\varphi}{\omega})$,相位和频率是相关的,因此二者不可同时做修改
通常情况下,相位和振幅可以结合起来其一调制,称为正交振幅调制QAM
脉冲编码调制(PCM)
使用数字信号编码模拟数据,它包括三个步骤:采样、量化、编码
常用于音频信号
混合调制法QAM-16
QAM是一种用模拟信号传输数字数据的编码方式
12
种相位- 每种相位有
1
或2
种振幅可选 - 可以调制出
16
种码元(波形),即16
个形状可以用4
个二进制位排列组合表示,所以一个码元可以对应4比特
- 码元与
4
个比特的对应关系要采用格雷码【任意两个相邻码元只有一位不同】
总结:各种编码方式
曼彻斯特编码 | PCM | QAM |
---|---|---|
用数字信号传输数字数据 | 用模拟信号传输数字数据 | 用模拟信号传输数字数据 |
以太网 | 音频 |
⭐电路、报文、分组交换
①电路交换(Circuit Switching)
电话问世后,人们发现所有电话之间都两两相连是不现实的。因此可以用一个中间设备将讲话接入,根据需要进行转发
电话交换机接通电话线的方式称为电路交换
从通信资源分配角度来看,交换(
Switch
)就是按照某种方式动态地分配传输线路的资源
电路交换三个步骤
- 建立连接
- 通话(一直占用通信资源)
- 释放连接(归还通信资源)
电路交换的关键点是:用户始终占用着端到端的固定传输带宽
优点 | 缺点 |
---|---|
通信时延小:通信线路为通信双方专用的,数据直达 | 建立连接时间长 |
有序传输:通信双方只有一条专用通信线路,数据只在这一线路上传输,不存在失序问题 | 线路独占,使用效率低 |
没有冲突:不同的通信双方拥有不同的信道,不会出现争用物理通道的问题 | 不便于差错控制:只要连接所建立的物理通路中的任何一点出现了故障,就必须重新拨号建立新的连接 |
适用范围广:适用于传输模拟信号,也适用于传输数字信号 | 难以规格化 |
实时性强:时延小所以实时性强 | |
控制简单 |
②报文交换(Message Switching)
数据交换的单位是报文,报文携带有目标地址、源地址等信息。报文交换在交换结点采用存储转发的传输方式
报文大小没有限制
优点 | 缺点 |
---|---|
无需建立连接 | 引起转发时延:报文在节点交换机上要经历存储转发的过程 |
动态分配线路 | 需要较大的存储转发缓存空间:因为报文大小没有限制 |
提高线路可靠性:如果某条线路出现故障,会重新选择另一条线路 | 需要传输额外信息量:有首部等信息 |
提高线路利用率:通信双方在不同的时间分段占用物理线路 | |
提供多目标服务:一个报文可以同时发送给多个目的地址 |
③分组交换(Packet Switching)
分组交换与报文交换类似,但是限制了每次传送的数据块大小的上限,把大的数据块划分成小的数据块,构成分组Packet
分组交换还可以进一步分为面向连接的虚电路方式和无连接的数据报方式。这两种服务方式都由网络层提供
- 发送方:①构建分组 ②发送分组
- 路由器:①缓存分组 ②转发分组
- 接收方:①接收分组 ②还原报文
优点 | 缺点 |
---|---|
无需建立连接 | 引起了转发时延 |
线路利用率高 | 需要传输额外信息量(分组首部信息) |
简化存储管理:因为分组大小固定,管理起来就容易一些 | 当分组交换采用数据报服务时,可能会出现失序、丢失、重复分组。分组到达目的结点时,需要重新还原成原始报文,比较麻烦。若分组交换采用虚电路服务,虽然没有分组失序问题,但有呼叫建立,数据传输和虚电路释放三个过程 |
加速传输:因为分组是逐个传输,这样前一个交换机的转发操作与后一个交换机的存储操作可同时进行 | |
减少出错率和重复数据量:分组比报文小,因此出错概率也会比较小,即使出错也只需要重传出错的这一小部分即可 |
总结:三种交换对比
电路交换:若要传送大量数据,并且数据传送时间远大于建立连接的时间,则使用电路交换效率高。然而计算机的数据传送往往是突发式的,采用电路交换利用率会很低。、
报文交换:报文交换和分组交换都不需要建立连接(即预先分配通信资源),在传送计算机的突发数据时可以提高计算机通信线路的利用率
分组交换:相对报文交换分的更小,可以减少时延,防止过长时间占用线路,有利于差错控制
报文交换 | 分组交换 |
---|---|
没有固定的最大长度 | 传输时延更小,有固定的最大长度 |
传输媒体(传输介质)
严格来说不属于物理层,而在物理层之下。如果物理层在第1层,传输媒体在第0层
物理层接口的特性
- 机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置
- 电气特性:指明在接口电缆的各条线上出现的电压范围
- 功能特性:指明某条线上出现的某一电平的电压表示何种意义
- 过程特性:指明对于不同功能的各种可能事件的出现顺序
它是发送设备和接收设备之间的物理通路。
传输介质可分为:
- 导向型传输介质:有固体媒介
- 非导向型传输介质:空气,真空,海水等
同轴电缆、双绞线、光纤(导向型)
①同轴电缆
基带同轴电缆(50$\Omega$):数字传输,过去用于局域网
宽带同轴电缆(75$\Omega$):模拟传输,目前主要用于有线电视
由于外导体屏蔽层的作用,同轴电缆具有良好的抗干扰特性
同轴电缆价格较贵且布线不够灵活和方便,随着集线器的出现,在局域网领域基本上都是采用双绞线作为传输媒体
②双绞线
把两根互相绝缘的铜导线并排放在一起,然后按照一定规则绞合起来就构成了双绞线,这是一种古老且常用的传输媒体
绞合可以减少相邻导线的电磁干扰
常用绞合线类别、带宽和典型应用
无屏蔽双绞线电缆UTP(Unshielded Twisted Paired)
- 蓝线和蓝白线绞合
- 橙线和橙白线绞合
- 绿线和绿白线绞合
- 棕线和棕白线绞合
屏蔽双绞线电缆STP(Shielded Twisted Paired)
其与UTP
相比增加了金属丝编织的屏蔽层,提高了抗电磁干扰能力
③光纤
光纤通信利用光脉冲在光纤中的传递来进行通信。由于可见光的频率非常高(约为108MHz量级),因此一个光纤通信系统的传输带宽远大于目前其他各种传输媒体的带宽。
光纤很细,因此必须将其做成结实的光缆。一根光缆少则一根光纤,多则可包括数百根
原理
如果全反射一直进行,则光就会沿着光纤一直传输下去。
实际上只要入射角大于某个临界角度就可以发生全反射,因此多条不同角度的光可以在光线里一起传输,这种光纤称作多模光纤
- 由于色散(模式、材料、波导色散),光在多模光纤中传输一定距离后必然产生失真(脉冲展宽)
- 因此多模光纤只适合近距离传输(建筑物内)
- 发送光源可使用发光二极管(便宜);接收检测可用光电二极管
若光纤直径减小到只有一个光的波长,则光纤就像一根波导一样,可使光线一直向前传播,而不会产生多次反射,这样的光纤称作单模光纤
- 没有模式色散,在
1.31
微米波长附近,材料色散和波导色散大小相等符号相反,两者正好抵消 - 单模光纤适合长距离传输且衰减小,但其制造成本高,对光源要求高
- 发送光源需要使用激光发生器(贵);接收检测用激光检波器
纤芯直径
- 多模光纤:
50
微米,62.5
微米 - 单模光纤:
9
微米 - 纤芯外包层:
125
微米
工作波长
- 0.85微米(衰减较大)
- 1.30微米(衰减较小)
- 1.55微米(衰减较小)
优点
- 通信容量大(
25000~30000GHz
的带宽) - 传输损耗小,远距离传输时更加经济
- 抗雷电和抗电磁干扰性能好。这在大电流脉冲干扰环境下尤为重要
- 无串音干扰,保密性好,不易被窃听
- 体积小,重量轻
缺点
- 割接需要专用设备
- 光电接口价格较贵
无线电波、微波、红外线和激光(非导引)
①无线电波
低频和中频频段用地面波传播;高频和甚高频靠电离层(地球上方
100~500
千米高空的带电离子层)反射
②微波
微波会穿透电离层进入宇宙,因此其不能通过电离层反射到很远的地方
地面微波接力通信
微波是直线传播的,而地球表面是个曲面,因此传播距离受到限制,一般只有
50KM
左右;如果采用100
米高的天线塔,则传播距离可增大到100
公里。
为实现远距离通信,必须在一个微波通信信道的两个终端之间建立若干个中继站,中继站把前一阵送来的信号经过放大后再发送到下一站
卫星通信
在地球站之间,利用位于约
36000KM
高空的人造同步地球卫星作为中继器的一种微波接力,其最大特点是通信距离远,传播时延大(约250~300ms
)。低轨道卫星通信系统也已经正在部署
③红外线
- 点对点无线传输
- 直线传播,中间不能有障碍物,传输距离短
- 传输速率低(
4Mb/s~16Mb/s
)
④可见光
即光源作为信号源,前景好,暂时未被大范围应用
⭐中继器和集线器
中继器(转发器)
中继器的主要功能是将信号整形并放大再转发出去,以消除信号经过一长段电缆后而产生的失真和衰减,使信号的波形和强度达到所需要的要求,进而扩大网络传输的距离。其原理是信号再生(而非简单地将衰减的信号放大)。
中继器有两个端口,数据从一个端口输入,再从另一个端口发出。端口仅作用于信号的电气部分,而不管是否有错误数据或不适于网段的数据。
中继器是用来扩大网络规模的最简单廉价的互连设备。中继器两端的网络部分是网段,而不是子网,使用中继器连接的几个网段仍然是一个局域网。中继器若出现故障,对相邻两个网段的工作都将产生影响。由于中继器工作在物理层,因此它不能连接两个具有不同速率的局域网。
注意:如果某个网络设备具有存储转发的功能,那么可以认为它能连接两个不同的协议;如果该网络设备没有存储转发功能,那么认为它不能连接两个不同的协议。中继器没有存储转发功能,因此它不能连接两个速率不同的网段,中继器两端的网段一定要使用同一个协议
放大器
注意:放大器和中继器都起放大作用,只不过放大器放大的是模拟信号,原理是将衰减的信号放大,而中继器放大的是数字信号,原理是将衰减的信号整形再生。
集线器(多端口转发器)
集线器HUb
的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。当Hub工作时,一个端口接收到数据信号后,由于信号在从端口到Hub的传输过程中已有衰减,所以Hub便将该信号进行整形放大,使之再生(恢复)到发送时的状态,紧接着转发到其他所有(除输入端口外)处于工作状态的端口
它在网络中只起信号放大和转发作用,目的是扩大网络的传输范围,而不具备信号的定向传送能力,即信息传输的方向是固定的,是一个标准的共享式设备
Hub主要使用双绞线组建共享网络,是从服务器连接到桌面的最经济方案
由 Hub组成的网络是共享式网络,但逻辑上仍是一个总线网。Hub的每个端口连接的网络部分是同一个网络的不同网段,同时Hub也只能在半双工状态下工作,网络的吞吐率因而受到限制。
注意:多台计算机必然会发生同时通信的情形,因此集线器不能分割冲突域,所有集线器的端口都属于同一个冲突域。集线器在一个时钟周期中只能传输一组信息,如果一台集线器连接的机器数目较多,且多台机器经常需要同时通信,那么将导致信息碰撞,使得集线器的工作效率很差。比如,一个带宽为10Mb/s 的集线器上连接了8台计算机,当这8台计算机同时工作时,每台计算机真正所拥有的带宽为10/8Mb/s=1.25Mb/s。
- 使用集线器的以太网虽然物理拓扑是星型的,但逻辑上仍是一个总线网,各站共享总线资源,使用的还是
CSMA/CD
协议 - 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站网卡检测)
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
- 集线器是半双工模式,收发不能同时进行,收到帧后会广播到除本身接口外的各个接口。
5-4-3规则
中继器和集线器有“5-4-3”规则,5表示5个网段,4表示4个中继器或集线器,3表示3个网段为主机段。也就是说,在同一个由中继器或集线器互联的网络中,任意发送方和接收方最多只能经过4个路由器,5个网段
从理论上讲,中继器的使用数目是无限的,网络因而也可以无限延长。但事实上这不可能,因为网络标准中对信号的延迟范围做了具体的规定,中继器只能在此规定范围内进行有效的工作,否则会引起网络故障。例如,在采用粗同轴电缆的10BASE5 以太网规范中,互相串联的中继器的个数不能超过4个,而且用4个中继器串联的5段通信介质中只有3段可以挂接计算机,其余两段只能用作扩展通信范围的链路段,不能挂接计算机。这就是所谓的“5-4-3规则”。
灵魂拷问
基带传输、频带传输、宽带传输
如何理解同步和异步,什么是同步传输和异步传输?
奈式准则和香农定理的主要区别?
信噪比为s/N,为什么还要取10log10S/N?
⭐第3章 数据链路层
数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
为网络层提供服务
-
无确认的无连接服务
适用于实时通信或误码率较低的通信信道,如以太网
-
无确认的有连接服务
可靠性中等,无线通信
-
有确认的面向连接服务
可靠性最高
有连接就一定要有确认,即不存在无确认的面向连接服务
物理层发出去的信号需要通过数据链路层才知道是否到达目的地;才知道比特流的分界线
-
链路(Link):从一个结点到相邻结点的一段物理线路(有线或无线),中间没有任何其他交换结点
-
数据链路(Data Link):把实现通信协议的硬件和软件加到链路上,就构成了数据链路
-
帧(Frame):数据链路层以帧(Frame)为单位传输和处理数据,帧是数据链路层对等实体之间在水平方向上进行逻辑通信的协议数据单元PDU(Protocol Data Unit)
计算机中的网络适配器(网卡)和相应的软件驱动程序实现了通信协议来控制数据的传输。
一般的网络适配器都包括了物理层和链路层
组帧
数据链路层之所以要把比特组合成帧为单位传输,是为了在出错时只重发出错的帧,而不用重发全部数据,从而提高效率。
为了使接收方能正确地接收并检查所传输的帧,发送方必须依一定的规则把网络层递交的分组封装成帧(称为组帧)。组帧主要解决帧定界、帧同步、透明传输等问题。
注意:组帧时既要要加首部,又要加尾部。原因是,在网络中信息是以帧为最小单位进行传输的。所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束。(因为接收端顿收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即 IP 数据报)是包含在帧中的数据部分,所以不需要加尾部来定界。
目前较常用的组帧方法是:零比特填充法和违规编程法
字符计数法
在帧头使用一个计数字段来标明帧内字节数
字符填充的首尾定界法(面向字节)
比如PPP帧的字节填充方法
帧头帧尾有标志位用来划分一个个帧,如果帧内部恰好也出现了标志位,则在第一次扫描时在标志位前面加一个转义字符帮助区分哪个是真正的帧头。考虑到转义字符也可能在帧内部出现,因此在转义字符前也加转义字符。接收方接到消息后但凡看到转义字符开头就会去掉转义字符并且对其后一个字符不做特殊处理
零比特填充法(面向比特流)
在发送前,对帧的数据部分进行扫描,每5
个连续的比特1
后就插入1
个比特0
,防止其与首部尾部的标志位混淆
零比特填充发在硬件上很容易实现,性能上优于字符填充法
违规编程法
在物理层进行比特编码时,通常采用违规编码法。例如,曼彻斯特编码方法将数据比特“1”编码成“高-低”电平对,将数据比特“0”编码成“低-高”电平对,而“高-高”电平对和“低-低”电平对是违规的
局域网 IEEE 802 标准就采用了这种方法
但它只适用于采用冗余编码的特殊环境
透明传输
是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样(即保证接收方接到的数据是完整的数据)
比如:如果数据载荷中含有和帧头相同的字段,则可能会误认为该字段是帧尾,这样不行,即不符合透明传输
- 帧头和帧尾中含有重要的控制信息
- 帧头帧尾的作用之一就是帧定界(变成比特传输后据此区分每个帧的起始和结束)
- 为了提高帧的传输效率,应当使帧的数据部分长度尽可能大
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(
Maximum Transfer Unit
)。以太网的MTU为1500
字节
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1
可能变成0
,0
可能变成1
。这叫比特差错
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Big Error Rate
)
使用差错检测码(如Mac
帧尾的FCS
)来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
检错编码
检错编码都采用冗余编码技术,常用的检错编码有奇偶奇偶校验码和循环冗余校验码
奇偶校验(1的个数的奇偶性)
在待发送的数据后面添加
1
位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1
"的个数为奇数(奇校验)或为偶数(偶校验)
比如发送数据001
- 若是奇校验,则在数据后添加
0
,使其成为0001
,1
的个数为奇数。如果传输过程中发生了1
位误码,则1
的个数会变成偶数,据此判断是否发生误码;但是若发生了2
个误码,1
的个数依然为奇数,因此检查不出来 - 若为偶校验,则在数据后添加
1
,使其成为1001
,1
的个数为偶数,其他情况与奇校验类似
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验CRC(Cyclic Redundancy Check)
收发双方约定好一个生成多项式G(x)
。发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输。接收方通过生成多项式来计算收到的数据是否产生了误码
- CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
- 在计算机网络中通常采用检错重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务
除法内的相减实际是做异或运算
纠错编码(海明码)
流量控制和可靠传输机制
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
可靠传输:想办法实现发送端发送什么,接收端就收到什么
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
- 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
- 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
- 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求
802.11无线局域网要求数据链路层实现可靠传输
以太网不要求数据链路层实现可靠传输
ARQ协议
自动重传请求ARQ(Automatic Repeat Reques)
通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道差错的方法之一。
ARQ分三种:
- 停止-等待ARQ
- 后退N帧ARQ
- 选择重传ARQ
后两种(GBN和SR)是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续的发送,因此又称为连续ARQ协议
①停止-等待ARQ协议:SW(Stop Wait)/单帧滑动窗口
发送方发送数据DATA
,接收方接收时进行差错检测
①如果没有出现误码,则接收信息并返回ACK
确认分组给发送方,发送方收到ACK
后,一次通信结束
②如果出现误码,则丢弃信息并返回NAK
拒绝分组给发送方,发送方收到NAK
后,重传DATA
,直至出现步骤①
的情况
RTT(Round Trip Time)
ACK(Acknowledgement character)
NAK(Negative Acknowlegemnet character)
如果DATA
传送过程中丢失了,即接收端一直等DATA
,发送端一直等ACK
,造成死锁,如何解决呢?
可以引入超时重传机制
如果ACK
发送中丢失了,即接收方收不到ACK
就将数据重新发送,而数据实际上接收方已经有了,因此重复接收,造成错误,怎么办?
可以对每次发的
DATA
都加上序号,这样接收端就可以判断当前的数据是否有接收过,从而决定其去留
如果发送端发送DATA 0
,如果ACK
由于某些原因使其到达接收端的时间变长了,那么根据超时重传,DATA 0
会再次发送,而此时ACK
到达,则发送方会认为这是后一次DATA 0
的确认分组,于是马上发送DATA 1
。而第二次发送的DATA 0
此时返回ACK
,发送方误以为是DATA 1
的ACK
,因此又会发送DATA2
,而实际上DATA 1
的是否误码等情况还不知道,因此出现了错误,这种情况怎么办?
可以为
ACK
加上编号。则每个ACK
的相互作用就不会互串了。注意:
对于数据链路层点对点信道,往返时间比较固定,不会出现确认迟到的情况,因此可以不给确认分组编号
性能
$$
停止等待协议的信道利用率U=T_D/T_D+RTT+T_A
$$
缺点
当$RTT >>T_D$时(卫星链路),信道利用率就非常低
②回退N帧ARQ协议:GBN(Go Back N)/多帧滑动窗口
发送方无在确认到上一个帧ACK后才开始发送下一帧,而是可以连续发送帧
回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议
最大传输速率
- 带宽
- 发送一个数据到接收到它的确认之前,最大能发送多少个数据
相接收窗口尺寸只能等于
1
,因此接收方只能按序接收正确到达的数据分组
无差错情况
- 发送方将0-4依次连续发送,没有出现乱序和误码。
- 接收方按顺序接收他们,即每接受一个,接收窗口就向前滑动一个位置,并返回确认分组。
- 发送方每接收一个,发送窗口就向前滑动一个位置
- 发送方可以将确认收到的分组从缓存中删除了,而接收方将已接收的分组择机交付给上层处理
接收端返回
ACK n
表示发送过来的分组x<=n的都收到了,这属于累计确认机制
- 优点:即使确认分组丢失,发送方也可能不必重传,减小资源开销
- 缺点:不能及时反映出确认分组的信息
有差错情况
- 发送分组出现误码,接收方丢弃
5
- 出现了序号不匹配的情况,接收方丢弃
6701
- 发送方对之前发送的最后一个分组进行确认,每丢弃一个分组,就发送一个ACK
- 发送方重传
虽然6701
分组正确到达了接收方,但由于5
分组出现了误码,它们也受到了牵连而不被接受,这就是GBN
可见,如果因传输过程中出现误码较多一直回退,GBN的信道利用率并不比SW高
窗口尺寸有限制吗?
$$
帧序列号=n位时,发送窗口W_T<=2^n-1,接收窗口=1
$$
现在问题来了,接收方无法分辨新旧分组,进而导致重复传输这种差错
③选择重传ARQ协议:SR(Selective Repeat)
与回退N
帧相比,接收窗口允许多个,且发送窗口最大情况有所变化
接受窗口多个就意味着接收方可以无序接收
选择重传协议为了只重传出现差错的分组,接收方不能再采用累计确认,而需要对每个正确收到的分组进行逐一确认,也叫选择重传ARQ协议
三种机制的窗口大小
$$
W_T+W_R<=2n,GBN协议W_R=1,那么自然W_T最大=2n-1;SR协议默认W_R=W_T,那么自然是2^{n-1}
$$
n是n位序列号(n比特编号0)
例题
发送窗口接收到ACK
帧的部分不会超时重传
介质访问控制(MAC)协议(不是拥塞控制)
介质访问控制(Medium Access Control,MAC)所要完成的主要任务是,为使用介质的每个结点隔离来自同一信道上其他结点信。即采取一定的措施,使得两对结点之间的通信不会发生互相干扰的情况。
以协调活动结点的传输,用来决定广播信道中信道分配的协议属于数据链路层的一个子层,称为介质访问控制子层
静态划分信道介质访问控制(MAC Mutiple Access Control)
复用(Multiplexing)就是通过一条物理线路同时传输多路用户的信号。
复用的好处
当网络中传输媒体的传输容量大于多条单一信道的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
①频分复用FDM
将传输线路的总频带划分成多个子频带,形成多个子信道
各子信道之间留出隔离频带,以免造成子信道间干扰
当多个信号输入一个多路复用器时,这个复用器将每一个信号调制到不同频率的载波上,接收端由相应的分用器通过滤波将各路信号分隔开,将合成的复用信号恢复成原始的多路信号
频分复用的所有用户同时占用不同频带资源发送数据
②时分复用TDM
将时间划分为一个个等长时隙,将带宽资源按照时隙轮流分配给不同的用户,每对用户只在所分配时隙里使用线路传输数据。
时分复用技术将时间划分为一段段等长的时分复用帧(TDM帧),每一个时分复用的用户在每一个时分复用帧中占用固定序号的时隙。,
每个用户所占的时隙是周期性出现的,其周期就是时分复用帧的长度时分复用的所有用户在不同的时间占用同样的频带
③波分复用WDM(密集波分复用DWDM)
波分复用其实就是光的频分复用。
经过光调制,分别将光载波变换到不同波长。这些光波经过光复用器就可以在一根光纤中传输。到达终点后用光分用器将不同波长的光进行还原得到信息
光信号传输一段距离后会衰减,对衰减的光信号必须进行放大才能继续传输
④码分复用CDM(CDMA)
码分复用
CDM
(最初用于军事通信)是另一种共享信道的方法。
实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA
CDM
的每一个用户可以在同样的时间使用同样的频带进行通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰
在CDMA
中,每一个比特时间再划分为m
个短的间隔,称为码片。通常m
的值是64
或128
使用CDMA
的每一个站点都被指派一个唯一的m bit
码片序列(Chip Sequence)
-
一个站如果要发送比特
1
,则发送它自己的m bit
码片序列 -
一个站如果要发送比特
0
,则发送它自己的m bit
码片序列二进制反码 -
习惯上把码片序列中的
0
写为-1
,1
写为+1
如果有多个站同时发送数据,则信道中的信号就是码片序列(反码)的叠加
码片序列挑选原则:
-
分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列
-
分配给每个站的码片序列必须相互正交(规格化内积为
0
)令向量
S
表示站S
的码片序列,令向量T
表示其他任何站的码片序列。$S·T等于0$ 即规格化内积等于0,此时会有以下四个特征↓。$S·T恒等于0;S·\overline T恒等于0;S·S恒等于1;S·\overline S恒等于-1$
复用与多址的区别
复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源上看,每个子信道只占用该媒体频带资源的一部分
多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久地分配给用户的应用中,多址是不需要的(对于无线广播或电视广播站就是这样)
频分复用FDM
和时分复用TDM
可用于多点接入,相应名词是频分多址FDMA和时分多址TDMA。从某种程度上,FDMA、TDMA、CDMA可以分别看作是FDM、TDM、CDM的应用
随机访问MAC协议(动态/多点接入)
ALOHA协议
纯ALOHA比时隙ALOHA吞吐量更低,效率更低
纯ALOHA协议
不监听信道,不按时间槽发送,随即重发。即想发就发
时隙ALOPHA协议
把时间分为若干个相同的时间片,所有用户在时间片开始时刻同步接入网络信道,若发生冲突,则必须等待到下一个时间片开始时刻再发送。即控制想发就发的随意性
CSMA/CD协议(共享式以太网)
载波监听多址接入/碰撞检测(Carrier Sense Mutiple Access Collision Detection)
多个主机连接到一根总线上,当信息同一时间传送相遇时就会发生碰撞。共享总线以太网
的一个重要问题就是如何协调各主机的工作,使信息避免碰撞
为了避免各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMA/CD
CSMA/CD
适用于总线型网络或者半双工网络环境,全双工网络不需要CSMA/CD协议(收发双方可以同时发送和接收数据,不会冲突)
帧间最小间隔
96
比特时间是指发送96
比特所需要的时间,也称为帧间最小间隔。
其作用是是接收方可以检测出一个帧的结束,同时也使得其他站点都能有机会平等竞争信道并发送帧
载波监听检测到总线空闲,但是总线不一定空闲
不能完全避免碰撞
争用期(碰撞窗口)
①为什么$\tau - \frac{\delta}{2}$时刻发送碰撞?
当
D
开始发送的时,A
已经走了$\tau - \delta$时间,所以剩下路程所需要的时间是$\delta$。
又因为A
和D
发送速度是相同的,因此对于$\delta时间$的路程,每人只需要走$\dfrac{\delta}{2}时间$就会相遇,即碰撞
$碰撞时刻=\tau - \delta +\dfrac{\delta}{2}=\tau -\dfrac{\delta}{2}$
②为什么$t=\tau$时,D检测到碰撞?
根据上边推论,发现
D
走了$\dfrac{\delta}{2}的时间$路程后就发送了碰撞,此时它开始返回,经过同样的时间可以回到D
$检测到碰撞时间=\dfrac{\delta}{2}+\dfrac{\delta}{2}=\delta$
③为什么$2\tau - \delta$时,A检测到碰撞?
与
D
检测到碰撞同理,A
走了$\tau -\dfrac{\delta}{2}时间$,因此往回走也是这么多时间
$A检测到碰撞时间=\tau -\dfrac{\delta}{2}+\tau -\dfrac{\delta}{2}=2\tau - \delta$
- 主机最多经过$2\tau(即\delta→0)$的时长就可以检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延$2\tau$称为争用期(Contention)或碰撞窗口期(Collision Window),$2\tau$相当于往返传播时延
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间
- 显然,总线的长度越长(端到端往返传播时延越大)、站点数量越多,发生碰撞的可能性就越大。
因此,共享式以太网不能连接太多的主机,使用的总线也不能太长
$10Mb/s$共享总线以太网规定:
争用期$2\tau$为$512bit$发送时间,即$51.2\mu s$
因此其总线长度不能超过$5120m$
但考虑到其他一些因素,如转发器所带来的时延,以及产生碰撞时继续发送32比特或48比特认为干扰信号所持续的时间等,$\tau$实际上要更小
最小帧长(64B)
为什么需要规定最小帧长?
假设
A
向D
发送帧,如果帧很短的话,在$2\tau$内就会将帧发送完毕,帧发送完毕后不会进行碰撞检测,而此时依然有发生碰撞的可能。所以必须保证在$2\tau$时间内帧不会被发送完,在这段时间里能够保持碰撞检测
- 以太网规定最小帧长为64字节,即
512
比特(512
比特即争用期)- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于
64
字节
- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于
- 以太网的最小帧长保证了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期检测到碰撞就立即中止发送,这时已经发送出去的数据一定小于
64
字节,因此凡长度小于64
字节的帧都是由于碰撞检测而异常中止的无效帧
最大帧长(MAC帧:1518B)
当帧过长时,其他线路会迟迟得不到资源,同时也可能导致接收方缓冲区溢出,因此帧的最大长度也有规定。
截断二进制指数退避算法
当帧发送碰撞后会停止发送,退避一段时间后再次发送,而具体隔多少时间再发送需要根据退避算法得出
共享式总线以太网的各站点采用截断二进制指数退避算法(Truncated Binary Exponential Backoff)来选择退避的随机时间
该退避算法属于动态退避
极限信道利用率
-
各主机发送帧都不会产生碰撞
-
总线一旦空闲就有某个主机立即发送帧
-
每帧的发送时延为$T_0$,传播时延为$\tau$,占用信道的时间为$T_0+\tau$
$$
极限信道利用率S_{max}=\dfrac{T_0}{T_0+\tau}=\dfrac{1}{1+\dfrac{\tau}{T_0}}\
为了令S_{max}尽量大,所以应该让\dfrac{\tau}{T_0}尽量小\
即\tau尽量小(以太网端到端距离收到限制)或T_0尽量大(以太网帧尽量长)
$$
CSMA/CA协议(802.11无线局域网)
CSMA/CD协议已成功应用于有线连接的局域网,但是在无线局域网的环境下,却不能简单的搬用CSMA/CD
在无线局域网中,不能使用碰撞检测CD,主要是因为隐蔽站问题:
-
由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能差百万倍)。如果要在无线网卡上实现碰撞检测
CD
,对硬件的要求特别高。 -
即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的存在隐蔽站的问题,即在无线通信中,并非所有的站点都能听见对方。而有线网络中信号会随着总线到达各个地方,不会出现隐蔽站
站A和站C都在B的覆盖范围内,但A和B相距较远,彼此都听不见对方
当A和B检测到信道空闲时,都向B发送数据,就产生了碰撞,这就是隐蔽站问题
因此,802.11
无线局域网使用CSMA/CA
(Carrier Sense Multiple Access/Collision Avoidance, CSMA/CA)协议
相比CSMA/CD
,协议在CSMA
的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能
由于不可能避免所有的碰撞,并且无线信道误码率较高,
802.11
标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收
由于无线信道的通信质量远不如有限信道,所以802.11无线局域网不适用累计确认重传的方式,而使用链路层确认/重传机制(ARQ),即单帧确认
-
802.11
的MAC
层标准定义了两种不同的媒体接入控制方式- 分布式协调功能DCF。在
DCF
方式下,没有中心控制站点,每个站点使用CSMA/CA
协议通过争用信道来获取发送权,这是802.11
定义的默认方式 - 点协调功能PCF。
PCF
方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11
定义的可选方式,在实际中较少使用
- 分布式协调功能DCF。在
处理隐蔽站问题:信道预约
802.11
标准允许要发送数据的站点对信道进行预约
-
源站在发送数据帧之前先发送一个短的控制帧,即
请求发送RTS(Requst to send)控制帧
,RTS
能被范围内所有的站点都听到RTS帧
包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间 -
若信道空闲,则目的站就发送一个响应控制帧,即
允许发送CTS(Clear to send)控制帧
,它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中) -
源站收到
CTS
帧后,在CTS帧指明的时间内将抑制发送CTS帧有两个目的
- 给源站明确的发送许可
- 指明其他站点在预约期内不要发送
- 如果RTS帧发送碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧
- 由于RTS帧和CTS帧很短,发生碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发就会浪费很多时间,因此用很小的代价对信道进行预约往往是值得的。
802.11
标准规定了3
种情况供用户选择- 使用
RTS
帧和CTS
帧 - 不使用
RTS
帧和CTS
帧 - 只有当数据帧的长度超过某一数值时才使用
RTS
帧和CTS
帧
- 使用
虚拟载波监听
除
RTS
帧和CTS
帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11
的虚拟载波监听机制
- 由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题
- 如下图,
A
与C
虽然互相覆盖不到,但是C可收到B发出的关于A的CTS帧,从而得知A需要占用信道的时间。在这段时间里,C
不发送数据,从而解决隐蔽站带来的碰撞问题
CSMA/CA协议工作原理
帧间间隔IFS
为了尽量避免碰撞,802.11
标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS
帧间间隔的长短取决于该站点要发送的帧的类型
- 高优先级帧需要等待的时间较短,因此可优先获得发送权
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发送碰撞的机会。
常用的两种帧间间隔如下
-
短帧间间隔SIFS($28\mu m$)
最短的
IFS
,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS
的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧 -
分布协调帧间间隔DIFS($128\mu s$)
最长的
IFS
,用来发送数据帧和管理帧
信道忙NAV(Network Allocation Vector)
当某个站检测到正在信道中传送的帧首部中的"持续时间"字段时,就调整自己的网络分配向量(Network Allocation Vetor, NAV)
NAV指出了完成这次帧的传送且信道转入空闲状态所需的时间
①为什么源站检测到信道空闲后,还需要等待DIFS时间才将帧发送呢?
因为其他站此时可能有优先级更高的帧需要发送,因此有
DIFS
时间进行缓冲,若这个时间内没有高优先级的帧要发送,则说明信道是真正的空闲
②为什么目的站接收到帧后还需要等到SIFS时间才返回ACK确认帧呢?
SIFS
是最短的帧间间隔,用来分割一次对话的各帧,在这个时间里由接收状态转变为发送状态
③当其他站要发送数据,但是发现此时信道正忙时就会退避一段时间,等信道不忙后再进行操作,接着等待DIFS时间(与①同理),但为什么等待了DIFS时间后还要退避一段随机时间呢?
因为可能有多个站点在信道忙时都想发送帧,因此它们都会被搁置直至信道不忙,在
DIFS
时间后他们会同时发送,而实际上多个站点同时发送数据会碰撞。因此需要一个随机时间将他们进行错峰发送。
退避算法
CSMA和CSMACD的退避算法稍有不同。信道从忙态变为空闲态时,不仅要等待DIFS时间,还要进入碰撞窗口期,计算退避时间
仅在这种情况下才不使用退避算法:检测到信道空闲,并且该数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧
除此之外,以下情况必须使用退避算法
- 在发送数据帧之前检测到信道处于忙状态时
- 在每一次重传一个数据帧时
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用通道)
基本原理
- 在执行退避算法时,站点为退避计时器设置一个随机的退避时间
- 当退避计时器的时间减小到
0
,就开始发送数据 - 当退避计时器的时间还未减小到
0
时信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过DIFS
后,继续启动退避计时器
- 当退避计时器的时间减小到
- 在进行第
i
次退避时,退避时间在时隙编号${0,1,..,2^{i+1}-1}$中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做时为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255
时(对应第6
次退避)就不再增加了
总结:CSMA/CD和CSMA/CA区别
1)CSMA/CD 可以检测冲突,但无法避免;CSMA/CA 发送数据的同时不能检测冲突,本结点处没有冲突并不意味着在接收结点处就没有冲突,只能尽量避免。
2)传输介质不同。CSMA/CD 用于总线形以太网,CSMACA 用于无线局域网 802.11a/b/g/n等
3)检测方式不同。CSMA/CD 通过电缆中的电压变化来检测;而 CSMA/CA 采用能量检测、载波检测和能量载波混合检测三种检测信道空闲的方式。
总结:CSMACA 协议的基本思想是在发送数据时先广播告知其他结点,让其他结点在某睡
时间内不要发送数据,以免出现碰撞。CSMA/CD 协议的基本思想是发送前监听,边发送边监听
一旦出现碰撞马上停止发送。
轮询访问MAC协议:令牌传递协议(动态)
轮询协议
在轮询访问中,用户不能随机地发送信息,而要通过一个集中控制的监控站,以循环方式轮询每个结点,再决定信道的分配。当某结点使用信道时,其他结点都不能使用信道。
问题
- 轮询开销
- 等待延迟
- 单点故障(主结点故障)
令牌传递协议
典型的轮询访问介质访问控制协议是令牌传递协议,它主要用在令牌环局域网中。在令牌传递协议中,一个令牌(Token)沿着环形总线在各结点计算机间依次传递。
令牌是一个特殊的 MAC 控制帧,它本身并不包含信息,仅控制信道的使用,确保同一时刻只有一个站点独占信道。当环上的站点希望传送帧时,必须等待令牌。一旦收到令牌,站点便可启动发送帧。帧中包括目的站点地址,以标识哪个站点应接收此帧。站点只有取得令牌后才能发送数据帧,因此令牌环网不会发生碰撞。站点在发送完一帧后,应释放令牌,以便让其他站使用。由于令牌在网环上是按顺序依次传递的,因此对所有入网计算机而言,访问权是公平的。
当计算机都不需要发送数据时,令牌就在环形网上游荡,而需要发送数据的计算机只有在拿到该令牌后才能发送数据帧,因此不会发生冲突(令牌只有一个)
令牌在设备间的传递通路逻辑上必须是一个环
令牌环网过程
令牌传递到有数据发送的站点时,就修改该令牌中的一个标志位,并且附上要发送的数据,然后转发这个数据帧
应用
轮询访问控制非常适用于负载很高的广播信道
例题
局域网LAN
局域网(LAN Local Area Network)是指在一个较小的地理范围(如一个学校),将计算机、外部设备、数据库等通过双绞线等介质连接起来
双绞线为局域网的主流传输介质
局域网实现分类
-
以太网(Ethernet,最广泛,IEEE 802.3)
逻辑拓扑是总线型,物理拓扑是星型
-
令牌环(Token Ring, IEEE 802.5)
逻辑拓扑是环形,物理拓扑是星型
-
FDDI(光纤分布数字接口,IEEE 802.8)
逻辑拓扑是环形,物理拓扑是双环
-
ATM网
较新型的单元交换技术,使用53字节固定长度的单元进行交换
-
无线局域网WLAN,IEEE 802.11
局域网的主流实现:以太网Ethernet
,IEEE 802.3标准
以太网Ehernet是由Xerox公司创建并由Xerox、Intel、和DEC联合开发的基带总线局域网规范,是局域网最通用的通信协议标准。
以太网使用CSMA/CD技术对总线进行访问控制
严格来说,以太网应是符合DIX Ethernet V2标准的局域网,但实际上DIX Ethernet V2和IEEE802.3 基本相同,我们习惯上把以太网称作IEEE 802.3局域网
以太网提供无连接、不可靠的服务
以太网只实现无差错接收,不实现可靠传输
以太网传输介质、网卡
以太网常用的传输介质有四种:粗缆、细缆、双绞线、光纤
参数 | 10BASE5 | 10BASE2 | 10BASE-T | 10BASE-FL |
---|---|---|---|---|
传输媒体 | 基带同轴电缆(粗缆) | 基带同轴电缆(细缆) | 非屏蔽双绞线 | 光纤对(850nm) |
编码 | 曼彻斯特编码 | 曼彻斯特编码 | 曼彻斯特编码 | 曼彻斯特编码 |
拓扑结构 | 总线型 | 总线型 | 星型 | 点对点 |
最大段长 | 500m | 185m | 100m | 2000m |
最多结点数 | 100 | 30 | 2 | 2 |
10BASE-T非屏蔽双绞线以太网拓扑结构为星型网,中心为集线器,但使用集线器的以太网在逻辑上仍是一个总线型网,属于一个冲突域
网卡NIC(网络适配器)
要将计算器连接到以太网,需要使用相应的网络适配器
在计算机内部,网卡与CPU
之间的通信,一般是通过计算机主板上的I/O总线
以并行传输
方式进行网卡与外部以太网(局域网)
之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行传输
的方式进行的
网卡除了要实现物理层和数据链路层功能
,其中另外一个重要的功能就是要进行并行传输和串行传输的转换
。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的缓存器
在确保网卡硬件正确的情况下,为了使网卡正常工作,还应安装相应的设备驱动程序。驱动程序
负责网卡发送和接收帧
MAC地址
全世界的每块网卡在出厂时都有一个唯一的代码,称为介质访问控制(MAC)地址,这个地址用于控制主机在网络上的数据通信。他只关注比特,而不关注任何地址信息和高层协议信息
MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM
中,因此MAC
地址也被称为硬件地址MAC
地址有时也被称为物理地址。
但是MAC
地址不属于物理层,而是属于数据链路层
MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
MAC地址长6
字节,高24
位为厂商代码,低24
位为厂商自行分配的网卡序列号。严格来讲,局域网的“地址”应是每个站的名字或标识符
注意:
字节的发送顺序:第
1
字节->第6
字节
字节内的比特发送顺序:b0
->b7
;广播地址(本地多播)
FF-FF-FF-FF-FF-FF
:
即第1字节b0位=1,第1字节b1位=1,并且剩余46
比特为全1
MAC帧(以太网V2)
以太网MAC帧格式有两种标准
- DIX Ethernet V2 标准(以太网V2,流行)
- IEEE 802.3 标准
这两个差不多,仅仅“类型”字段有差别
以太网的MAC帧的长度为:64-1518
字节(最小帧长到最大帧长),以太网V2的数据链路层将封装好的MAC帧交付给物理层进行发送,物理层在发送帧之前还要在其前面添加8
字节的前导码。
如果接收方收到无效的MAC帧时,就简单将其丢弃(以太网的数据链路层没有重传机制,提供的是无连接、不可靠服务)
-
目的地址和源地址:用来填入帧的目的MAC地址和源MAC地址
-
类型字段指明数据载荷中的内容是由上一层的哪个协议封装的,以便将收到的MAC帧格式的数据载荷上交给上一层的这个协议。
- 帧检验序列FCS,由循环冗余校验(CRC)生成,接收方的网卡通过FCS的内容就可检测出帧在传输过程中是否产生了误码
高速以太网
速率达到或超过100Mb/s
的以太网叫高速以太网
-
100BASE-T以太网
支持全双工(全双工模式不需要CSMA/CD协议)
-
吉比特以太网(千兆以太网)
1Gb/s
-
10吉比特以太网
以太网从10Mb/s到10Gb/s的发展证明了以太网是可拓展的(10Mb/s到10Gb/s)、灵活的(多种传输媒体,全/半双工、共享/交换),易于安装,稳健性好
WLAN,IEEE 802.11无线局域网
WLAN(Wireless Local Area Network)IEEE于1997年制定出了无线局域网的协议标准802.11,802.11无线局域网是目前应用最广泛的无线局域网之一,人们更多地将其简称为WIFI(Wireless Fidelity, 无线保真度)
802.11无线局域网可分为以下两类:
-
有固定基础设施的
-
无固定基础设施的
固定基础设施是指预先建立的、能够覆盖一定地理范围的、多个固定的通信基站
802.11无线局域网使用最多的是它的固定基础设施的组网方式
有固定基础设施的
接入点AP
:中心基站
网络管理员需要为AP分配一个最大32字节的服务集标识符(Service Set Identifier,
SSID
)和一个无线通信信道,SSID实际上就是使用该AP的802.11无线局域网的名字本BSS内各站点之间的通信以及与本BSS外的站点之间的通信,都必须经过白BSS内的AP进行转发
基本服务集BSS
:最小构件
在一个BSS中,包含有一个AP和若干个移动站
基本服务区BSA
:一个BSS所覆盖的地理范围(无线局域网直径<100m)
拓展的服务集
一个基本服务集可以是孤立的,也可以通过AP连接到一个分配系统DS,然后再连接到另一个服务集,就构成了一个拓展的服务集ESS。分配系统的作用就是使拓展的服务集对上层的表现就像一个基本服务集一样。
ESS还可以通过Portal(门户)设备为无线用户提供到有线连接的以太网的接入。门户的作用相当于一个网桥。
无固定基础设施(自组织网络)
自组织网络没有AP,而是由一些平等状态的移动站相互通信组成的临时网络。各结点地位平等,中间节点都为转发结点,因此都具有路由器的功能
802.11无线局域网的物理层
802.11无线局域网的MAC帧
帧分三种:
-
数据帧:
用于在站点间的传输
-
控制帧:
- 通常与数据帧搭配使用
- 负责区域的清空,虚拟载波监听的维护以及信道的接入,并于收到数据帧时予以确认
- ACK帧,RTS帧以及CTS帧等都属于控制帧
-
管理帧:
- 用于加入或退出无线网络,以及处理AP之间连接的转移事宜
- 信标帧,关联请求帧以及身份认证帧等都属于管理帧
802.11无线局域网的MAC帧格式
MAC首部,30
字节数据部分,0-2312
字节(比以太网V2长很多)
802.11帧的MAC首部中最重要的是4个地址字段(都是MAC地址),地址4用于自组网络。这三个地址的内容取决于帧控制字段中的去往AP和来自AP这两个字段的数值。
地址1是直接接收数据帧的结点地址,地址2是实际发送数据帧的结点地址
注意,接收地址与目的地址不是一个概念,因为要通过AP中转
发送数据帧的情况:
A->B
A->R(路由器接口)
802.11MAC帧需要通过AP转为802.3帧
例题
VLAN,虚拟局域网
虚拟局域网VLAN(Virtual Local Area Network):一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求,每个VLAN
就是一个独立的广播域
为什么需要VLAN?
随着交换式以太网规模的扩大,广播域相应扩大,而巨大的广播域会带来很多弊端(广播风暴)
广播风暴:如果数台交换机连接了数台主机,当主机
A
要向主机B
发送数据帧,此时各交换机的MAC
表均为空,因此帧每到一个交换机就会进行泛洪,由于网络巨大,因此泛洪的范围也巨大
那么巨大的广播域应该避免,如何分割分割广播域?使用VLAN(路由器)划分广播域
- 使用路由器(成本很高,全部使用路由器隔离广播域是不现实的)
路由器工作在网络体系结构的第三层,网络层。由于路由器默认情况下不对广播数据包进行转发,因此路由器很自然的就可以隔离广播域
- VLAN
VLAN实现机制
虚拟局域网VLAN是基于交换机实现的,要求实现两个功能:
- 处理带有VLAN标记的帧,即
IEEE 802.1 Q帧
- 交换机的各个端口可以支持不同的端口类型(不同类型的端口对帧的处理方式有所不同)
IEEE 802.1 Q帧(也叫Dot One Q 帧)
对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记,用来标明计算机属于哪个虚拟局域网。因为VLAN的首部增加到了4字节,所以最大帧长从1518
变为了1522
VLAN标签
-
VLAN标签前两个字节置为
0x8100
,表示这是一个802.1Q帧 -
VLAN
标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN
-
VID
的取值范围是0~4095
(0~212-1) -
0
和4095
都不用来表示VLAN
,因此用于表示VLAN
的VID的有效范围是1~4094注意:
插入VID后,FCS字段必须重新计算
-
-
802.1Q帧时是交换机来处理的,而不是用户主机来处理的
用户不知道自己的VID值,但交换机必须知道,这样就实现了分割广播域
- 当交换机收到普通的以太网帧时,会将其插入
4
字节的VLAN标记转变为802.1Q帧
,简称"打标签" - 当交换机转发802.1Q帧时,可能会删除其
4
字节VLAN
标记转变为普通以太网帧,简称"去标签"
- 当交换机收到普通的以太网帧时,会将其插入
广域网
广域网通常是指覆盖苑围很广(远超一个城市的范围)的长距离网络。广域网是因特网的核心部分。
连接广域网各结点交换机的链路都是高速链路。它可以是长达几千千米的光缆线路,也可以是长达几万千米的点对点卫星链路。因此广域网首要问题是保证通信容量足够大
广域网不等于互联网。互联网可以连接不同类型的网络(既可以连接局域网,又可以连广域网,互联网用路由器连接)。
广域网通常用一些结点交换机(注意不是路由器)连接
结点交换机和路由器都用来转发分组,它们的工作原理也类似。
区别是结点交换机在单个网络中转发分组,而路由器在多个网络构成的互联网中转发
从层次上看,局域网主使用的协议要在数据链路层,而广域网使用的协议主要在网络层
总结:广域网和局域网区别
广域网 | 局域网 | |
---|---|---|
覆盖范围 | 跨区域 | |
连接方式 | 点到点 | 多点接入 |
OSI参考模型层次 | 物理层,数据链路层,网络层 | 物理层,数据链路层 |
PPP协议
广域网应用最广泛的数据链路层协议:点对点协议PPP(Point-to-Point Protocol),用于规定帧格式,使之成为各种主机、网桥和路由器之间简单连接的一种共同的解决方案。PPP是使用串行线路通信的面向字节的协议
PPP链路的连接过程
PPP帧
注意:因为PPP是点对点的,并不是总线形,所以不用CSMA/CD协议,自然就没有最短帧,所以数据部分是0-1500B
,而不是46-1500B
PPP帧的字节填充法
面向字节的异步链路采用插入转义字符的字节填充法,如果PPP用在异步链路(默认),就采用字节填充法
PPP也可以采用比特填充,这种情况下PPP用在SONET/SDH等同步链路
- 如
PPP
帧的标志字段取值为7E(16进制)
,如果数据中出现7E
则需要在数据前插入转义字符7D(16
进制),并将原来的7E减20(16
进制),所以7E
在数据中最终会变成7D5E
- 如果数据中有转义字符7D怎么办呢?可以在转义字符
7D
前再加一个转义字符7D
,并将数据的7D
减20(16进制)
,于是转义字符7D
在数据中最终会变成7D5D
- 数据中出现的每一个
ASCII
码控制字符【数值小于20(16进制)的字符】,则在该字符前插入一个7D,同时将该字符的编码加上20(16进制) - 接收方只需要反变换即可恢复出原来的帧的数据部分
总结:PPP协议的特点(对比广域网的特点)
- PPP协议提供差错检测但是不提供纠错功能,只保证无差错接收(CRC校验),它是不可靠的传输协议,因此也不使用序号和确认机制
- 仅支持点对点的链路通信,不支持多点线路(PPP属于广域网,这点就属于广域网和局域网的区别了)
- PPP只支持全双工链路
- PPP两端可以运行不同的网络层协议,但仍然可以使用同一个PPP进行通信
- PPP是面向字节的
数据链路层设备:交换机
交换机:也称交换式集线器,二层交换机。实质上是具有多个接口的网桥。交换机的自学习和转发帧的流程与网桥是相同的。另外,交换机也使用生成树协议STP,来产生能够连通但不产生环路的通信路径。以太网交换机一般都具有多种速率的接口。二层是指:以太网交换机工作在数据链路层(也包括物理层)以太网交换机是一种即插即用的设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的
交换式以太网:仅使用交换机,不适用集线器
网桥(Bridge)
网桥(Bridge)工作在数据链路层(包含其下的物理层),因此网桥具备属于数据链路层相关能力
-
网桥可以识别帧的结构
-
网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧
网桥的主要结构和基本工作原理
- 转发表是网桥转发帧的依据,里面记录有个主机的MAC地址与自己各接口的对应关系
- 网桥的接口在向其连接的网段转发帧时,会执行相应的媒体接入控制协议。对于共享式以太网就是CSMA/CD协议
网桥转发帧
网桥丢弃帧
注意网桥转发广播帧,是不查转发表的
透明网桥的自学习和转发帧流程
显然,网桥的转发表对于帧的转发骑着决定性的作用,那么,转发表是如何建立的呢?
透明网桥(Transparent Bridge)通过自学习算法建立转发表
透明网桥中的透明,是指以太网中的各站点并不知道自己所发送的帧将会经过哪些网桥的转发,最终到达目的站点。也就是说,以太网中的各网桥对于各站点而言是看不见的
透明网桥的标准是IEEE 802.1D,它通过一种自学习算法基于以太网中各站点间的相互通信逐步建立起自己的转发表
- 网桥收到帧后进行登记(自学习),自学习的内容为帧的源MAC地址和进入网桥的接口号
- 网桥根据帧的目的MAC地址和网桥的转发表对帧进行转发,包括以下三种情况:
- 明确转发:网桥知道应当从哪个接口转发帧
- 盲目转发:网桥不知道应当从哪个接口转发帧,只能将其通过除进入网桥的接口外的其他所有接口转发
- 丢弃:网桥知道不应该转发该帧,将其丢弃
注意:
- 如果网桥收到有误码的帧则直接丢弃
- 如果网桥收到一个无误码的广播帧,则不用进行查找,而是直接转发
- 转发表中的每条记录都有其有效时间,到期自动删除。这是因为各站点的MAC地址与网桥接口的对应关系并不是永久性的,例如某个站点更换了网卡,其MAC地址就会改变
透明网桥的生成树协议STP
为了提高以太网的可靠性,有时需要在两个以太网之间使用多个透明网桥来提供冗余链路,但是冗余链路会造成网络环路的问题
若网桥B1和B2的转发表中都没有待转发单播帧目的MAC地址的相关记录,则该单播帧也会引起类似的情况
网络中的广播帧充斥网络,资源浪费,无法通信(广播风暴)
透明网桥使用生成树协议(Spanning Tree Protocol, STP),STP
可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
生成树原理
- 不论交换机之间采用怎样的物理连接,网桥之间通过交互网桥协议单元(Bridge Protocol Data Unit, BPDU)找出原网络中拓扑的一个连通子集(即生成树),在这个子集里整个连通的网络中不存在环路
- 最终生成树的逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),网桥(交换机)都将进行生成树重新计算
交换机(Switching Hub)
- 以太网交换机一般都工作在全双工方式。以太网交换机具有并行性。
- 交换机每个接口是一个独立的碰撞域
- 当交换机的接口与计算机或交换机相连时,每一对相互通信的计算机都能像独占传输媒体那样,无碰撞的传输数据,这样就不需要使用
CSMA/CD
协议了,交换机通常工作在这种全双工模式下 - 当交换机的接口连接的是集线器时,该接口就只能使用
CSMA/CD
协议,并且只能工作在半双工模式 - 交换机一般都具有多种速率的接口,例如 10Mb/s、100Mb/s、1Gb/s甚至10Gb/s的接口,大部分接口支持多速率自适应
交换机自学习和转发帧流程(参考网桥)
交换机工作方式
- 存储转发(一般情况)
- 直通交换(为了较小交换机的转发时延)
采用直通交换的交换机,在接受帧的同时就立即按帧的目的地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后处理
- 直通交换的时延非常小
- 直通交换不检查差错就直接将帧转发出去,有可能会将一些无效帧转发给其他主机
交换机端口类型
- Access
- Trunk
- Hybird(华为私有)
思科交换机没有Hybird端口
交换机各端口的VID
思科交换机上叫Native VLAN,即本征VLAN
华为交换机上叫Port VLAN ID,即端口VLAN ID,
PVID
每个端口有且只有一个PVID。默认情况下端口的PVID
都为1
(即端口属于VLAN 1
)
端口上接收时总希望能够打上标签,发送出去时候总希望能去除标签
①Access端口
-
Access
端口一般用于终端设备与交换机之间注意:交换机与路由器连接的接口也需要使用
access
接口。这是因为路由器中的消息也不带VLAN
标签,就像终端一样,保证路由器的数据能够进入交换机领域,数据由路由器进入交换机是会被打上默认标签,接着才按照交换机间VLAN
的规则行走。简单理解就是把路由器当作终端 -
交换机初始端口类型是Access
-
Access端口只能属于一个VLAN
-
Access
端口的PVID值与端口所属VLAN的ID相同(默认为1
) -
Access
端口接收方法- 一般只接收"未打标签"的普通以太网MAC帧。根据接收帧的端口
PVID
值给帧"打标签",即插入4
字节的VLAN
标记字段,字段中的VID
取值与端口PVID
取值相等
- 一般只接收"未打标签"的普通以太网MAC帧。根据接收帧的端口
-
Access
端口发送处理方法- 若帧中的VID与端口的PVID相等,则"去标签"并转发该帧;否则不转发
用Access端口实现VLAN
②Trunk端口
Trunk
端口一般用于交换机之间或交换机与路由器之间的互连Trunk
端口可以属于多个VLAN- 用户可以设置
Trunk
端口的PVID
值,默认情况下,Trunk
端口PVID
值为1
Trunk
端口发送处理方法- 对VID等于PVID的帧,"去标签,再转发"
- 对VID不等于PVID的帧,直接转发
Trunk
端口接收处理方法- 接收"未打标签"的帧。根据接收帧的端口的PVID给帧"打标签",即插入
4
字节的VLAN
标记字段,字段中的VID
取值与端口的PVID
取值相等 - 直接接收"已打标签的帧"
- 接收"未打标签"的帧。根据接收帧的端口的PVID给帧"打标签",即插入
用Trunk端口实现VLAN
③Hybrid端口(华为私有)
总结
练习
例题
总结:共享式以太网与交互式以太网的对比(集线器和交互机的对比)
- 单播帧
- 广播帧
尽管集线器和交换机对于广播帧的效果是相同的,但是它们的工作原理不同。
集线器只工作在物理层,它并不能识别帧首部中的目的MAC地址,因为这属于数据链路层的范畴,不管是单播帧还是广播帧,集线器仅仅将表示帧的信号从其他所有接口转发出去。
而交换机工作在数据链路层,它可以识别帧的结构,从帧首部中提取出目的MAC地址,知道这是一个广播帧(虽然不查转发表)
- 多主机同时通信
- 使用集线器和交换机扩展共享式以太网的区别
集线器及扩大了广播域又扩大了碰撞域
交换机扩大了广播域,没有大碰撞域
例题
灵魂拷问
链路和数据链路有什么区别?
对于选择重传协议。若有n比特进行编号,则接受窗口最大值为$2^{n-1}$
数据链路层使用PPP协议或者CSMA/CD协议时,既然不保证可靠传输,为什么要对所传输的帧进行差错检验?
为什么PPP协议不适用帧的编号和确认机制来实现可靠传输?
⭐⭐第4章 网络层
网络层功能
主要任务是实现网络互连,进而实现数据包在各网络之间的传输
可以将该任务分为分组转发和路由选择两种重要的功能
网络层向其上层提供两种服务
- 虚电路服务
- 数据报服务
提供的服务:数据报和虚电路
面向连接的虚电路服务
- 可靠的通信由网络来保证
- 必须建立网络层的连接----虚电路VC(
Virtual Circuit
) - 通信双方沿着已建立的虚电路发送分组
- 目的主机的地址仅在连接建立阶段使用,之后每个分组的首部只需携带一条虚电路的编号(构成虚电路的每一段链路都有一个虚电路编号)。
- 这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方(无差错按序到达、不丢失、不重复)。
- 通信结束后,需要释放之前所建立的虚电路
- 很多广域分组交换网都使用面向连接的虚电路服务。例如,曾经的X.25和逐渐过时的帧中继(Frame Relay,FR)、异步传输模式(Asynchronnous Transfer Mode,ATM)
无连接的数据报服务
-
可靠通信应当由用户主机来保证
-
不需要建立网络层连接
-
每个分组可走不同路径
-
每个分组的首部必须携带目的主机的完整地址
-
这种通信方式所传送的分组可能误码、丢失、重复和失序
-
由于网络本身不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉
因特网采用了这种设计思想,也就是将复杂的网络处理功能置于因特网的边缘(用户主机和其内部的运输层),而将相对简单的尽最大努力的分组交付功能置于因特网核心
总结:数据报和虚电路比较
数据报服务 | 虚电路服务 | |
---|---|---|
连接的地址 | 不需要 | 必须 |
目的地址 | 每个分组都有完整的目的地址 | 仅在连接建立阶段使用,之后每个分组使用长度较短的虚电路号 |
路由选择 | 每个分组独立地进行路由选择和转发 | 属于同一条虚电路的分组按照同一路由转发 |
分组顺序 | 不保证有序 | 有序 |
可靠性 | 不保证可靠通信,可靠性由用户主机保证 | 可靠性由网络保证 |
对网络故障的适应性 | 出故障的结点丢失分组,其他分组路径选择发生变化时可以正常传输 | 所有经过故障结点的虚电路均不能工作 |
差错处理和流量控制 | 由用户主机进行流量控制,不保证数据报的可靠性 | 可由分组交换网负责,也可由用户主机负责 |
异构网络互联
要在全球范围内钯数以百万计的网络互连起来,并且能够互相通信,是一项非常复求的任务(不同的寻址方案、不同的网络接入机制、不同的差错处理方法,不同的路由选择机制等等)。用户的需求是多样的,没有一种单一的网络能够适应所有用户的需求,网络层所要研究的任务之一就是使这些异构的网络互连。
网络互连是指将两个以上的计算机网络,通过一定的方法,用一些中间设备(又称中继系统)相互连接起来,以构成更大的网络系统。根据所在的层次,中继系统分为以下4种。
- 物理层中继系就:转发麝,集线器。
- 数据链路层中继系統:网桥或交换机。
- 同络层中继系統:路由器。
- 网络层以上的中继系统:网关。
使用物理层或数据链器是的中继系统时,只是把一个网络扩大了,而从网络层的角度看,它仍然是同一个网络,一般并不称为网络互连。
因此网络互连通常是指用路由器进行网络互连和路出选择。
路由器是一台专用计算机,用于在互联网中进行路由选择。由于历史原因,许多有关 TCP/IP 的文献也把网络层的路由器称为网关
TCP/IP 体系在网络互连上采用的做法是在网络层采用标准化协议,但相互连接的网络可以是异构的。该图表示用许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的 IP 协议,因此可以把互连后的网络视为一个虚拟的IP网络。
虚拟 IP 网络
虚拟互连网络(逻辑互连网络),这种使用 IP 协议的虚拟互连网络可简称为 IP 网络。
使用 IP网络的好处是:当IP 网上的主机进行通信时,就好像在一个单个网络上通信一样,而看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议等)
路由与转发
路由器主要有两个功能:
-
路由选择
根据特定的路由选择协议构造出路由表,同时不断更新和维护路由表
-
分组转发
处理通过路由器的数据流,关键是路由表转发、查询、相关的队列管理和任务调度等
路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化。在讨论路由选择的原理时,往往不去区分转发表和路由表
SDN
拥塞控制
参考第一章拥塞控制
路由算法
静态路由和动态路由
路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。
从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类。
-
静态路由算法(非自适应路由算法)
指由网络管理员手工配置的路由信息。当网络的拓扑结构或链路的状态发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息。
特点它不能及时适应网络状态的变化,对于简单的小型网络,可以采用静态路由。
-
动态路由算法(自适应路由算法)
指路由器上的路由表项是通过相互连接的路由器之间彼此交换信息,然后按照一定的算法优化出来的,而这些路由信息会在一定时间间隙里不断更新,以适应不断变化的网络,随时获得最优的寻路效果。
特点
静态路由算法的特点是简便和开销较小,在拓扑变化不大的小网络中运行效果很好。动态路
由算法能改善网络的性能并有助于流量控制;但算法复杂,会增加网络的负担,有时因对动态变
化的反应太快而引起振荡,或反应太慢而影响网络路由的一致性,因此要仔细设计动态路由算法,
以发挥其优势常用的动态路由算法可分为两类:距离-向量路由算法和链路状态路由算法。
距离-向量路由算法(动态)
在距离-向量路由算法中,所有结点都定期地将它们的整个路由选择表传送给所有与之直接相邻的结点。这种路由选择表包含:
-
每条路径的目的地(另一结点)
-
路径的代价(距离)
注意:这里的代价是一个抽象的概念,如
RIP
就将距离定义为“跳数”。跳数指从源端口到达目的端口所经过的路由器个数,每经过一个路由器,跳数加1
在这种算法中,所有结点都必须参与距离向量交换,以保证路由的有效性和一致性,也就是说,所有的结点都监听从其他结点传来的路由选择更新信息,并在下列情况下更新它们的路由选择表
链路状态路由算法(动态)
链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息,典型的链路状态算法是 OSPF 算法。
在一个链路状态路由选择中,一个结点检查所有直接链路的状态,并将所得的状态信息发送给网上的所有其他结点,而不是仅送给那些直接相连的结点。每个结点都用这种方式从网上所有其他的结点接收包含直接链路状态的路由选择信息。
每当链路状态报文到达时,路由结点便使用这些状态信息去更新自己的网络拓扑和状态“视野图”,一旦链路状态发生变化,结点就对更新的网络图利用 Dijkstra 最短路径算法重新计算路由,从单一的源出发计算到达所有目的结点的最短路径。
链路状态路由算法主要特征:
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法,即路由器通过所有端口向所有相邻的路由器发送信息。
应用
由于一个路由器的链路状态只涉及相邻路由器的连通状态,而与整个互联网的规模并无直接关系,因此链路状态路由算法可以用于大型的或路由信息变化聚敛的互联网环境。
优点
链路状态路由算法的主要优点是,每个路由结点都使用同样的原始状态数据独立地计算路径,而不依赖中间节点的计算。即链路状态不加以改变地传播,易于查找故障
链路状态报文仅运载来自单个结点关于直连链路地信息,其大小与网络中路由结点数目无关,因此链路状态算法比距离-向量算法有更好的规模和可伸展性
总结:距离-向量路由算法和链路状态路由算法比较
距离-向量路由算法(RIP) | 链路状态路由算法(OSPF) |
---|---|
仅和邻居 | 广播 |
可能遇到路由环路问题 |
IP协议概述
网际协议(Internet Protocol,IP)是TCP/IP体系结构网际层中的核心协议。
网际协议IP
、传输控制协议TCP
、TCP/IP
体系结构是由“因特网之父”Robert Kalm和Vint Cerf二人共同研发的,1974年5月发布了TCP/IP的第一个版本
IP数据报发送转发过程
同一个网络之间的主机可以直接通信,不同网络之间的主机通信需要路由器中转
IP数据报的发送和转发过程包括以下两个过程:
- 主机发送IP数据报
- 路由器转发IP数据报
源主机如何判断目的主机是否和自己在同一个网络中?
将自身的
IP
地址与子网掩码相与得到自身的网络号1
,再将目的IP
地址与自身子网掩码相与得到网络号2
。若两个网络号相等,则说明处在同一个网络
主机如何知道应该把IP数据报交给哪个路由器进行转发呢?
通过设置默认网关。
所谓默认网关,即当路由表中查不到数据时会将数据发往的路由器端口IP
地址
路由器收到IP数据报
后如何转发?
-
检查收到的IP数据报是否正确
生存时间是否结束;首部是否误码
若不正确,则丢弃该IP数据报,并向发送该IP数据报的源主机发送差错报告 -
基于IP数据报首部中的目的IP地址在路由表中进行查找
若找到匹配的路由条目,则按该路由条目的指示进行转发
否则丢弃该IP数据报,并向发送该IP数据报的源主机发送差错报告
将目的IP
地址与自身子网掩码相与得到网络号
广播IP数据报
的情况
路由器不转发广播IP数据报,即路由器隔离广播域。
如果因特网中数量巨大的路由器收到广播IP数据报后都进行转发,则会造成巨大的广播风暴,严重浪费因特网资源
例题
IPv4
IPv4即现在普遍使用的IP协议(版本4)。
IP协议定义数据传送的基本单元——IPv4分组及其确切的数据格式
IP协议也定义一些规则包括:指明分组如何处理、错误怎样控制。特别是IP协议还包括非可靠投递的思想,以及与此关连的分组路由选择的思想
IPv4分组
IP协议定义数据传送的基本单元——IP分组及其确切的数据格式
在TCP/IP标准中,各种数据格式常常以
32比特
(即4字节
)为单位来描述
-
固定部分
每个
IPv4数据报
都必须要包含的部分 -
某些
IPv4数据报
的首部,除了包含20
字节的固定部分,还包含一些可选字段来增加IPv4数据报的功能 -
标识、标识、片位移共同用于
IPv4数据报分片
什么叫数据报分片?
最大传送单元MTU
以太网的MTU是1500B
IPv4数据报分片
标识、标志、片偏移区分出了一个IP数据报分片
IPv4数据报首部格式
-
版本
占
4
比特
通信双方使用的IP
协议版本必须一致。目前广泛使用的IP
协议版本为号为4
(IPv4) -
首部长度
占
4
比特,该字段取值以4
字节为单位最小取值为
0101
(十进制取值为5
)表示IP数据报首部只有20字节
固定部分
(4
字节单位,所以取值5
对应20
字节)最大取值为
1111
(十进制取值为15
),表示IP数据报首部包含20字节固定部分和最大40字节可变部分(
4
字节单位,所以取值15
对应60
字节) -
可选字段(实际很少采用)
长度从
1-40
个字节不等。用来支持排错、测量及安全等措施可选字段增加了
IP
数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用 -
填充字段
确保首部长度为
4
字节长度的整数倍,使用全0
进行填充 -
区分服务(一般不使用)
占
8
比特
利用该字段的不同数值可提供不同等级的服务质量,只有在使用区分服务时,该字段才起作用。一般情况下不使用该字段 -
总长度
占
16
比特,以字节为单位,表示IP
数据报的总长度(首部+数据载荷)
最大取值:$2^{16}-1$(十进制65535
) -
标识
占
16
比特,属于同一个数据报的各分片数据报应该具有相同的标识IP
软件维持一个计数器,每产生一个数据报,计数器值+1
,并将此值赋给标识字段 -
标志 x _ _
占
3
比特,各比特含义如下- 最低位
MF(More Fragment)
:1
表示不允许分片,0
表示允许 - 中间位
DF(Don’t Fragment)
:1
表示后面还有分片,0
表示这是最后一个分片 - 最高位为保留位:必须为
0
- 最低位
-
片偏移(必须是整数)
占
13
比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少单位片偏移以8个字节为单位
-
生存时间
占
8
比特,最初以秒为单位,最大生存周期为$(11111111)$(十进制255秒
)
路由器转发IPv4数据报
时,将IP
数据报首部中的该字段值减去IP
数据报在本路由器上耗费的时间,若不为0
【说明路由器消耗时间后还活着】就转发,否则丢弃现在以"跳数"为单位,路由器转发IP数据报时,将IP数据报首部中的该字段值减1,若不为0就转发,否则丢弃【防止兜圈】
-
协议
占
8
比特,指明IPv4
数据报的数据部分是何种协议数据单元 -
首部检验和
占
16
比特,用来检测首部在传输过程中是否出现差错,比CRC
检验码简单,称为因特网检验和
IP
数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段【生存时间、标志、片偏移等】的取值可能发生变化由于
IP
层本身不提供可靠传输服务,并且计算首部校验和是一项耗时的操作,因此在IPv6
中,路由器不再计算首部校验和,从而更快转发IP
数据报 -
源IP地址和目的IP地址
各占
32比特
,用来填写发送该IP
数据报的源主机IP
地址和接收该IP
数据报的目的主机
总结:IP数据报首部
在IP数据报首部中有三个关于长度的标记:首部长度4B、总长度1B、片位移8B,需要记住
例题
IPv4分类编址与NAT
IPv4
地址就是因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32
比特(4B)的标识符IPv4
地址由因特网名字和数字分配机构(Internet Corporation for Assigned Names and Numbers,ICANN
)进行分配
IPV4地址的编址方法经历了三个阶段
无论哪一类IP地址,都由主机号和网络号组成
IP地址特点
- 每个IP地址都有网络号和主机号两部分组成。IP地址管理机构ICANN分配地址时只分配网络号,而主机号由该分配到网络的单位自行分配,方便了IP地址的维护和管理;路由器只根据目的主机的网络号来转发分组(不考虑主机号),减小了路由表的存储空间
- 用转发器或桥接器(网桥等)连接的若干LAN仍然是同一个网络(同一个广播域),因此该LAN中的所有主机的IP地址网络号必须相同,主机号必须不同
- 在IP地址中,所有分配到网络号的网络(无论是LAN还是WAN)都是平等的
- 路由器的每个端口都有一个不同网络号的IP地址
IPv4地址的表示方法——点分十进制表示方法
32
比特的IPV4地址不方便阅读,记录以及输入等,因此IPV4地址采用点分十进制表示方法
特殊的IP地址
-
202.98.174.0 ,主机号全0标识网络本身
-
202.98.174.255,主机号全1标识本网络的广播地址(直接广播地址)
-
127.x.x.x,保留为环回自检(Loopback Text)地址,此地址表示网络本身,目的地址为环回地址的IP数据报永远不会出现在任何网络上
-
0.0.0.0,32位全为0,表示本网络上的主机
-
255.255.255.255,32位全为1,表示整个TCP/IP网络的广播地址(受限广播地址)
实际使用时,由于路由器对广播域的隔离,255.255.255.255等效为本网络的广播地址
早期IPv4编址:分类编址
网络类别 | 最大可用网络数 | 网络号 | 每个网络可分配的地址数 |
---|---|---|---|
A(0) | $2^{8-1}-2=126$ | 1——126 | $2^{24}-2$ |
B(10) | $2^{16}=16384$ | 128.0——191.255 | $2^{16}-2$ |
C(110) | $2^{24-3}=2097152$ | 192.0.0——223.255.255 | $2^{8}-2$ |
D(1110),多播 | 224.0.0.0——239.255.255.255 | ||
E(1111),保留 | 240.0.0.0——255.255.255.255 |
$$A类地址可用网络数:2^{8-1}-2=126$$
减2的原因是,0.0.0.0保留,127.x.x.x是本地回环网络地址
A
类、B
类和C
类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口、
例题
![image-20230321231026796](https://408.oss-cn-hangzhou.aliyuncs.com/img/web/408.oss-cn-hangzhou.aliyuncs.com202303212310880.png]
网络地址转换NAT
和私有IP地址
网络地址转换(Network Address Translation,NAT)
技术于1994年被提出,用来缓解IPv4
地址空间即将耗尽的问题
NAT
能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源,即通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址
由于专用本地IP是可重用的,所以NAT大大节省了IP地址的消耗。同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险
此外,为了网络的安全,划出了部分IP地址为私有IP地址。私有IP地址只属于LAN,而不用于WAN,并且允许私有IP地址被LAN重复使用
私有IP地址网段:
- A类:1个A类网段:10.0.0.0——10.255.255.255
- B类:16个B类网段:172.16.0.0——172.31.255.255
- C类:256个C类网段:192.168.0.0——192.168.255.255
在因特网中的所有路由器,对目的地址是私有的一律不进行转发。这种采用私有IP地址的互联网称为专用互联网或本地互联网。私有IP地址也可称为可重用地址
这种方法需要在专用网络连接到因特网的路由器上安装NAT
软件。装有NAT
软件的路由器称为NAT
路由器,它至少要有一个有效的外部全球地址IP
。
这样,所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT
路由器上将其内部专用地址转换成IP
。
由于绝大多数的网络应用都是使用运输层协议TCP
或UDP
来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。
这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP
地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation,NAPT)
现在很多家用路由器将家中各种智能设备(手机、平板、笔记本电脑、台式电脑、物联网设备等)接入因特网,这种路由器实际上就是一个NAPT
路由器,但往往并不运行路由选择协议
子网划分与子网掩码
为什么需要?
两级结构的缺点:IP地址利用率有时会很低;给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变得太坏;两级的IP地址不够灵活
- 子网划分纯属于一个单位内部的事情,单位对外仍然表现为没有划分子网的网络
- 从主机号借用若干比特作为子网号,当然主机号也就减少了相同的比特
注意:划分子网只是把IP地址的主机号这部分进行划分,而不改变IP地址原来的网络号。因此,从一个IP地址本身或IP数据报的首部,无法判断源主机或者目的主机是否进行了子网划分
子网中主机号全1或全0的地址不能随意指派,全0作子网的网络号,全1作子网的广播地址
子网掩码
如何实现子网划分?32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
- 子网掩码使用左起多个连续的比特
1
来对应网络号和子网号(子网号来自原先的一部分主机号) - 子网掩码使用连续的比特
0
来对应主机号 - 将划分子网的
IPv4
地址与其相应的子网掩码进行(逻辑与运算)(即掩码是1的部分)就可得到IPv4
地址所在子网的网络地址
只要给定了一个分类的IPv4地址及其相应的子网掩码,就可以得出子网划分的全部细节
例题
无分类编址:CIDR
无分类域间路由选择CIDRClassless Inter-Domain Routing,CIDR
-
CIDR
消除了传统的A
类、B
类和C
类地址,以及划分子网的概念,因此可以更有效的分配地址空间 -
CIDR
使用"斜线记法",或称CIDR
记法。即在IPv4
地址后面加上斜线"/
",在斜线后面写上网络前缀所占比特数量
实际上,无分类域间路由选择CIDR
是将网络前缀都相同的、连续的多个无分类IPv4地址,组成一个CIDR地址块
,只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的以下全部细节:
- 地址块中的最小地址
- 地址块中的最大地址
- 地址块中的地址数量
- 地址块中聚合某类网络(A、B、C)的数量
- 地址掩码
路由聚合
如路由器
A
上连接同一网络的多台主机,路由器B
与A
相连。若A
将所有主机的具体IP
地址都报给B
,则路由器B
中会增加多项路由条目。可实际上B
向A
中任意一个主机转发数据的时都是走同一个端口,因此我们可以将这些网络的共同前缀提取出来成为新的网络号,同时将剩余主机号置0放入路由器B中如:
A
连接了172.1.4.0/25
和172.1.7.0/24
,则提取公共前缀聚合后变为172.1.4.0/22
- 网络前缀越长,地址块越小,路由越具体
- 若路由器查表转发分组时发现有多条路由条目匹配,则选择网络前缀最长的那条路由条目,这称为最长前缀匹配,因为这样的路由更具体
例题
地址解析协议ARP
通过IP地址找出其相应的MAC地址
ARP
协议的相关注意事项
- 由于ARP协议的主要用途是从网际层使用的IP地址解析出在数据链路层使用的MAC地址。因此,有的教材将ARP协议划归在网际层,而有的教材将ARP协议划归在数据链路层。这两种做法都是可以的
- 除了本节课介绍的ARP请求报文和响应报文,ARP协议还有其他类型的报文,例如用于检查IP地址冲突的“无故ARP”(Gratuitous ARP)
- 由于ARP协议很早就制定出来了(1982年11月),当时并没有考虑网络安全问题。因此,ARP协议没有安全验证机制,存在ARP欺骗和攻击等问题
网际报文控制协议(ICMP)
为了更有效地转发IP
数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)
让主机或路由器报告差错和异常情况。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去
ICMP
分为:差错报告报文和询问报文
ICMP
报文被封装在IP
数据报中发送
ICMP
报文类型
-
差错检验报文
- 终点不可达
- 源点抑制
- 超时
- 参数问题
- 改变路由(重定向)
以下情况不应发送
ICMP
差错报告报文:- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有多播地址的IP数据报都不发送ICMP差错报告报文
- 对具有特殊地址(例如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告报文
-
询问报文
- 回送请求和回答
- 时间戳请求和回答
终点不可达
当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据
ICMP
的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络位置、目的主机未知等13
种错误
源点抑制
当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报发送速率放慢
时间超过
当路由器收到一个目的
IP
地址不是自己的IP
数据报,会将其生存时间TTL字段值减1
。若结果不为0
,则将该IP
数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文
参数问题
当路由器或目的主机收到
IP
数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文
改变路由(重定向)
路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
如主机
1
的默认路由是R1
,信息经过R1
时,R1
发现最佳路由不是自己,而是R2
,所以通过ICMP
告知主机1
回送请求和回答
ICMP
回送请求报文是由主机或路由器向一个特定的目的主机发出的询问- 收到此报文的主机必须给源主机或路由器发送
ICMP
回送回答报文 - 这种询问报文用来测试目的站是否可达及了解其有关状态
时间戳请求和回答
ICMP
时间戳请求报文是请某个主机或路由器回答当前的日期和时间- 在
ICMP
时间戳回答报文中有一个32
比特的字段,其中写入的整数代表从1900
年1
月1
日起到当前时刻一共有多少秒 - 这种询问报文用来进行时钟同步和测量时间
ICMP
应用举例
- 分组网间探测PING(ICMP回送请求和回答报文)
- 跟踪路由tracerouce(ICMP时间超过报文)
总结:IPv4地址和MAC地址区别
IPv4
与MAC地址
的封装位置
数据报传输过程中IPv4地址
与MAC地址
的变化情况
在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变
在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)改变
例题
IPv6
从IPv4
向IPv6
过度
相关文档为[RFC 2473,RFC 2529,RFC 2893,RFC 3056,RFC 4038,RFC 4213]
使用双协议栈
双协议栈(Dual Stack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有
IPv4
和IPv6
两套协议栈
双协议栈主机或路由器既可以和IPv6
系统通信,又可以和IPv4
系统通信
双协议栈主机或路由器记为IPv6/IPv4
,表明它具有一个IPv6
地址和一个IPv4
地址
转换过程中一些字段无法转换,因此信息损失是无法避免的
- 双协议栈主机通过域名系统
DNS
查询目的主机采用的IP
地址- 若
DNS
返回的是IPv4
地址,则双协议栈的源主机就使用IPv4
地址 - 若
DNS
返回的是IPv6
地址,则双协议栈的源主机就使用IPv6
地址
- 若
使用隧道技术
- 当
IPv6
数据报要进入IPv4
网络时,将IPv6
数据报重新封装成IPv4
数据报,即整个IPv6
数据报成为IPv4
数据报的数据载荷 - 封装有
IPv6
数据报的IPv4
数据报在IPv4
网络中传输 - 当
IPv4
数据报要离开IPv4
网络时,再将其数据载荷(即原来的IPv6
数据报)取出并转发到IPv6
网络
IPv6的主要特点
IPv6
数据报的首部
- 基本首部
- 拓展首部
IPv6
数据报的基本首部
IPv6
将IPv4
数据报首部中不必要的功能取消了,这使得IPv6
数据报基本首部中的字段数量减少到只有8
个但由于
IPv6
地址的长度扩展到了128
比特,因此使得IPv6
数据报基本首部的长度反而增大到了40
字节,比IPv4
数据报首部固定部分的长度(20字节
)增大了20字节
版本字段
长度为
4
比特,用来表示IP协议
的版本。对于IPv6
该字段的值是6
通信量字段
长度为
8
比特,该字段用来区分不同的IPv6
数据报的类别或优先级。目前正在进行不同的通信量类性能的实验
流水号字段:长度为20
比特
IPv6提出了流的抽象概念
- “流”就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送),而在这个“流”所经过的路径上的所有路由器都保证指明的服务质量
所有属于同一个流的IPv6数据报都具有同样的流标号。换句话说,流标号用于资源分配
流标号对于实时音视频数据的传送特别有用,但对于传统的非实时数据,流标号则没有用处,把流标号字段的值置为
0
即可
有效载荷长度字段
长度为
16
比特,它指明IPv6
数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量
- 该字段以字节为单位,最大取值为
65535
,因此IPv6
数据报基本首部后面的有效载荷的最大长度为65535
字节
下一个首部字段
长度为
8
比特。该字段相当于IPv4
数据报首部中的协议字段或可选字段
当
IPv6
数据报没有扩展首部时,该字段的作用与IPv4
的协议字段一样,它的值指出了IPv6
数据报基本首部后面的数据是何种协议数据单元PDU
当
IPv6
数据报基本首部后面带有扩展首部时,该字段的值就标识后面第一个扩展首部的类型
跳数限制字段
长度为
8
比特。该字段用来防止IPv6
数据报在因特网中永久兜圈
- 源点在每个
IPv6
数据报发出时即设定某个跳数限制(最大255跳)- 每个路由器在转发
IPv6
数据报时,要先把跳数限制字段中的值减1
。当跳数限制的值为0
时,就把这个IPv6
数据报丢弃(即不转发)
源地址和目的地址字段
长度都为
128
比特。分别用来填写IPv6
数据报的发送端的IPv6
地址和接收端的IPv6
地址
IPv6
数据报的拓展首部
IPv4
数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度- 实际上,在路径中的路由器对很多选项是不需要检查的。因此,为了提高路由器对数据包的处理效率,
IPv6
把原来IPv4
首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部(除逐跳选项扩展首部)
在[RFC 2460]中定义了以下六种扩展首部
- 逐条选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
- 每一个扩展首部都由若干个字段组成,它们的长度也各不相同
- 所有扩展首部中的第一个字段都是
8
比特的下一个首部字段。该字段的值指出在该扩展首部后面是何种扩展首部 - 当使用多个扩展首部时,应按以上的先后顺序出现
IPv6
地址
IPv6
地址空间大小
在
IPv6
中,每个地址占128
个比特
IPv6
地址空间大小为$𝟐^{𝟏𝟐𝟖}$
这样巨大的地址空间在采用合理编址方法的情况下,在可预见的未来是不会用完的
IPv6
地址表示方法(冒号十六进制记法)
-
在
IPv6
地址的冒号十六进制记法的基础上,再使用“左侧零”省略和“连续零”压缩,可使IPv6
地址的表示更加简洁- 在一个
IPv6
地址中只能使用一次“连续零”压缩,否则会导致歧义 - 冒号十六进制记法还可结合点分十进制的后缀。这在
IPv4
向IPv6
过渡阶段非常有用 CIDR
的斜线表示法在IPv6
中仍然可用
- 在一个
IPv6
地址的分类
IPv6
数据报分类
-
单播(unicast)
传统的点对点通信
-
多播(multicast)
一点对多点的通信。数据报发送到一组计算机中的每一个。
IPv6
没有采用广播的术语,而将广播看作多播的一个特例 -
任播(anycast)
这是
IPv6
新增的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个
IPv6
地址分类
路由选择协议
因特网所采用的的路由选择协议主要特点
- 自适应:动态路由选择,能较好地适应网络状态的变化
- 分布式:路由器之间交换路由信息
- 分层次:将整个因特网划分为许多较小的自治系统
AS(Autonomous System)
在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。
注意:
- 外部网关协议
EGP
和内部网关协议IGP
只是路由选择协议的分类名称,而不是具体的路由选择协议 - 外部网关协议和内部网关协议名称中使用的是“网关”这个名词,是因为在因特网早期的RFC文档中,没有使用“路由器”而使用的是“网关”这一名词
路由信息协议RIP
RIP(Routing Information Protocol,RIP)
RIP
要求自治系统AS
内的每一个路由器,都要维护从它自己到AS
内其他每一个网络的距离记录。这是一组距离,称为距离向量(Distance-Vector,D-V)
RIP
使用跳数(Hop Count)
作为度量(Metric)来衡量到达目的网络的距离
路由器到直连网络的距离定义为
1
路由器到非直连网络的距离定义为所经过的路由器数
+1
允许一条路径最多只能包含
15
个路由器。距离等于16时相当于不可达。因此,RIP
只适用于小型互联网
RIP
认为好的路由就是距离短的路由,也就是所通过路由器数量最少的路由当到达同一目的网络有多条距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上
-
RIP
包含以下三个要点-
和谁交换信息
仅和相邻路由器交换信息
-
交换什么信息
交换的是各自路由表的信息
-
何时交换信息
周期性交换
为了加快RIP的收敛速度,当网络拓扑发生变化时,路由器要及时向相邻路由器通告拓扑变化后的路由信息,这称为触发更新
-
RIP
的基本工作过程
❶ 路由器刚开始工作时,只知道自己到直连网络的RIP
距离为1
❷ 每个路由器仅和相邻路由器周期性地交换并更新路由信息。若干次交换和更新后,每个路由器都知道到达本自治系统AS
内各网络的最短距离和下一跳路由器,称为收敛
RIP
的距离向量算法
假设D要更新自己的路由表
-
C向D发送封装有路由信息的
RIP
更新报文 -
D收到C的路由表后,对其进行修改
D作为C的相邻路由器,当然也就可以通过C来到达这些网络,只是比C到达这些网络的RIP距离大1 -
根据修改后的C的路由表,更新D的路由表
更新时有以下情况:
-
到达目的网络,相同的下一跳,最新消息,要更新
RIP
变大了也要更新,因为这是最新消息目的网络 RIP距离 下一跳 C的路由表 N2 5 C D的路由表(更新前) N2 2 C D的路由表(更新后) N2 5 C -
发现了新的网络,要更新(添加)
目的网络 RIP距离 下一跳 C的路由表 N3 9 C D的路由表(更新前) null null null D的路由表(更新后) N3 9 C -
到达目的网络,不同的下一跳,新路由优势,要更新
目的网络 RIP距离 下一跳 C的路由表 N6 5 C D的路由表(更新前) N6 8 F D的路由表(更新后) N6 5 C -
到达目的网络,不同的下一跳,RIP距离相等,可以等价负载均衡
目的网络 RIP距离 下一跳 C的路由表 N8 4 C D的路由表(更新前) N8 4 E D的路由表(更新后) N8 4 C,E
不更新的情况:
-
到达目的网络,不同的下一跳,新路由劣势,不更新
目的网络 RIP距离 下一跳 C的路由表 N9 6 C D的路由表(更新前) N9 4 F D的路由表(不更新) N9 6 C
-
除了上述RIP路由条目更新规则,在RIP的距离向量算法中还包含以下一些时间参数:
- 路由器每隔大约30秒向其所有相邻路由器发送路由更新报文。
- 若
180秒(默认)
没有收到某条路由条目的更新报文,则把该路由条目标记为无效(即把RIP距离设置为16,表示不可达),若再过一段时间(如120秒),还没有收到该路由条目的更新报文,则将该路由条目从路由表中删除。
RIP
存在的问题(坏消息传播得慢)
存在"坏消息传播很慢"的问题,又称为路由环路(两个路由器相互学习错误路由,造成循环)或距离无穷计数问题,这是距离向量算法的一个固有问题
可以采取多种措施减少出现该问题的概率或减小该问题带来的危害
-
限制最大路径距离为
15
(16
表示不可达) -
当路由表发生变化时就立即发送更新报文(即"触发更新"),而不是周期性发送
-
让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口反方向传送(即"水平分割""毒性反转")
注意:
使用上述措施仍无法彻底解决问题。因为在距离向量算法中,每个路由器都缺少到目的网络整个路径的完整信息,无法判断所选的路由是否出现了环路。
RIP
版本和相关报文的封装
现在较新的
RIP
版本是1998年11月公布的RIP2
[RFC 2453],已经成为因特网标准协议。与RIP1相比,RIP2
可以支持变长子网掩码和CIDR。另外,RIP2
还提供简单的鉴别过程并支持多播
RIP
相关报文使用运输层的用户数据报协议UDP
进行封装,使用的UDP
端口号为520
- 从
RIP
报文封装的角度看,RIP
属于TCP/IP体系结构的应用层- 但
RIP
的核心功能是路由选择,这属于TCP/IP体系结构的网际层
RIP
的优缺点
例题
开放最短路径优先OSPF
OSPF(Open Shortest Path First)
克服了RIP
的缺点
简单来说就是得到一个带权有向图,以当前路由器为起点,通过Dijkstra算法得到到达某个点的最短路径
-
OSPF
是基于链路状态的,而不像RIP
那样是基于距离向量的 -
OSPF
采用基于链路状态并采用SPF(Shortest Path First)
算法计算路由,从算法上保证了不会产生路由环路 -
OSPF
不限制网络规模,更新效率高,收敛速度快
基本概念
链路状态LS
链路状态
Link State,LS
是指本路由器都和哪些路由器相邻,以及相应链路的代价cost
代价的意思是费用、距离、时延、带宽等
邻居关系的建立和维护:Hello
分组
-
OSPF
相邻路由器之间通过交互问候(Hello)分组
,建立和维护邻居关系-
Hello
分组封装在IP
数据报中,发往组播地址224.0.0.5
,IP
数据报首部中的协议号字段的取值为89
,表明IP数据报的数据载荷为OSPF
分组注意:
OSPF
分组直接使用网际层的IP
数据报进行封装,而不像RIP
报文需要使用运输层用户数据报协议UDP
封装。从数据包按网络体系结构逐层封装的角度看,OSPF
属于网际层协议,而RIP
属于应用层协议(但其核心功能是路由选择,属于网际层) -
Hello
分组发送周期为10
秒 -
40
秒未收到来自邻居路由器的Hello
分组,则认为该邻居路由器不可达 -
每个路由器都会建立一张
邻居表
-
链路状态通告:LSA
-
使用
OSPF
的每个路由器都会产生链路状态通告LSA(Link State Advertisement)
,包含以下内容- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
链路状态更新分组:LSU
-
LSA
被封装在链路状态更新分组LSU(Link State Update,LSU)
中,采用可靠的洪泛法(Flooding)发送洪泛法的要点是路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),以此类推
可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认
链路状态数据库LSDB
-
使用
OSPF
的每个路由器都有一个链路状态数据库LSDB
,用于存储LSA
-
通过各路由器洪泛法发送封装有自己
LSA
的LSU
分组,各路由器的LSDB
最终达到一致 -
使用
OSPF
的各路由器基于LSDB
进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表
OSPF
五种分组
-
问候(
Hello
)分组用来发现和维护邻居路由器的可达性
-
数据库描述(Database Description)分组
向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
-
链路状态请求信息(Link State Request)分组
向邻居路由器请求发送某些链路状态项目的详细信息
-
链路状态更新(Link State Update)分组
路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
-
链路状态确认(Link State Acknowledgement)分组
这是对链路状态更新分组的确认分组
OSPF
基本工作过程
- 相邻路由器之间周期性发送问候分组(Hello),以便建立和维护邻居关系
- 建立邻居关系后,给邻居路由器发送数据库描述分组(DD),也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器
- 收到数据库描述分组后,若发现自己缺少其中某些链路状态项目,则会发送链路状态请求分组(LSR)。
- 对方收到链路状态请求分组后,则会将其所缺少的链路状态项目的详细信息封装在链路状态更新分组(LSU)中发送回去
- 收到链路状态更新分组后,将这些信息添加到自己的链路状态数据库中
多点接入网络中的OSPF
路由器
一条总线上有多台主机,则它们互为邻居,因此每个路由器都要向其他路由器发送问候分组和链路状态更新分组。为了减少所发送分组的数量,则需要用相应方法对邻居关系进行删减
OSPF
采用选举指定路由器DR(Designated Router
)和备用的指定路由器BDR(Backup Designated Router
)的方法减少邻居数目
- 所有的非
DR/BDR
只与DR/BDR
建立邻居关系 - 非
DR/BDR
之间通过DR/BDR
交换信息 - 当
DR
失效时由BDR
顶上
OSPF
划分区域
为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统AS再划分为若干个更小的范围,称为区域(area)
- 自治系统边界路由器(AS Border Router,ASBR):R6
- 主干路由器(Backbone Router,BBR):R3、R4、R5、R6和R7
- 区域内路由器(Internal Router,IR):区域1内的R1和R2,区域2内的R8,区域3内的R9
- 区域边界路由器(Area Border Router,ABR):R3、R4和R7
例题
边界网关协议BGP
边界网关协议(Border Gateway Protocol,BGP)
属于外部网关协议EGP
这个类别,用于自治系统AS之间的路由选择协议
由于在不同AS内度量路由的“代价”(距离、带宽、费用等)可能不同,因此对于AS之间的路由选择,使用统一的“代价”作为度量来寻找最佳路由是不行的
尽力寻找一条能够到达目的网络且比较好的路由(不兜圈子),而并非找最佳路由
内部网关协议IGP(如路由信息协议RIP或最短路径优先OSPF)
- 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络
- 无需考虑自治系统外部其他方面的策略
外部网关协议EGP(如边界网关协议BGP)
- 在不同自治系统内,度量路由的"代价"(距离,宽带,费用等)可能不同。因此,对于自治系统之间的路由选择,使用"代价"作为度量来寻找最佳路由是不行的
- 比如
A
系统路由选择度量是距离,B
系统是带宽……那么A
到系统E
的路由怎样走最好呢?由于没有统一度量,所以不能直接得到最佳路由
- 比如
- 自治系统之间的路由选择必须考虑相关策略(政治、经济、安全等)
- 如中国的数据报尽量要绕开美国的自治系统
工作原理
- 在配置BGP时,每个AS的管理员要选择至少一个路由器作为该AS的BGP发言人
- 一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器
- 使用
TCP
连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer) - BGP发言人除了运行BGP协议外,还必须运行自己所在AS所使用的内部网关协议
IGP
,例如RIP
或OSPF
BGP
发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)- 当
BGP
发言人互相交换了网络可达性的信息后,各BGP
发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好路由。也就是构造出树形结构(防环路)的自治系统连通图
BGP-4的4中报文
- OPEN(打开)报文:用来与相邻的另一个
BGP
发言人建立关系,使通信初始化 - UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由
- KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性
- NOTIFICATION(通知)报文:用来发送检测到的差错
例题
7. 路由选择协议
路由选择分类
- 静态路由选择
- 动态路由选择
因特网所采用的的路由选择协议主要特点
- 自适应:动态路由选择,能较好地适应网络状态的变化
- 分布式:路由器之间交换路由信息
- 分层次:将整个因特网划分为许多较小的自治系统
AS(Autonomous System)
在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。
注意:
- 外部网关协议
EGP
和内部网关协议IGP
只是路由选择协议的分类名称,而不是具体的路由选择协议 - 外部网关协议和内部网关协议名称中使用的是“网关”这个名词,是因为在因特网早期的RFC文档中,没有使用“路由器”而使用的是“网关”这一名词
路由信息协议RIP
RIP(Routing Information Protocol,RIP)
RIP
要求自治系统AS
内的每一个路由器,都要维护从它自己到AS
内其他每一个网络的距离记录。这是一组距离,称为距离向量(Distance-Vector,D-V)
RIP
使用跳数(Hop Count)
作为度量(Metric)来衡量到达目的网络的距离
路由器到直连网络的距离定义为
1
路由器到非直连网络的距离定义为所经过的路由器数
+1
允许一条路径最多只能包含
15
个路由器。距离等于16时相当于不可达。因此,RIP
只适用于小型互联网
RIP
认为好的路由就是距离短的路由,也就是所通过路由器数量最少的路由当到达同一目的网络有多条距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上
-
RIP
包含以下三个要点-
和谁交换信息
仅和相邻路由器交换信息
-
交换什么信息
交换的是各自路由表的信息
-
-
何时交换信息
周期性交换
为了加快RIP的收敛速度,当网络拓扑发生变化时,路由器要及时向相邻路由器通告拓扑变化后的路由信息,这称为触发更新
RIP
的基本工作过程
❶ 路由器刚开始工作时,只知道自己到直连网络的RIP
距离为1
❷ 每个路由器仅和相邻路由器周期性地交换并更新路由信息。若干次交换和更新后,每个路由器都知道到达本自治系统AS
内各网络的最短距离和下一跳路由器,称为收敛
RIP
的距离向量算法
假设D要更新自己的路由表
-
C向D发送封装有路由信息的
RIP
更新报文 -
D收到C的路由表后,对其进行修改
D作为C的相邻路由器,当然也就可以通过C来到达这些网络,只是比C到达这些网络的RIP距离大1 -
根据修改后的C的路由表,更新D的路由表
更新时有以下情况:
-
到达目的网络,相同的下一跳,最新消息,要更新
RIP
变大了也要更新,因为这是最新消息目的网络 RIP距离 下一跳 C的路由表 N2 5 C D的路由表(更新前) N2 2 C D的路由表(更新后) N2 5 C -
发现了新的网络,要更新(添加)
目的网络 RIP距离 下一跳 C的路由表 N3 9 C D的路由表(更新前) null null null D的路由表(更新后) N3 9 C -
到达目的网络,不同的下一跳,新路由优势,要更新
目的网络 RIP距离 下一跳 C的路由表 N6 5 C D的路由表(更新前) N6 8 F D的路由表(更新后) N6 5 C -
到达目的网络,不同的下一跳,RIP距离相等,可以等价负载均衡
目的网络 RIP距离 下一跳 C的路由表 N8 4 C D的路由表(更新前) N8 4 E D的路由表(更新后) N8 4 C,E
不更新的情况:
-
到达目的网络,不同的下一跳,新路由劣势,不更新
目的网络 RIP距离 下一跳 C的路由表 N9 6 C D的路由表(更新前) N9 4 F D的路由表(不更新) N9 6 C
-
除了上述RIP路由条目更新规则,在RIP的距离向量算法中还包含以下一些时间参数:
- 路由器每隔大约30秒向其所有相邻路由器发送路由更新报文。
- 若
180秒(默认)
没有收到某条路由条目的更新报文,则把该路由条目标记为无效(即把RIP距离设置为16,表示不可达),若再过一段时间(如120秒),还没有收到该路由条目的更新报文,则将该路由条目从路由表中删除。
RIP
存在的问题(坏消息传播得慢)
存在"坏消息传播很慢"的问题,又称为路由环路(两个路由器相互学习错误路由,造成循环)或距离无穷计数问题,这是距离向量算法的一个固有问题
可以采取多种措施减少出现该问题的概率或减小该问题带来的危害
-
限制最大路径距离为
15
(16
表示不可达) -
当路由表发生变化时就立即发送更新报文(即"触发更新"),而不是周期性发送
-
让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口反方向传送(即"水平分割""毒性反转")
注意:
使用上述措施仍无法彻底解决问题。因为在距离向量算法中,每个路由器都缺少到目的网络整个路径的完整信息,无法判断所选的路由是否出现了环路。
RIP
版本和相关报文的封装
现在较新的
RIP
版本是1998年11月公布的RIP2
[RFC 2453],已经成为因特网标准协议。与RIP1相比,RIP2
可以支持变长子网掩码和CIDR。另外,RIP2
还提供简单的鉴别过程并支持多播
RIP
相关报文使用运输层的用户数据报协议UDP
进行封装,使用的UDP
端口号为520
- 从
RIP
报文封装的角度看,RIP
属于TCP/IP体系结构的应用层- 但
RIP
的核心功能是路由选择,这属于TCP/IP体系结构的网际层
RIP
的优缺点
例题
开放最短路径优先OSPF
OSPF(Open Shortest Path First)
克服了RIP
的缺点
简单来说就是得到一个带权有向图,以当前路由器为起点,通过Dijkstra算法得到到达某个点的最短路径
-
OSPF
是基于链路状态的,而不像RIP
那样是基于距离向量的 -
OSPF
采用基于链路状态并采用SPF(Shortest Path First)
算法计算路由,从算法上保证了不会产生路由环路 -
OSPF
不限制网络规模,更新效率高,收敛速度快
基本概念
链路状态LS
链路状态
Link State,LS
是指本路由器都和哪些路由器相邻,以及相应链路的代价cost
代价的意思是费用、距离、时延、带宽等
邻居关系的建立和维护:Hello
分组
-
OSPF
相邻路由器之间通过交互问候(Hello)分组
,建立和维护邻居关系-
Hello
分组封装在IP
数据报中,发往组播地址224.0.0.5
,IP
数据报首部中的协议号字段的取值为89
,表明IP数据报的数据载荷为OSPF
分组注意:
OSPF
分组直接使用网际层的IP
数据报进行封装,而不像RIP
报文需要使用运输层用户数据报协议UDP
封装。从数据包按网络体系结构逐层封装的角度看,OSPF
属于网际层协议,而RIP
属于应用层协议(但其核心功能是路由选择,属于网际层) -
Hello
分组发送周期为10
秒 -
40
秒未收到来自邻居路由器的Hello
分组,则认为该邻居路由器不可达 -
每个路由器都会建立一张
邻居表
-
链路状态通告:LSA
-
使用
OSPF
的每个路由器都会产生链路状态通告LSA(Link State Advertisement)
,包含以下内容- 直连网络的链路状态信息
- 邻居路由器的链路状态信息
链路状态更新分组:LSU
-
LSA
被封装在链路状态更新分组LSU(Link State Update,LSU)
中,采用可靠的洪泛法(Flooding)发送洪泛法的要点是路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),以此类推
可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认
链路状态数据库LSDB
-
使用
OSPF
的每个路由器都有一个链路状态数据库LSDB
,用于存储LSA
-
通过各路由器洪泛法发送封装有自己
LSA
的LSU
分组,各路由器的LSDB
最终达到一致 -
使用
OSPF
的各路由器基于LSDB
进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表
OSPF
五种分组
-
问候(
Hello
)分组用来发现和维护邻居路由器的可达性
-
数据库描述(Database Description)分组
向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
-
链路状态请求信息(Link State Request)分组
向邻居路由器请求发送某些链路状态项目的详细信息
-
链路状态更新(Link State Update)分组
路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态
-
链路状态确认(Link State Acknowledgement)分组
这是对链路状态更新分组的确认分组
OSPF
基本工作过程
- 相邻路由器之间周期性发送问候分组(Hello),以便建立和维护邻居关系
- 建立邻居关系后,给邻居路由器发送数据库描述分组(DD),也就是将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器
- 收到数据库描述分组后,若发现自己缺少其中某些链路状态项目,则会发送链路状态请求分组(LSR)。
- 对方收到链路状态请求分组后,则会将其所缺少的链路状态项目的详细信息封装在链路状态更新分组(LSU)中发送回去
- 收到链路状态更新分组后,将这些信息添加到自己的链路状态数据库中
多点接入网络中的OSPF
路由器
一条总线上有多台主机,则它们互为邻居,因此每个路由器都要向其他路由器发送问候分组和链路状态更新分组。为了减少所发送分组的数量,则需要用相应方法对邻居关系进行删减
OSPF
采用选举指定路由器DR(Designated Router
)和备用的指定路由器BDR(Backup Designated Router
)的方法减少邻居数目
- 所有的非
DR/BDR
只与DR/BDR
建立邻居关系 - 非
DR/BDR
之间通过DR/BDR
交换信息 - 当
DR
失效时由BDR
顶上
OSPF
划分区域
为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统AS再划分为若干个更小的范围,称为区域(area)
- 自治系统边界路由器(AS Border Router,ASBR):R6
- 主干路由器(Backbone Router,BBR):R3、R4、R5、R6和R7
- 区域内路由器(Internal Router,IR):区域1内的R1和R2,区域2内的R8,区域3内的R9
- 区域边界路由器(Area Border Router,ABR):R3、R4和R7
例题
边界网关协议BGP
边界网关协议(Border Gateway Protocol,BGP)
属于外部网关协议EGP
这个类别,用于自治系统AS之间的路由选择协议
由于在不同AS内度量路由的“代价”(距离、带宽、费用等)可能不同,因此对于AS之间的路由选择,使用统一的“代价”作为度量来寻找最佳路由是不行的
尽力寻找一条能够到达目的网络且比较好的路由(不兜圈子),而并非找最佳路由
内部网关协议IGP(如路由信息协议RIP或最短路径优先OSPF)
- 设法使分组在一个自治系统内尽可能有效地从源网络传输到目的网络
- 无需考虑自治系统外部其他方面的策略
外部网关协议EGP(如边界网关协议BGP)
- 在不同自治系统内,度量路由的"代价"(距离,宽带,费用等)可能不同。因此,对于自治系统之间的路由选择,使用"代价"作为度量来寻找最佳路由是不行的
- 比如
A
系统路由选择度量是距离,B
系统是带宽……那么A
到系统E
的路由怎样走最好呢?由于没有统一度量,所以不能直接得到最佳路由
- 比如
- 自治系统之间的路由选择必须考虑相关策略(政治、经济、安全等)
- 如中国的数据报尽量要绕开美国的自治系统
工作原理
- 在配置BGP时,每个AS的管理员要选择至少一个路由器作为该AS的BGP发言人
- 一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器
- 使用
TCP
连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer) - BGP发言人除了运行BGP协议外,还必须运行自己所在AS所使用的内部网关协议
IGP
,例如RIP
或OSPF
BGP
发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)- 当
BGP
发言人互相交换了网络可达性的信息后,各BGP
发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好路由。也就是构造出树形结构(防环路)的自治系统连通图
BGP-4的4中报文
- OPEN(打开)报文:用来与相邻的另一个
BGP
发言人建立关系,使通信初始化 - UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由
- KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性
- NOTIFICATION(通知)报文:用来发送检测到的差错
例题
IP
多播(组播)
多播(Multicast,也称为组播)是一种实现“一对多”通信的技术,与传统单播“一对一”通信相比,多播可以极大地节省网络资源
在因特网上进行的多播,称为IP多播
IP
多播地址和多播组
IP
多播可分为以下两种
- 只在本局域网上进行的硬件多播
- 在因特网上进行的多播
- 在
IPv4
中,D
类地址被作为多播地址 - 多播地址只能用作目的地址,而不能用作源地址
- 用每一个D类地址来标识一个多播组,使用同一个IP多播地址接收IP多播数据报的所有主机就构成了一个多播组
- 每个多播组的成员是可以随时变动的,一台主机可以随时加入或离开多播组
- 多播组成员的数量和所在的地理位置也不受限制,一台主机可以属于几个多播组
- 非多播组成员也可以向多播组发送IP多播数据报
- 与IP数据报相同,IP多播数据报也是“尽最大努力交付”,不保证一定能够交付给多播组内的所有成员
IPv4多播地址又可分为预留的多播地址(永久多播地址)、全球范围可用的多播地址以及本地管理的多播地址[RFC 3330]
在局域网上进行硬件多播
由于
MAC
地址(也称为硬件地址)有多播MAC地址
这种类型,因此只要把IPv4多播地址
映射成多播MAC地址
,即可将IP多播数据报封装在局域网的MAC帧中,而MAC帧首部
中的目的MAC地址
字段的值,就设置为由IPv4
多播地址映射成的多播MAC
地址。这样,可以很方便地利用硬件多播来实现局域网内的IP
多播当给某个多播组的成员主机配置其所属多播组的
IP
多播地址时,系统就会根据映射规则从该IP多播地址生成相应的局域网多播MAC
地址因特网号码指派管理局
IANA
,将自己从IEEE注册管理机构申请到的以太网MAC
地址块中从01-00-5E-00-00-00
到01-00-5E-7F-FF-FF
的多播MAC
地址,用于映射IPv4
多播地址
由于IP
多播地址可变化的28
比特的前5
个比特无法映射到MAC
多播地址,这会造成IP
多播地址与多播MAC
地址的映射关系并不是唯一的
由于IP
多播地址与多播MAC
地址的映射关系不是唯一的,因此收到IP
多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的IP
多播数据报丢弃
在因特网上进行IP
多播需要两种协议
要在因特网上进行
IP
多播,就必须要考虑IP
多播数据报经过多个多播路由器进行转发的问题
网际组管理协议IGMP
网际组管理协议
(Internet Group Management Protocol,IGMP)
是TCP/IP
体系结构网际层中的协议,其作用是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(实际上是主机中的某个进程)加入或退出了某个多播组
IGMP
仅在本网络有效,使用IGMP
并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中
分类
- 成员报告报文
- 成员查询报文
- 离开组报文
IGMP
报文被封装在IP
数据报中传送
IGMP
的基本工作原理
加入多播组
监视多播组的成员变化
同一网络中的多播路由器可能不止一个,但没有必要每个多播路由器都周期性地发送
IGMP
成员查询报文。
只要在这些多播路由器中选择一个作为查询路由器,由查询路由器发送IGMP
成员查询报文,而其他的多播路由器仅被动接收响应并更新自己的多播组列表即可。
选择查询路由器的方法:
每个多播路由器若监听到源IP地址比自己的IP地址小的IGMP
成员查询报文则退出选举。
最后,网络中只有IP
地址最小的多播路由器成为查询路由器。
退出多播组
多播路由选择协议
多播路由选择协议的主要任务是:在多播路由器之间为每个多播组建立一个多播转发树
- 多播转发树连接多播源和所有拥有该多播组成员的路由器
- IP多播数据报只要沿着多播转发树进行洪泛,就能被传送到所有拥有该多播组成员的多播路由器
- 之后,在多播路由器所直连的局域网内,多播路由器通过硬件多播,将IP多播数据报发送给该多播组的所有成员
- 针对不同的多播组需要维护不同的多播转发树,而且必须动态地适应多播组成员的变化,但此时网络拓扑并不一定发生变化,因此多播路由选择协议要比单播路由选择协议(例如RIP、OSPF等)复杂得多
- 即使某个主机不是任何多播组的成员,它也可以向任何多播组发送多播数据报
- 为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组成员的路由器
- 基于源树
(Source-Base Tree)
多播路由选择 - 组共享树
(Group-Shared Tree)
多播路由选择
基于源树(Source-Base Tree)
多播路由选择
基于源树的多播路由选择的最典型算法是反向路径多播
(Reverse Path Multicasting,RPM)
算法RPM
算法包含以下两个步骤:
- 利用反向路径广播
(Reverse Path Broadcasting,RPB)
算法建立一个广播转发树。- 利用剪枝
(Pruning)
算法,剪除广播转发树中的下游非成员路由器,获得一个多播转发树
-
要建立广播转发树,还可以使用洪泛(Flooding)法
利用反向路径广播
RPB
算法生成的广播转发树,不会存在环路,因此可以避免广播分组在环路中兜圈
RPB算法的要点是:每一台路由器在收到一个广播分组时,先检查该广播分组是否是从源点经最短路径传送来的- 若是,本路由器就从自己除刚才接收该广播分组的接口的所有其他接口转发该广播分组
- 否则,丢弃该广播分组
- 如果本路由器有好几个邻居路由器都处在到源点的最短路径上,也就是存在好几条同样长度的最短路径,那么只能选取一条最短路径。选取的规则是这几条最短路径中的邻居路由器的IP地址最小的那条最短路径
RPB中“反向路径”的意思是:在计算最短路径时把源点当作终点
组共享树(Group-Shared Tree)
多播路由选择
组共享树多播路由选择采用基于核心的分布式生成树算法来建立共享树
-
该方法在每个多播组中指定一个核心(core)路由器,以该路由器为根,建立一棵连接多播组的所有成员路由器的生成树,作为多播转发树
每个多播组中除了核心路由器,其他所有成员路由器都会向自己多播组中的核心路由器单播加入报文
-
加入报文通过单播朝着核心路由器转发,直到它到达已经属于该多播生成树的某个节点或者直接到达该核心路由器
-
加入报文所经过的路径,就确定了一条从单播该报文的边缘节点到核心路由器之间的分支,而这个新分支就被嫁接到现有的多播转发树上
虚拟专用网VPN
利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网
(Virtual Private Network,VPN)
虚拟专用网中各主机所分配的地址应该是本机构可自由分配的专用地址(Private Address
),不需要向因特网的管理机构申请
出于安全考虑,专用网内的各主机并不应该直接“暴露”于公用的因特网上。因此,给专用网内各主机配置的IP地址应使各主机在专用网内可以相互通信,而不能直接与公用的因特网通信
[RFC 1918]规定了以下三个CIDR地址块中的地址作为专用地址:
很显然,全世界可能有很多不同机构的专用网具有相同的专用IP地址,但这并不会引起麻烦,因为这些专用地址仅在机构内部使用
在因特网中的所有路由器,对目的地址是专用地址的IP数据报一律不进行转发,这需要由因特网服务提供者ISP对其拥有的因特网路由器进行设置来实现
移动IP
移动
IP(Mobile IP)
是因特网工程任务组IETF开发的一种技术[RFC 3344],该技术使得移动主机在各网络之间漫游时,仍然能够保持其原来的IP
地址不变。
- 移动IP技术还为因特网中的非移动主机提供了相应机制,使得它们能够将IP数据报正确发送到移动主机
基本概念
归属网络
每个移动主机都有一个默认连接的网络或初始申请接入的网络,称为归属网络
(Home Network)
归属地址
移动主机在归属网络中的
IP
地址在其整个移动通信过程中是始终不变的,因此称为永久地址(Permanent Address)
或归属地址(Home Address)
归属代理
在归属网络中,代表移动主机执行移动管理功能的实体称为归属代理
(Home Agent)
。归属代理通常就是连接在归属网络上的路由器,然而它作为代理的特定功能则是在网络层完成的
外地网络
移动主机当前漫游所在的网络称为外地网络
(Foreign Network)
或被访网络(Visited Network)
外地代理
在外地网络中,帮助移动主机执行移动管理功能的实体称为外地代理
(Foreign Agent)
转交地址
外地代理通常就是连接在外地网络上的路由器。外地代理会为移动主机提供一个临时使用的属于外地网络的转交地址
(Care-of Address)
路由器的基本工作原理
路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组
实现交换结构的三种基本方式是:通过存储器、通过总线以及通过互连网络。这三种交换结构可实现的路由器转发速率依次提高。
⭐⭐第5章 传输层
概述
物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的的问题,实现了主机到主机的通信
但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程
如何为运行在不同主机上的应用进程提供直接的通信服务时运输层的任务,运输层协议又称端到端协议
进程间基于网络的通信
传输层的功能
-
提供应用进程之间的逻辑通信(即端到端通信)
-
复用和分用
复用是指发送方不同的应用进程都可以使用同一传输层协议传输数据
分用是指接收方的传输层在剥去报文的首部之后能够把这些数据正确交付到目的应用进程
-
对收到的数据报进行差错检测(首部和数据部分)
注意:
网络层只检查IP数据的首部,不检验数据部分
-
提供两种不同的传输协议TCP和UDP
注意:
网络层无法同时实现两种协议。即要么只提供面向连接的服务(如虚电路),要么只提供无连接服务(如数据报),而不可能在网络层中同时存在这两种形式
无连接服务(不可靠)和面向连接服务(可靠)
面向连接服务是指在通信双方建立之前,必须先建立连接,在整个通信过程中,整个连接的情况一直被实时监控和管理。通信结束后,应该释放这个连接
无连接服务是指两个实体之间不需要先建立好连接,需要通信时,直接将信息发送到网络中,让该信息的传递在网上尽力而为的往目的地传送
TCP/IP协议族
在IP
层之上使用了两个传输协议:TCP
和UDP
TCP
概述
- 传输控制协议
(Transmission Control Protocol,TCP)
为其上层提供的是面向连接的可靠的数据传输服务。 - 使用TCP通信的双方,在传送数据之前必须首先建立TCP连接(逻辑连接,而非物理连接)。数据传输结束后必须要释放TCP连接。
- TCP为了实现可靠传输,就必须使用很多措施,例如TCP连接管理、确认机制、超时重传、流量控制以及拥塞控制等。
- TCP的实现复杂,TCP报文段的首部比较大(
20B
),占用处理机资源比较多。
UDP
概述
- 用户数据报协议
(User Datagram Protocol,UDP)
为其上层提供的是无连接的不可靠的数据传输服务。 - 使用UDP通信的双方,在传送数据之前不需要建立连接。
- UDP不需要实现可靠传输,因此不需要使用实现可靠传输的各种机制。
- UDP的实现简单,UDP用户数据报的首部比较小(
8B
)。
端口和套接字
端口是传输层服务访问点(TSAP)
数据链路层的SAP是MAC地址
网络层的SAP是IP地址
传输层的SAP是端口
为了使运行不同操作系统的计算机的应用进程之间能进行网络通信,必须使用统一的方法对TCP/IP体系的应用进程进行标识,即端口号。
为什么不能使用进程标识符PID来区分各进程?
因为因特网上的计算机并不是使用统一的操作系统,不同的操作系统使用不同格式的进程标识符
端口号
端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同的端口号是没有联系的。另外,TCP和UDP端口号之间也是没有关系的
端口号使用16比特表示,取值范围0~65535
。
-
服务端使用端口号
-
熟知端口号:0~1023,
IANA
把这些端口号指派给了TCP/IP
体系中最重要的一些应用协议21/20 23 25 161 53 67/68 80 179 443 520 FTP TELNET SMTP SNMP DNS DHCP HTTP BGP HTTPS RIP -
登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须在
IANA
按照规定的手续登记,以防止重复。如Microsoft RDP
微软远程桌面使用的端口是3389
-
-
客户端使用端口号
- 短暂(临时)端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用
套接字Socket
$$
套接字Soket=(IP地址:端口号)
$$
它唯一地标识网络中的一台主机和其上的一个进程
UDP
和TCP
的对比
无连接的UDP
和面向连接的TCP
连接指逻辑连接关系,而不是物理连接
UDP
和TCP
对单播、多播和广播的支持情况
UDP
支持单播、多播和广播
TCP
仅支持单播
UDP
和TCP
对应用层报文的处理
UDP
是面向应用报文的
TCP
是面向字节流的
UDP
和TCP
对数据传输可靠性的支持情况
UDP
和TCP
首部的对比
用户数据报协议UDP
UDP仅在IP的数据报服务之上增加了两个最基本的服务:复用和分用,差错检测
优点
-
UDP
是无连接的,随时可向目的主机发送报文,支持单播、多播和广播 -
开销小,
UDP
数据报首部仅8字节 -
UDP
收到应用层报文后直接为报文添加UDP
首部就进行发送,即面向应用报文
UDP的首部格式
8
字节
源端口和目的端口
UDP分用:基于目的端口
UDP复用:基于源端口
端口号不正确:丢弃
长度
包括首部和数据,最小是8
,仅有首部
校验和(可选)
有错就丢弃,即说明了不可靠
UDP校验
和TCP检验和字段一样,区别是:伪首部协议字段=17
传输控制协议TCP
TCP是在不可靠的IP层之上实现的可靠传输协议
-
TCP
是面向连接的发送数据前需要"三报文握手"建立连接,数据传输结束后需要"四报文挥手"释放连接
-
仅支持单播
每一条TCP连接是点对点(一对一)的
-
提供全双工通信
TCP连接的两端都设有发送缓存和接收缓存
-
TCP
是面向字节流的虽然实际上TCP的交互是数据块之间,但是TCP其将应用进程交付下来的数据块(报文段)仅仅看作是一连串的字节流
TCP是基于一种滑动窗口协议的流量控制机制
-
发送方和接收方窗口保持一致,发送方窗口随着接收方窗口变化而变化(通过确认报文rwnd告知发送方)
-
发送方发送完窗口内数据后需要等到确认报文才会滑动窗口并继续发送,若窗口内的某个值很久没有收到回答报文,则超时重传报文
若接收方窗口调为0后,一段时间之后又调为200,此时向发送方传递确认报文,可此时报文丢失,则会造成发送方窗口始终为0,接收方以为发送方收到了确认报文而开始等待数据,造成死锁,如何解决?
当发送方窗口大小为
0
时,其隔一段时间(持续计时器)就会发送一个1
字节大小的零窗口探测报文,看看此时接收窗口大小是否进行调整
若发送的零窗口探测报文也丢失了,会造成新死锁吗?
不会。因为零窗口探测报文也有超时重传机制
TCP拥塞控制
- 慢开始和拥塞避免
- 快重传和快恢复
慢开始和拥塞避免(TCP连接建立和网络出现超时)
-
发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化
-
拥塞窗口cwnd
的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些(确认报文段窗口大小),但只要网络出现拥塞,拥塞窗口就减少一些 -
判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(发送超时重传)
-
-
发送方将拥塞窗口作为发送窗口swnd,即
swnd=cwnd
-
维护一个慢开始门限ssthresh状态变量
-
当
cwnd < ssthresh
时,使用慢开始算法 -
当
cwnd > ssthresh
时,停止使用慢开始算法而改用拥塞避免算法 -
当
cwnd = ssthresh
时,既可使用慢开始算法,也可以使用拥塞避免算法
-
拥塞窗口从1开始,根据应答报文大小来扩大拥塞窗口(2倍),如发送方窗口
2
,应答大小2
,则下次发送大小为4
这叫慢开始算法
当窗口增加到一定大小,发送方发送的报文出现了超时重传,则判断网络可能出现了拥塞,此时将拥塞窗口初始化为1,同时将慢开始门限ssthresh设置为发生拥塞时窗口大小的一半,拥塞窗口每次只扩大1,而不是向慢开始那样根据发送方的返回窗口进行增加。
这叫拥塞避免算法
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断出网络出现了拥塞,就要把
ssthresh
减半,把拥塞窗口cwnd
重新设置为1,重新执行慢开始算法
- “慢开始”是指一开始向网络注入的报文段少,而并不是指拥塞窗口cwnd的值增长速度慢。
- “拥塞避免”也并非指完全能够避免拥塞,而是指在拥塞避免阶段将cwnd值控制为按线性规律增长,使网络比较不容易出现拥塞
在慢开始和拥塞避免算法中使用了“乘法减小”和“加法增大”方法。
“乘法减小”是指不论是在慢开始阶段还是在拥塞避免阶段,只要出现超时(即很可能出现了网络拥塞),就把慢开始门限值 ssthresh设置为当前拥塞窗口的一半(并执行慢开始算法)。当网络频繁出现拥塞时,ssthresh值就下降得很快,以大大减少注入网络的分组数。而“加法增大”是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个 RTT),就把拥塞窗口cwnd增加一个MSS大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。
快重传和快恢复(发送方接收到冗余ACK)
快重传是使发送方尽快进行重传,而不是等待超时重传计时器超时再重传
-
要求接收方不用等待自己发送数据时才进行捎带确认,而是要立即发送确认
-
即使收到了失序的报文段(说明有一段丢失了)也要立即发出对已收到的报文段的重复确认
-
发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传
-
对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞。使用快重传可以使整个网络的吞吐量提高约
20%
发送方一旦收到
3
个重复确认,就知道现在只是丢失了个别报文段。也是不启动慢开始算法,而执行快恢复算法
- 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法
- 也有的快恢复实现是把快恢复开始时的拥塞窗口
cwnd
值再增大一些,即等于新的ssthresh+3
- 既然发送方收到
3
个重复的确认,就表明有3
个数据报文段已经离开了网络 - 这三个报文段不再消耗网络资源而是停留在接收方的接收缓存中
- 可见现在网络中不是堆积了报文段而是减少了
3
个报文段。因此可以适当把拥塞窗口扩大些
- 既然发送方收到
由于跳过了拥塞窗口
cwnd
从1
起始的慢开始过程,所以被称为快恢复
超时重传时间(RTO)选择
正常情况下,超时重传时间应该设为略大于往返时间。但是由于各区域的速率可能不一致,因此将超时重传时间设置为一个固定值是行不通的
利用每次测量得到的RTT
样本,计算加权平均往返时间$RTT_S$(平滑的往返时间)
显然,超时重传时间==RTO应略大于加权平均往返时间$RTT_S$
往返时间测量问题
针对出现超时重传时无法测准往返时间RTT的问题,有以下解决方法
在计算加权平均往返时间$RTT_S$时,只要报文段重传了,就不采用其往返时间
RTT
样本。也就是出现重传时,不重新计算$RTT_S$,进而超时重传时间RTO也不会重新计算。此方法的漏洞如下:如果报文段时延突然增大很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段,于是重传,造成死锁
修正方法:报文段每重传一次,就把超时重传时间RTO增大一些,典型的做法是将RTO的值取为旧RTO的2倍
例题
TCP拥塞控制与网际层拥塞控制的关系
尾部丢弃策略和全局同步
主动队列管理
为了避免网络中出现全局同步问题,在1998年提出了主动队列管理(Active Queue Management,AQM)。
- 所谓“主动”,就是在路由器的队列长度达到某个阈值但还未满时就主动丢弃IP数据报,而不是要等到路由器的队列已满时才不得不丢弃后面到达的IP数据报,这样就太被动了。
- 应当在路由器队列长度达到某个值得警惕的数值时,也就是网络出现了某些拥塞征兆时,就主动丢弃到达的IP数据报来造成发送方的超时重传,进而降低发送方的发送速率,因而有可能减轻网络的拥塞程度,甚至不出现网络拥塞。
主动队列管理AQM可以有不同的实现方法,其中曾流行多年的就是随机早期检测(Random Early Detection,RED),也称为随机早期丢弃(Random Early Drop,RED 或 Random Early Discard,RED)。
- 路由器需要维护两个参数来实现RED:队列长度最小门限和最大门限。当每一个IP数据报到达路由器时,RED就按照规定的算法计算出当前的平均队列长度。
主动队列管理AQM可以有不同的实现方法,其中曾流行多年的就是随机早期检测(Random Early Detection,RED),也称为随机早期丢弃(Random Early Drop,RED 或 Random Early Discard,RED)。
路由器需要维护两个参数来实现RED:队列长度最小门限和最大门限。当每一个IP数据报到达路由器时,RED就按照规定的算法计算出当前的平均队列长度。
- 路由器需要维护两个参数来实现RED:队列长度最小门限和最大门限。当每一个IP数据报到达路由器时,RED就按照规定的算法计算出当前的平均队列长度。
- 若平均队列长度小于最小门限,则把新到达的IP数据报存入队列进行排队。
- 若平均队列长度大于最大门限,则把新到达的IP数据报丢弃。
- 若平均队列长度在最小门限和最大门限之间,则按照某一丢弃概率p把新到达的IP数据报丢弃(这体现了丢弃IP数据报的随机性)。
TCP的选择确认
在之前介绍TCP的快重传和可靠传输时,TCP接收方只能对按序收到的数据中的最高序号给出确认。当发送方超时重传时,接收方之前已收到的未按序到达的数据也会被重传。
能否设法只传送缺少的数据而不重传已经正确到达、只是未按序到达的数据呢?
TCP可以使用选择确认(Selective ACK,SACK)
SACK相关文档并没有指明发送方应当怎样响应SACK。因此大多数的TCP实现还是重传所有未被确认的数据块。
可靠传输
TCP默认使用累计确认
注意:
ackn
在选择重传协议与TCP协议中并不完全相同。
在选择重传协议中,ackn
表明序号到n
为止的数据已正确接收,现在期望收到序号为n+1
的数据。
在TCP协议中,ackn
表明序号到n-1
为止的数据已正确接收,现在期望收到序号为n
的数据。
虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大,这是因为:
- 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
- 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
对于不按序到达的数据应如何处理,TCP并无明确规定。
- 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据。
- TCP通常对不按序到达的数据先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
TCP要求接收方必须有累积确认(这一点与选择重传协议不同)和捎带确认机制。这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
- 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络资源。TCP标准规定,确认推迟的时间不应超过0.5秒。若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122]。
- 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。
TCP的运输连接管理
TCP是面向连接的协议,它基于运输链接来传送TCP报文段
TCP运输连接的建立和释放,是每一次面向连接的通信中必不可少的过程
"三报文"握手建立TCP连接
SYN
为1
的报文段不能携带数据,但会消耗一个序列号seqACK=1
代表这是普通确认报文段,ack=x+1表示这是对报文段序列号seq=x的确认
注意:
服务端的资源是完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的
使用“三报文握手”而不是“两报文握手”的原因
采用“三报文握手”而不是“两报文握手”来建立TCP连接,是为了防止已失效的TCP连接请求报文段突然又传送到了TCP服务器进程,因而导致错误。
例题
"四报文挥手"释放TCP连接
-
客户端发起关闭请求,一去一回后进入半关闭状态【客户端不再发送数据,服务端可能还会发】
-
服务器将自己剩余的数据发送完后也发送一个关闭请求,接着客户端给予回应后服务器关闭,客户机则要等到一段时间后完全关闭(防止发给服务器的确认报文丢失)
为什么客户机还要要等到一段时间2MSL
后完全关闭?
- 处于时间等待(TIME-WAIT)状态后要经过2MSL时长,可以确保TCP服务器进程能够收到最后一个TCP确认报文段而进入关闭(CLOSED)状态
- 另外,TCP客户进程在发送完最后一个TCP确认报文段后,再经过2MSL时长,就可以使本次连接持续时间内所产生的的所有报文段都从网络中消失。这样就可以使下一个新的TCP连接中不会出现旧连接中的报文段
TCP
保活计时器
例题
TCP报文段首部
TCP传送的数据单元称为报文段。TCP报文段既可以用来运载运载数据,又可以用来建立连接、释放连接和应答
TCP首部最短是20B
,后面有4N
字节是可选的
-
源端口:占
16
比特,写入源端口号,用来标识发送该TCP报文段的应用进程 -
目的端口:占
16
比特,写入目的端口号,用来标识接收该TCP报文段的应用进程 -
序号:占
32
比特,取值范围$[0,2^{32}-1]$
序号增加到最后一个后,下一个序号就又回到0
。作用是指出本TCP报文段数据载荷的第一个字节的序号 -
确认标志位ACK:取值为
1
时确认号字段才有效,为0
时确认号字段无效TCP
规定:在TCP连接建立后,所有传送的TCP报文段都必须把ACK置1
-
确认号:占
32
比特,取值范围$[0,2^{32}-1]$
序号增加到最后一个后,下一个序号就又回到0
。可理解为若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据 -
数据偏移:占
4
比特,并以4字节为单位用来指出
TCP
报文段的数据载荷部分的起始处距离TCP
报文段的起始处。这个字段实际上是指出TCP报文段的首部长度首部固定长度为20字节,因此数据偏移字段的最小值$(0101)_2$;首部最大长度为60字节,因此数据偏移字段最大值为$(1111)_2$
-
保留字段:占6比特,保留为今后使用,但是目前应置为
0
-
窗口:占16比特,以字节为单位。指发送方的接收窗口
窗口值作为接收方让发送方设置其发送窗口的依据,这是以接收方的接收能力来控制发送方的发送能力,称为流量控制
-
检验和:占16比特,检测范围包括TCP报文段的首部和数据载荷两部分
在计算校验和时,要在
TCP
报文段的前面加上12
字节的伪首部 -
同步标志位SYN:在
TCP
连接建立时用来同步序号
当SYN=1且ACK=0时,表明这是一个TCP连接请求报文段
对方若同意建立连接,则在响应的TCP报文段的首部中使SYN=1且ACK=1
综上,SYN=1的TCP报文段要么是一个连接请求报文段,要么是一个连接响应报文段 -
终止标志位FIN:用来释放
TCP
连接当
FIN=1
时,表明此TCP报文段的发送方已将全部数据发送完毕,现在要求释放TCP连接 -
复位标志位RST:用来复位
TCP
连接当
RST=1
时,表明TCP
连接出现了异常,必须释放连接,然后再重新建立连接;RST
置1
还用来拒绝一个非法的报文段或拒绝打开一个TCP
连接 -
推送标志位PSH:接收方的
TCP
收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付 -
紧急标志位URG:取值为1时紧急指针字段有效;取值为
0
时紧急指针字段无效。 -
紧急指针:占
16
比特,以字节为单位,用来指明紧急数据的长度当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个
TCP
报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据 -
选项:增加选项可以增加
TCP
的功能- 最大报文段长度MSS选项:
TCP
报文段数据载荷部分的最大长度 - 窗口扩大选项:为了扩大窗口(提高吞吐率)
- 时间戳选项:
- 用来计算往返时间
RTT
- 用于处理序号超范围的情况,又称为防止序号绕回
PAWS
- 用来计算往返时间
- 选择确认选项:实现选择确认功能
- 最大报文段长度MSS选项:
-
填充:由于选项长度可变,因此使用填充来保证报文段首部能被4整除
MSS设置的太大或者太小会有什么影响?
检验和
例题
第6章 应用层
概述
解决通过应用进程的交互来实现特定网络应用的问题
应用层是计算机网络体系结构的最顶层,是设计和建立见算计网络的最终目的
客户/服务器方式(C/S)和对等方式(P2P)
客户/服务器方式(C/S)
- 客户/服务器
(Client/Server,C/S)
- 客户和服务器是指通信中所涉及的两个应用进程
- 客户/服务器方式所描述的是进程之间服务和被服务的关系
- 客户是服务请求方,服务器是服务提供方
- 服务器总是处于运行等待状态,并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址
- 基于
C/S
方式的应用服务通常是服务集中型的,即应用服务集在网络中比客户计算机少得多的服务器计算机上- 由于一台服务器计算机要为多个客户机提供服务,在
C/S
应用中,常会出现服务器计算机跟不上众多客户机请求的情况 - 为此,在
C/S
应用中,常用计算机群集(或服务器场)构建一个强大的虚拟服务器
- 由于一台服务器计算机要为多个客户机提供服务,在
对等方式(P2P方式)
- P2P方式的最突出特性之一就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
- P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设置和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。
动态主机配置协议DHCP
DHCP的作用
通过
DHCP
服务器为指定网段主机分配IP
地址,使得计算机“即插即联网”
DHCP的基本工作过程
-
DHCP
客户机首先进行广播寻找DHCP
服务器("DHCP发现"消息),源地址为本机0.0.0.0
,目的地址为广播地址255.255.255.255
-
DHCP
服务器收到后,返回"DHCP提供"消息,其中包含提供给DHCP
客户机的IP
地址和相关配置信息。源地址为DHCP
服务器地址,目的地址为广播地址(因为此时目的客户机还没有IP地址) -
客户机可能会收到多个DHCP提供消息,一般以收到的第一个为准。此时客户机知道
DHCP
服务器可以给它分配地址,因此发送"DHCP请求"报文来请求分配IP
地址,报文的源地址为0.0.0.0
,目的地址为255.255.255.255
-
DHCP
收到请求信息后,查看其中事务ID是否相符,若不符则丢弃;符合则从地址池中取得一个IP
地址,并通过ARP
协议确认此地址未被使用后,将其封装进"DHCP确认"信息中,报文源地址为DHCP
服务器地址,目的地址为广播地址 -
客户机收到
DHCP
确认信息后,查看其中事务ID
是否相符,不符则丢弃;符合则再次使用ARP确认IP地址没有被使用,确认成功后将此IP地址应用(有一定租约)。 -
当IP地址租约达到0.5倍时间时,客户机会再次向
DHCP
服务器发送请求信息,此时DHCP
服务器会出现以下三种情况- 收到请求后,返回一个确认报文,其中有新的
IP
地址租期 - 收到请求后,返回否认报文,则客户机收到后立刻停止使用IP地址并重新发送"
DHCP
发现"报文 - 不响应。则在租期达到0.875倍时,
DHCP
客户必须重新发送"DHCP请求"报文,继续等待DHCP
服务器可能做出的反应。若依然无反应,则租用期到后,客户机必须立刻停止使用当前IP
地址
- 收到请求后,返回一个确认报文,其中有新的
-
客户端可随时终止DHCP服务器提供的租用期,这时只需要向
DHCP
服务器发送DHCP
释放报文即可。源地址0.0.0.0
,目的地址255.255.255.255
DHCP中继代理
域名系统DNS
DNS的作用
我们通过输入网址来访问网页,可实际上计算机间的通信是通过IP地址,所以网址的本质上是
IP
地址,将网址与IP地址映射起来就是DNS
的作用
因特网是否可以只适用一台DNS服务器?
这种做法不可取。因为因特网的规模很大,如果只有一个服务器,那么一旦其出现故障,整个因特网就会瘫痪
因此现实中采用层次结构的命名树作为主机的名字(即域名),并使用分布式的域名系统
DNS
DNS使大多数域名都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。
由于
DNS
是分布式系统,即使单个计算机出了故障,也不会妨碍整个系统的正常运行
因特网的域名结构
顶级域名(Top Level Domain,TLD)
分为以下三类:
-
国家顶级域名nTLD
采用ISO 3166的规定。如cn表示中国,us表示美国,uk表示英国、等等
-
通用顶级域名gTLD
最常见的通用顶级域名有七个,即:com(公司企业)、net(网络服务机构)、org(非营利性组织)、int(国际组织)、edu(美国教育机构)、gov(美国政府部门)、mil(美国军事部门)。
-
反向域arpa
用于反向域名解析,即IP地址反向解析为域名
二级域名
在国家顶级域名下注册的二级域名均由该国家自行确定。例如,顶级域名为jp的日本,将其教育和企业机构的二级域名定为ac和co,而不用edu和com。
我国则将二级域名划分为以下两类:
-
类别域名
共七个:ac(科研机构)、com(工、商、金融等企业)、edu(教育机构)、gov(政府部门)、net(提供网络服务的机构)、mil(军事机构)和org(非营利性组织)。
-
行政区域名
共34个,适用于我国的各省、自治区、直辖市。例如:bj为北京市、sh为上海市、js为江苏省,等等。
因特网上的域名服务器
- 根域名服务器
- 顶级域名服务器
- 权限域名服务器
- 本地域名服务器
域名和IP地址的映射关系必须保存在域名服务器中,供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。DNS使用分布在各地的域名服务器来实现域名到IP地址的转换
根域名服务器
顶级域名服务器
权限域名服务器
本地域名服务器
域名解析过程
- 为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录
- 由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)
- 不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性
-
递归查询
-
迭代查询
例题
文件传送协议FTP
将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送
FTP(FIle Transfer Protoco)
的常见用途是在计算机之间传输文件,尤其是用于批量传输文件。FTP
的另一个常见用途是让网站设计者将构成网站内容的大量文件批量上传到他们的Web服务器
- FTP提供交互式的访问,运行客户指明文件的类型与格式(如指明是否使用
ASCII
码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令) - FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件
FTP基本工作原理
- 主动模式
- 被动模式
- 用于传送控制命令的
TCP
连接在整个会话过程都保持开启状态 - 用于传送数据的
TCP
连接只会在有数据传送时开启,数据结束传送后就关闭
例题
电子邮件
电子邮件的组成
电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件
- 邮件服务器是电子邮件系统的基础设施。因特网上所有的
ISP
都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱 - 协议包括邮件发送协议(如
SMTP
)和邮件读取协议(如POP3
,IMAP
)
简单邮件传送协议SMTP
邮件读取协议(POP、IMAP)
- POP
- IMAP
基于万维网的电子邮件
例题
万维网(WWW)
概述
万维网
WWW(World Wide Web)
并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网
万维网是欧洲粒子物理实验室的Tim Berners-Lee最初于1989年3月提出的。
1993年2月,第一个图形界面的浏览器
Mosaic
1995年著名的
Netscape Navigator
浏览器上市
浏览器最重要的部分是渲染引擎,也就是浏览器内核。负责对网页内容进行解析和显示
- 不同的浏览器内核对网页内容的解析也有不同,因此同一网页在不同内核的浏览器里显示的效果可能不同
- 网页编写者需要在不同内核的浏览器中测试网页显示效果
统一资源定位符
-
为了方便地访问在世界范围的文档,万维网使用统一资源定位符
URL
来指明因特网上任何种类"资源"的位置 -
URL
的一般形式由以下四个部分组成
万维网文档
超文本传输协议HTTP
HTTP
定义了浏览器(即万维网进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器
HTTP/1.0和HTTP/1.1
HTTP请求报文
HTTP响应报文
Cookie
Cookie
提供了一种机制使得万维网服务器能够"记住"用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术
万维网缓冲与代理服务器
如果原始服务器中的文档已经修改,但是代理服务器中仍然有缓存,那么主机访问文档时是否会访问到未修改的文档从而发送错误呢?
实际上,原始服务器会为每个响应的对象设定一个修改时间字段和一个有效日期字段。当请求到达代理服务器时,若文档未过期则直接返回响应报文,否则向原始服务器发送请求。请求头部中有If-modified-since字段,记录了上次文档的修改时间,如果代理服务器中文档的修改时间与原始服务器中文档的修改时间一致,说明文档没有发送变化,因此原始服务器返回一个空文档,否则返回新文档
例题
🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏🎏
⭐
补充ACL
访问控制列表
概述
访问控制列表
ACL(Access Control List)
是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃访问控制列表被广泛地应用于路由器和三层交换机,借助于访问控制列表,可以有效地控制用户对网络的访问,从而最大程度地保障网络安全
访问控制列表利用源IP地址、目的IP地址、源端口、目的端口以及协议五个元素定义的规则
本文来自博客园,作者:自律即自由-,转载请注明原文链接:https://www.cnblogs.com/deyo/p/17403847.html