概述
计算机网络的组成结构
计算机网络分为边缘部分和核心部分。边缘部分指的是所有接在因特网上的主机,是被用户直接使用的;核心部分由大量网络和连接这些网络的路由器组成,为边缘部分提供服务。
在Internet中,用户计算机需要通过校园网、企业网或ISP联入地区主干网,地区主干网通过国家主干网联入国家间的高速主干网,这样就形成一种由路由器互联的大型、层次结构的网际网的Internet网络结构。
计算机网络的性能指标
计算机网络的性能指标主要有以下几个方面:
速率:指数据的传输速率,也称数据率或比特率,其单位是 $bps (bit/s)$。一般地,我们提到网络的速率,指的是额定速率或标称速率。
带宽:在计算机网络中,带宽常用时域上的概念,常用来表示某通道数据传输能力,指单位时间内某通道所能通过的“最高数据率”,其单位也是 $bps$。
吞吐量:指单位时间通过某个网络(或信道、接口)的实际的数据量,单位是 $bps$。
时延:时延是指数据(一个报文或分组甚至一个比特)从网络或链路的一端到另一端所用的时间,又称延迟或迟延,其单位为 $s$。网络的时延一般由以下几部分组成:
- 发送时延: 指主机或路由器发送数据帧所需要的时间,又称传输时延,其计算公式是:
- 传播时延:指电磁波在信道中传播一定的距离需要花费的时间,其计算公式是:
处理时延:路由器收到分组之后分析包首部、提取数据、差错检验、寻找路由等需要花费一定的时间,这部分时延是处理时延。
排队时延:分组进入路由器之后要先在传输队列中排队等待处理,在路由器确认了转发接口后还要再输出队列等待转发,这部分时延称为排队时延。
时延带宽积:传播时延和带宽的乘积,用于度量某段链路可以容纳多少个比特,单位是 $bit$。
往返时间:指数据在线路的两端完成一次双向交互需要的时间。对于需要收到确认消息在发送的主机,其有效数据率为:
利用率:指信道有百分之几的时间是被利用的(有数据通过的)。以$D_{0}$表示网络空闲时的时延。$D$表示网络当前的时延,那么利用率$U$与它们有如下关系:
计算机网络的体系结构
分层的优点:各层之间是独立的,这样有利于将难以处理的复杂问题简化为若干个子问题,降低复杂度;灵活性好,某一层发生了变化,只要层间接口保持不变就不会影响其他层;结构上可分割开,使得各层均可以使用最合适的技术来实现;易于实现和维护,这使得可以在子系统层面上进行实现和调试,相对于庞大的整体更加容易;有利于标准化,因为各层的功能和服务已经做出了明确的说明。
各层要考虑的主要功能:差错控制,使对等层的通信更加可靠;流量控制,保证发送端的发送速率必须使接收端来得及接收;分段和重装,发送端将数据划分为更小的单位,在接收端能将其还原;复用和分用,发送端几个高层会话复用一条低层的连接,在接收端再分用;连接的建立和释放,交换数据前先建立一条逻辑链接,数据传输结束后释放连接。
分层的缺点:有些功能会在不同层次重复出现带来额外开销。
具有五层协议的结构体系
层名称 | 数据单元 | 层作用 |
---|---|---|
应用层 | 报文 | 通过进程间的交互完成特定的网络应用 |
运输层 | 报文段 | 为进程间通信提供通用的数据传输服务 |
网络层 | 数据报(分组) | 为分组交换网的不同主机间提供通信服务 |
数据链路层 | 帧 | 在相邻结点的链路上传送帧 |
物理层 | 比特 |
- 协议:为网络中的数据交换而建立的规则、标准或约定称为网络协议,简称协议。网络协议主要由以下三个要素组成:语法,即数据与控制信息的结构或格式;语义,即需要发出何种控制信息,完成何种动作并做出何种响应;同步,即事件实现顺序的详细说明。
分组交换技术
分组交换技术中一般采用线路交换或分组交换,分组交换又分为数据报方式和虚电路方式。
线路交换要求两台计算机在进行数据交换之前,首先要建立实际的物理连接。线路交换经过建立连接、数据传输和释放连接三个阶段,其优点是通信的实时性强,适用于交互式会话,缺点为线路的传输效率低。
分组交换要求把目的地址、源地址、控制信息按照规定的格式组成数据单元进入通信子网,在其间进行节点到节点地传送,并在节点进行存储转发。分组交换的主要优点是高效、灵活、迅速、可靠,缺点是分组转发造成额外的排队时延、首部的扩充带来额外开销。
虚电路方式要求在发送分组之前,在发送方和接受方之间建立一条逻辑连接的虚电路,类似线路交换,虚电路方式也要经过虚电路建立、数据传输、虚电路释放三个阶段。与线路交换不同的是,虚电路不是专用的,每个节点与其他节点之间可能有无数条虚电路。为了确定所使用的虚电路,分组的首部需要携带虚电路号,虚电路由源主机和目标主机的路径、虚电路号、每台路由器的转发表项所组成。
数据报方式不要求建立连接,每个分组可以独立地选择一条路径,因而不同分组可能经由不同路径到达目的主机,这可能带来乱序、重复、丢失等问题。
物理层
物理层的基本概念
通信的目的是传送消息,语音、文字、图像等都是消息;数据是运送消息的实体,通常是有意义的符号序列;信号则是数据的电气或电磁的表现。
码元:在使用时域的波形表示数字信号时,代表不同离散数值的基本波形叫做码元,在使用二进制编码时,只有两种不同的码元,一种表示0状态,一种表示1状态。某种意义上,码元可以被理解为一个高电平或一个低电平。
信道:用来表示向某一方向传送信息的媒体,一条通信电路通常包含一条发送信道和一条接收信道。
网络通信系统设计要解决的问题包括数据传输类型(模拟通信、数字通信)、数据通信方式(串行通信、并行通信、单工通信、半双工通信、全双工通信)、同步方式(同步传输、异步传输)、传输介质(有线传输介质、无线传输介质)等。
物理层的通信子网可以分为点对点通信线路通信子网和广播信道通信子网。广域网主要采用点对点通信线路,城域网和局域网主要采用广播信道。
物理层的基本服务功能是:
将比特从一个节点移动到下一个节点,主要考虑如何在连接开放的传输介质上传输各种数据的比特流。
设计物理层的主要目的是向数据链路层屏蔽通信技术的差异性。
数据链路实体通过与物理层的接口,将数据传送给物理层,通过物理层按比特流的顺序,将信号传输到另一个数据链路实体。
数字编码技术
常用编码方式的编码方式有不归零制、归零制、曼彻斯特编码、差分曼彻斯特编码等。其中,采用曼彻斯特编码可以从波形中提取出信号的时钟频率,我们称这样的信号具有自同步能力。上述四种信号的编码规则如下:
不归零制:正电平代表1,负电平代表0。
归零制:正脉冲代表1,负脉冲代表0。
曼彻斯特编码:位周期中心正跳变代表0,负跳变代表1。(亦可按照其负逻辑定义。)
差分曼彻斯特编码:位周期中心恒有跳变,位开始边界有跳变为0,无跳变为1。
基本的带通调制方式:调频、调幅、调相。
信道的极限容量
在任何信道中,码元的传输速率是有上限的,传输速率超过此上限,就会出现严重的码间串扰问题,使接收端对码元的判决成为不可能。
信噪比:指信号的平均功率与噪声的平均功率之比,常记为$S/N$,单位是分贝$(dB)$,即:
香农公式:香农公式指出了信道的极限传输速率$C$与信道的带宽$W$(以$Hz$为单位)以及信号平均功率$S$和信道高斯噪声功率$N$的关系如下:
信道复用技术
常用的信道复用技术一般有:频分复用、时分复用、波分复用和码分复用。
频分复用:所有用户在同样的时间内占用不同的带宽资源。
时分复用:所有的用户在不同的时间占用同样的频带宽度。
波分复用:在光纤技术中,由于光载波的频率很高,所以习惯上用光的波长而非频率表示所使用的光载波,波分复用也就是光的频分复用。
码分复用:又称码分多址(CDMA),所有的用户在同样的时间使用同样的频带进行通信,但各用户使用经过特殊挑选的特殊码型而使彼此之间没有干扰。
CDMA系统原理
在CDMA中,每一个比特时间被划分为$m$个短的间隔,称为码片。每一个使用CDMA的站被指派一个唯一的$m\ bit$的码片序列,,以连续的码片序列表示1,其反码序列表示0。按照惯例,我们将码片序列中的0写作-1,将1写作+1。
在CDMA系统中,分配给每一个发送站的码片序列不仅要求各不相同,还必须正交。用数学关系描述就是:令向量$S$表示站S的码片序列向量,向量$T$表示任意一个其他站的码片序列向量,那么应满足向量$S$与$S$的规格化内积为1,向量$S$与$T$的规格化内积为0,即:
CDMA的工作原理是,若发送站S将要发送的信息按照其码片序列扩频为信号,此时的扩频信号只包含互为反码的两种码片序列。若有其他发送站,其他发送站也按照其自身的码片序列生成自己的扩频信号。发送站将这些信号叠加发送,即。假定接收站准备接受来自S站的信号,只需将收到的信号与S站的码片序列求规格化内积,即,显然,后一项由于与这两个码片序列正交恒为0,所以规格化内积的结果就只是S站的发送数据。
物理层的硬件
- 物理层常用的有线传输介质有双绞线、同轴电缆和光纤;物理层常用的无线介质有无线电波、微波和卫星。
数据链路层
数据链路层的基本概念
数据链路层使用的信道主要有两种类型:点对点通信、广播信道。
链路:指从一个节点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
数据链路:指链路和实现在链路上运行的协议的必要的软件和硬件的整体。
误码率BER:比特在传输过程中可能会产生差错,1变成0或者0变成1,称作比特差错。在一段时间内,出现差错的比特占所传输的比特总数的比率称为误码率。
数据链路层的三个基本问题:封装成帧、透明传输、差错检测。
封装成帧:指在一段数据前后分别添加首部和尾部,以构成一个帧。这样的帧就是数据链路层的数据传送单元。首部和尾部的两个作用是:帧定界和传递控制信息。为了提高帧的传输效率,应尽可能使数据部分的长度大于首部和尾部的长度,故而,数据链路层的协议都规定了帧的数据部分长度上限——最大传送单元MTU。帧定界使用特殊的帧定界符实现,控制字符SOH(0x01)放在一帧的最前面表示帧的开始,控制字符EOT(0x04)表示帧的结束。
透明传输:透明这个概念指某一个实际存在的事物看起来却好像不存在一样。透明传输的概念就是指不论什么样子的比特数据组合都可以原模原样没有差错地通过数据链路层。为了实现透明传输,就必须使数据中可能出现的控制字符SOH和EOT在接收端不被解析为控制字符。于是,数据链路层采用字节填充或者说字符填充的方式解决,即在数据中的控制字符SOH和EOT前插入一个转义字符ESC(0x1B),如果数据中出现了一个转义字符,那么也需要在其前面再插入一个转义字符。
差错检测:为保证数据的可靠性,数据链路层广泛地使用循环冗余检验CRC的检测技术,利用CRC运算得出冗余码并把它附在数据之后,称为帧检验序列FCS。
循环冗余检验算法:
原数为M,左移n位,选定n+1位的除数进行模2意义下的取余运算(减法结果即求异或),得到余数即FCS,加到M后面传输.
对接收到的每一帧进行CRC检验,余数为0即通过检验.
数据链路层使用差错检测技术只能保证对帧的无差错接受,可以近似地认为凡是接收端收到的数据链路层的帧均无差错,但是数据链路层的传输是不可靠的。可靠传输指发送端发送什么,接收端就收到什么,引起不可靠传输的传输差错包括比特差错和帧丢失、帧重复、帧失序。
为了使数据链路层更好地适应多种局域网标准,IEEE将局域网的数据链路层拆分为两个子层:逻辑链路控制LLC子层和媒体接入控制MAC子层。
Question & Answer
Q:为什么数据链路层不提供可靠传输?
A:由于现在的数据链路的通信质量一般比较高,因为链路质量差引起传输差错的概率大大降低,所以数据链路层不需要使用确认和重传机制,而使改正差错的任务可以由上层的协议来完成,这样做可以提高通信效率。
点对点协议PPP
点对点协议PPP(Point-to-Point Protocol)的设计需求:简单、封装成帧、透明、支持多种网络层协议、支持各种链路、差错检测、检测连接状态、最大传送单元、网络层地址协商、数据压缩协商。
PPP协议的三个组成部分:一个将IP数据包封装到串行链路的方法、一个用来建立、配置和测试数据链路连接的链路控制协议LCP、一套网络控制协议NCP。
PPP协议的帧格式:如下图所示PPP协议的首部和尾部分别有四个字段和两个字段,首部的第一个字段和尾部的第二个字段都是标志字段F(0x7E)标志字段是PPP协议的开始和结束,即PPP帧的定界符。首部的标志字段之后连续的两个字节是地址字段A(0xFF)和控制字段C(0x03),不过这两个字段并不携带实际的控制信息。PPP首部的第四个字段是占2字节的协议字段,譬如当信息字段是IP数据报时,这一字段就是0x0021。尾部的第一个字段占2字节,是使用CRC的帧检测序列FCS。信息字段长度可变,其最大值为1500字节。
PPP协议的透明传输机制:异步传输中,PPP协议将转义字符规定为0x7D,采用字节填充的方式转义;同步传输中,PPP协议使用零比特传输的方式,先扫描一遍数据,每遇到连续的5个1则立即填入一个0,以确保不会出现连续的6个1,然后再封装成帧。
PPP协议的工作状态:
Ethernet协议
CSMA/CD协议
以太网的特点:面向无连接,以太网数据帧不进行编号、不要求确认,以太网提供尽最大努力的交付,即不可靠的交付;以太网采用曼彻斯特编码的信号;以太网解决冲突的方式是载波监听多点接入/碰撞检测(CSMA/CD)。
传统的以太网采用总线型拓扑结构,当挂在总线上的多个站同时发送数据时,总线上的信号是互相叠加的,而使信号产生失真导致无法恢复出有用的信息来,称为碰撞或者冲突。因此一旦检测到总线上的电压幅度超过门限,就会认定局域网中发生了碰撞,那么适配器就要立即停止发送。我们假定在局域网中单程端到端的传播时延为,如果发送方想知道发送的数据是否发生碰撞,显然,最长只需要经过一次端到端的往返时延即可确认,即需要的时间就会知道消息是否发生了碰撞,称这段时间为争用期,也叫碰撞窗口。若在碰撞窗口内未检测到碰撞,那么数据的发送则一定不会发生碰撞。
截断二进制指数退避算法:在以太网中,若某几个发送碰撞的站都在监听信道,那么它们会得出结论信道是空闲的,但是如果它们又重新发送信息,那么又会发生碰撞,为了使这种冲突的改率降低,以太网采用截断二进制指数退避算法,具体算法如下:
协议规定以太网的争用期。对于10的以太网,在争用期内可以发送512,也即64字节。有时我们也使用比特作为争用期的单位,即说争用期为512比特时间。
当发生冲突,需要进行重传时,需要从离散的整数集合中随机选择一个数,重传的时间应推后倍的争用期。假定重传次数为,这里的参数遵循公式。
当发送站过多而使得连续冲突使得重传次数达到16次仍不能发送成功时,丢弃该帧并向高层报告。
由于以太网的争用期长度为64字节,所以如果发生碰撞,一定是在前64个字节中发生碰撞,而这时一定会停止发送,这时已发送的字节一定小于64字节。故而,凡是长度小于64字节的帧都是无效帧,应该舍弃。
检测到冲突的站往往要发送一段长度为32或48的人为干扰信号以便让所有的用户都知道发生了碰撞,称为强化碰撞。因此,当发生碰撞时,若记源站从发送到检测到碰撞的时间为,记发生碰撞的站发出的强化碰撞的信号持续时间为,那么信道被占用的总时间为。
为了保证接收站来得及清理数据,以太网规定了帧间最小间隔为9.6,相当于96比特时间。
CSMA/CD协议要点归纳:
准备发送:从适配器中获取一个网络层的报文,加上以太网的首部和尾部,组成以太网帧,放入适配器缓存中。
检测信道:若信道忙,则一直检测,直到信道转为空闲。若信道空闲,并在96个比特时间内保持空闲(帧间最小间隔),则发送这个帧。
发送过程:边发送边监听,若争用期内未发生碰撞,则发送成功,回到步骤1;若检测到碰撞,停止发送,发送人为干扰信号,执行退避算法,倍的512个比特时间之后,回到步骤2,持续检测信道。若16次重传仍然不成功,停止重传并向上报错。
以太网的MAC层
硬件地址:又称物理地址或MAC地址,它是一个被固化在适配器ROM中的48位的全球唯一地址。
以太网的MAC帧结构较为简单,由五个字段组成前两个字段是6字节长度的目的地址和源地址,第三个字段是2字节的类型字段,指定使用了什么样的高层协议,第四个字段是一个数据字段,其长度是46到1500字节之间,最后一个字段是4字节的帧检测序列FCS。
以太网在链路上实际的传输长度要比MAC帧多8个字节,这8个字节中最后一个字节是帧开始界定符,前7个字节称为前同步码,它是一串1和0交替的比特序列,这是利用曼彻斯特编码的自同步性,使适配器能迅速调整其时钟频率达到与发送端的同步。由于以太网有帧间最小间隔,所以找到帧开始界定符之后连续到达的比特流同属于一个MAC帧,故而,以太网不需要帧结束界定符,也不需要使用字节插入来保证透明传输。
数据链路层的网络硬件
集线器:集线器是一种工作在物理层的设备,它的每个接口仅仅简单地转发比特而不进行碰撞检测,是一种多接口转发器。使用集线器的以太网在逻辑上仍然是一个总线网,各站共享逻辑上的总线,使用的仍然是CSMA/CD协议。
适配器:适配器包含处理器和存储器,其功能包含了物理层和数据链路层两个层次的功能,它具有自己的唯一的硬件地址。适配器收发帧时,不适用CPU而直接处理,当适配器收到有差错的帧时,直接丢弃,收到正确的帧时,使用中断通知计算机并交付协议栈中的网络层。
网桥:网桥会对收到的帧的目的地址进行转发和过滤,当网桥收到帧时,根据此帧的目的MAC地址,查找网桥中的地址表,然后确定该帧如何转发或者丢弃。
交换机:交换机即交换式集线器,在其诞生之后很快淘汰了网桥,交换式集线器又称以太网交换机或第二层交换机,其本质是一个多接口的网桥。交换机一般以全双工方式工作,具有并行性,相互通信的主机独占传输媒体,无碰撞地传输数据。交换机内部还有存储器,能在端口繁忙时对帧进行缓存。以太网交换机是一种即插即用设备,其内部的帧交换表(地址表)是通过自学习算法自动地逐渐建立起来的。
以太网交换机的自学习算法:交换机中的交换表初始状态时空的,当A向B发送一个帧时,从接口1进入交换机,交换机收到帧之后查找交换表,若有B的接口记录,按照交换表中的记录直接交付;若没有记录交换机将地址A和端口1这一条信息写入交换表,在向除1之外所有的端口广播这个帧,B之外的其他主机收到这个帧因为地址不对选择丢弃,只有B收下这个帧,这样帧就发送到了主机B。(这个过程中B不会发送响应,所以交换机并不知道哪个接口收到了报文,并不会得到B的端口信息。也就是说,交换机的自学习只学习源地址的信息。)
网络层
网络层的概念
- 网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据包服务。网络层不提供服务质量的承诺,也不保证分组交付的时限。
IP地址
基于分类的IP地址
- IP地址:为抽象的网络上的每一台主机(或路由器)的每一个接口分配一个全世界范围内唯一的32为标识符。基于分类的IP地址包含两个字段,分别是网络号和主机号,一个网络号在整个互联网范围内必须是唯一的,一台主机号在它前面的网络号所指明的范围内必须是唯一的。为了提高可读性,IP地址采用点分十进制记法,即将32位二进制IP地址每8位转写为一段十进制数字,并用点连接,形如
192.168.0.1
。基于分类的IP地址将所有的IP地址划分为5类,A类、B类和C类地址的网络号字段分别为1个、2个和3个字节长,网络号字段前面有1~3位的类别位,其数值分别为0,10和110。D类地址前四位类别位是1110,用于多播,E类地址前四位类别位是1111,保留使用。
网络类型 | 最大网络数 | 第一个网络号 | 最后一个网络号 | 每个网络中的主机数 |
---|---|---|---|---|
A | $2^{7}-2$ | 1 | 126 | $2^{24}-2$ |
B | $2^{14}-1$ | 128.1 | 191.255 | $2^{16}-2$ |
C | $2^{21}-1$ | 192.0.1 | 223.255.255 | $2^{8}-1$ |
A类地址中,IP地址中网络号字段全为0的地址是一个保留地址,代指本网络,网络号为127的地址作为本地软件的环回地址,目的地址是环回地址的数据报不会被路由器转发到互联网上。B类网络和C类网络的两个IP,
128.0.0.0
和192.0.0.0
也是不被指派的。此外地,主机号字段全为0的某主机的单个网络地址,而主机号字段全为1则表示该网络上所有主机。IP地址具有以下的特点:IP地址是分等级的,每一个IP地址都是有网络号和主机号组成。这方便了IP地址的管理,减小了IP地址分配的负担,也使得路由器可以只根据网络号转发分组,减小了路由表的存储占用和查找时间;IP地址是标识一个主机和一条链路的接口,当一台主机接入了两个网络时,其必有两个网络号,称为多归属主机;使用转发器或网桥连接的若干局域网仍为一个网络,具有相同的网络号,具有不同网络号的网络应使用路由器互连;互联网同等对待每一个IP地址。
IP地址是一种软件实现的逻辑地址。
划分子网
基于分类的IP地址存在的问题:IP地址空间的利用率有时很低;给每一个物理网路分配一个网络号使得路由表变得很大而使网络性能变差;两级IP地址不够灵活。
为解决上述问题,在IP地址中增加了一个子网号字段,使得两级IP地址变为三级IP地址,这种解决方案叫做划分子网,又称子网寻址或子网路由选择。划分子网是一个网络内部的行为其对外仍表现为一个网络,其具体操作是从两级IP地址的主机号部分借用一定的位数作为子网号。
子网掩码:由于单从IP地址无法判断主机是否进行了划分子网,故而使用子网掩码用来标记主机的网络地址,子网掩码同样是32位的比特序列,将IP地址中网络号对应的比特位置为1其他位为0即是其子网掩码。可见,将IP地址与子网掩码进行与运算的结果就是该IP的网络地址,这样就可以把IP地址的网络地址提取出来。子网掩码是一个网络或一个子网的重要属性。
互联网标准协议规定,子网号不能为全1或者全0,故而划分子网减少了连接在网络上的主机总数,但是划分子网增加了IP地址的灵活性。
无分类编址CIDR(构造超网)
CIDR消除了传统的地址分类和划分子网的概念,其将IP地址划分为两部分,前面部分是网络前缀用来指明网络,后面部分是主机号用来区分主机,是一种无分类的两级编址。CIDR使用斜线记法或称CIDR记法,即在IP地址之后加上
/
,然后写上网络前缀所占的位数。网络前缀相同的连续的IP地址被称为一个CIDR地址块。在CIDR中,仍存在子网掩码,又称地址掩码,其规则与传统的规则类似,CIDR记法中斜线后面的数字就是地址掩码中连续的1的个数。使用CIDR之后,路由表中传统分类的多个项目可能都会处于一个CIDR地址块中,这样就可以规约成一个项目,这被称作路由聚合,也叫构成超网。
网络层的协议
网际协议IP
IP数据报由首部和数据部分两部分组成,首部的前一部分是固定部分,共20字节,是所有的IP数据报都具有的,在首部固定部分后面的是一些可选字段,其长度可变。IP数据报的格式如下图,对于首部中比较重要的字段,下文会给出具体说明:
版本:指IP协议的版本,使用IPv4此处即为4,使用IPv6此处即为6。
首部长度:IP协议限定首部字节数必须是4的倍数,不足须使用0填充,由于首部固定长度为20,故这一字段最小值为5,该字段最大可为15,即首部60字节。
总长度:指首部与数据部分的长度之和,单位是字节,其最大值是字节。
标识(identification):实现IP的软件程序会在存储器中维护一个计数器,每产生一个数据报,计数器就加一,并将这个值赋给标识字段。当数据报超过网络的MTU时,就不得不对数据报进行分片,而IP协议面向无连接,为了保证接收方能将分片重组起来,会将这一个序号复制到每一个分片之中,作为同一个数据包的不同分片的标志。
标志(flag):标志位共3位,其中只有两位有意义。最低位记为MF(More Fragment),当该位为1时,意味着后面还有分片,为0时,意味着这时分组中最后一个分片;中间一位记为DF(Don’t Fragment),意为不能分片,只有这一位为0时才允许对数据报进行分片。
片偏移:该字段会指出对于一个较长的分组的一个分片,其相对原报文的相对位置,片偏移以8个字节为一个单位,这就是说,每一个分片必须是8字节的一个整数倍。
生存时间(TTL):指定数据报在网络中的寿命,使用路由转发的跳数表示,当TTL减小到0,这个数据报就将被路由器丢弃。
协议:指明数据报携带的数据使用了哪种协议,使主机的IP层知道该把数据部分上交给哪个协议处理。
首部校验和:该字段只计算首部校验和,不包含数据部分,计算的算法为:发送方将IP数据报首部划分为若干个16位字序列,并把首部检验和置为0,用反码算术运算将所有的16位字相加后得到的和的反码设为首部校验和字段的值;接收方接到数据之后,将所有的首部16位字再使用反码运算相加,若结果为0,说明无差错,否则,将该数据报丢弃。
下一代互联网IPv6
- IPv6的诞生初衷是为了解决IPv4地址不足的问题,IPv6同IPv4一样,面向无连接,但将协议数据单元PDU称为分组,而不是数据报。IPv6分组由两大部分组成,即基本首部和有效载荷,有效载荷部分还允许有零个或多个扩展首部。IPv6提供了更多的地址空间,提升了效率和安全性。
地址解析协议ARP
IP工作在网络层,但在进行实际网络的链路上进行数据帧的传送时,需要使用网络的硬件地址,这一问题由地址解析协议ARP实现。每一台主机上都设有一个ARP高速缓存,里面有本局域网上各主机和路由器的IP地址到硬件地址的映射表,缓存中的每一项都有其生存时间,凡超过生存时间的项目都从高速缓存中删除掉,以此来保证ARP高速缓存的时效。
ARP协议的工作原理(以局域网内某主机A向B发送数据为例,假定初始时A的缓存表是空的):
A主机上的ARP在局域网内广播一个ARP请求分组,分组的内容形如:“我的IP地址是
foo.bar.baz.qux
,硬件地址是FO-OB-AR-BA-ZQ-UX
,我想知道IP地址为qux.baz.bar.foo
的主机的硬件地址。”局域网上,所有运行着ARP进程的主机均接受到这一ARP请求分组。
B的IP地址与ARP请求分组中要查询的IP一致,收下该请求分组,并发送形如“我的IP地址是
qux.baz.bar.foo
,我的硬件地址是QU-XB-AZ-BA-RF-OO
”的响应分组,其它主机IP与请求中的IP不一致,丢弃该请求。主机A收到响应分组,在其高速缓存中添加这一条映射关系。实际上,为了减少网络上的通信量,B在接受到请求分组之后,也会将A的IP地址与MAC地址的映射关系添加到B的高速缓存里。
ARP请求分组是一个广播消息,但ARP响应分组只是一个普通的单播。
网际报文控制协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,网络层使用网际报文控制协议ICMP,ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文被作为数据部分封装在IP数据报中发送,但尽管如此,ICMP仍是网络层的协议。
ICMP的报文分为两种,ICMP差错报告报文和ICMP询问报文。ICMP的报文格式如下,其首部有三个字段,占4个字节,分别是类型、代码和首部检验和。其中,代码字段决定了ICMP报文的类型。ICMP差错报文共有四种,分别是终点不可达、时间超过、参数问题和改变路由(重定向);ICMP询问报文有两种,即回送请求和回答和时间戳请求和回答,它们分别用于测试目标主机是否可达和完成时钟同步与时间测量。使用首部校验和是因为ICMP报文被封装在IP报文之内,而IP报文的检验和仅对IP报文的头部进行校验而无法确保ICMP报文是无差错的,ICMP差错报告的报文统一为出错的IP数据报的首部和数据部分前8个字节(为了提取运输层协议的端口号)。
1
2
3
4
5
6
7
8
90 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+下列情况不应发送ICMP差错报告报文:
对于ICMP差错报文,不应发送ICMP差错报文。
对于分片数据报中除第一个之外其他报文,不应发送ICMP差错报文。
对于具有多播地址的数据报,不应发送ICMP差错报文。
对于具有特殊地址的报文,譬如环回地址,不应发送ICMP差错报文。
ICMP的重要应用包括:分组网间探测PING和Traceroute。
路由选择协议
分层次的路由选择协议
互联网采用的路由选择协议主要是自适应的(动态的)、分布式的路由选择协议。
自治系统AS:指单一技术管理下的一组路由器,这些路由器使用自治系统内部的路由选择协议和共同的度量。一个AS对外表现出的是一个单一的和一致的路由选择策略。称自治系统内部的路由选择协议为内部网关协议IGP,自治系统间的路由选择协议叫外部网关协议EGP。
内部网关协议
- 内部网关协议主要两个:路由信息协议RIP和开放最短路径优先OSPF,二者的主要区别如下表所示:
RIP | OSPF |
---|---|
基于距离向量 | 基于链路状态 |
仅和相邻路由器交换 | 向自治系统内所有路由器发送信息(洪泛法) |
交换本路由器所知道的全部信息,即当前的路由表 | 交换与本路由器相邻的所有路由器的链路状态及其度量 |
按固定的时间间隔交换信息 | 仅在链路状态改变时交换信息 |
使用RIP协议的自治系统内的路由器上的路由表中存储的最主要的信息就是该路由器到某个网络的最短距离以及要经过的下一跳地址,这个最短距离的计算采用距离向量算法,该算法基于Bellman-Ford算法,其规则为:
对于地址为X的路由器发送来的RIP报文,先将报文中所有项目的“下一条”字段修改为X,并将所有的“距离”字段加1。设此时的项目结构为,目的地址N,距离为d。
对于修改后的每一条项目,执行如下规则:
若原路由表中没有目的网络N,则将该项目添加进路由表中。
若原路由表中有目的网络N,且下一跳为X,使用最新的距离d更新路由表中项目,不论大小关系如何。
若原路由表中有目的网络N,且下一跳不为X,若收到的项目中的距离d小于原路由表中的距离,使用新的项目更新路由表。
其他情况下,什么都不做。
若3分钟仍收不到相邻路由器的更新路由表,则把此路由器标记为不可达,距离设为16。(RIP协议中,距离16表示不可达。)
返回。
RIP的报文由UDP封装。
RIP协议的优点是:实现简单、开销较小。RIP协议的问题是:当网络出现故障时,要经过较长的时间才能将信息传送到所有的路由器。
使用OSPF的自治系统内的所有路由器都保存了全网的拓扑结构图,称为链路状态数据库,这个拓扑结构在全网范围内是一致的,这称为链路状态数据库的同步。由于OSPF的链路状态数据库更新很快,OSPF的路由表更新过程收敛得也很快,这是它主要的优点。
OSPF采用将自治系统划分为若干个区域,以降低局域网范围内因为洪泛法所带来的通信量,因而OSPF可以应用在很大规模的自治系统中。OSPF使用IP数据报封装。
OSPF具有以下一些优点:
OSPF允许管理员给每条路有指派不同的代价,因此,对于不同的业务,OSPF可以给出不同的路由,具有极高的灵活性。
若到达同一目的地址有多条不同的路径,OSPF支持在这几条路径内为通信进行负载均衡。
OSPF协议下交换的分组都具有鉴别功能,可以保证仅在可信赖的路由器上进行链路状态的交换。
OSPF支持采用可变长度的子网划分和CIDR。
OSPF的链路状态被一个32位的序号标记,序号越大,链路状态信息越新。
OSPF共有五种分组类型:问候分组、数据库描述分组、链路状态请求分组、链路状态更新分组和链路状态确认分组。其中,问候分组被用来每10秒交换一次以确认邻站可达,其余几种分组都用来完成链路状态的同步。
外部网关协议
域间路由选择常用边界网关协议BGP。域间路由选择具有以下两个原因,以致于内部网关协议在这里不再适用。其一,互联网的规模太大使得AS之间的路由选择过于困难;其二,AS之间的路由选择必须考虑诸多相关策略,出于政治、经济、安全等原因,最少跳数规则选取出来的路径并不一定是合适的。因此,BGP期待能够得出一条比较好的路径,而非最佳路径。
BGP协议采用路径向量路由选择协议,在对等站之间传递路径向量。BGP协议支持CIDR。现行的BGP-4协议规定了四种报文:OPEN、UPDATE、KEEPALIVE、NOTIFICATION。
分组转发算法
互联网上的分组转发都是基于目的主机所在的网络进行的,但是,大多数情况下允许有这样的特例,在路由表中为某一个特定的主机知名一个路由,这种路由叫做特定主机路由;此外路由器还可以采用默认路由以减少路由表所占用的空间和搜索路由表所占用的时间。
基于IP地址分类的分组转发算法:
从数据报首部提取出目的主机的IP地址D,进而得出网络地址N。
若N是于此路由器直接相连的某个网络地址,则直接进行直接交付(这个过程包括通过ARP协议获取目的地址对应的硬件地址以及封装成帧并发送的过程);否则间接交付,执行步骤3。
若路由表中有目的地址D的特定主机路由,则将数据报交付给路由表所指定的下一跳路由器;否则,执行步骤4。
若路由表有到达网络N的路由,则将数据报交付给路由表所指明的下一跳路由器;否则,执行步骤5。
若路由器有一个默认路由,则将数据报交付给路由器所指定的默认路由器;否则,执行步骤6.
报告转发分组出错。
基于子网划分的分组转发算法:
从数据报首部提取出目的主机的IP地址D。
对路由器相连的所有网络逐个检查,用个网络的子网掩码与D逐位相与,看结果是否与相应网络的网络地址相匹配。若匹配,则直接进行直接交付(这个过程包括通过ARP协议获取目的地址对应的硬件地址以及封装成帧并发送的过程);否则间接交付,执行步骤3。
若路由表中有目的地址D的特定主机路由,则将数据报交付给路由表所指定的下一跳路由器;否则,执行步骤4。
对路由表中的每一行,用个这一行的子网掩码与D逐位相与,看结果是否与该行的网络地址N相匹配。若匹配,则将数据报交付给路由表所指明的下一跳路由器;否则,执行步骤5。
若路由器有一个默认路由,则将数据报交付给路由器所指定的默认路由器;否则,执行步骤6.
报告转发分组出错。
无分类编址的最长前缀匹配:在使用CIDR时,每个IP地址由网络前缀和下一跳地址组成,这使得查找路由表时,可能会查到不止一个匹配结果,对此,CIDR采用最长前缀匹配原则,其原则是,应当从匹配结果中选取具有最长网络前缀的路由。
网络层的硬件
路由器:路由器是一种具有多个输入输出端口的专用计算机,其任务是转发分组。典型的路由器可划分为两大部分:路由选择部分和分组转发部分。
路由器的分组转发部分仍然可以划分为三个部分:交换结构、一组输入端口和一组输出端口。
运输层
运输层协议概述
- 主机间通信的实质
- 主机间的通信实质上是应用进程互相通信(端到端通信)
- 运输层协议和网络层协议的区别
- IP协议提供主机间的逻辑通信,TCP和UDP协议提供进程之间的逻辑通信
- 运输层协议的实现位置
- 在端系统中而不是在路由器中实现的
- 运输层的分组称为报文段
- 进程间相互作用的模式
- 进程间相互作用的模式为客户/服务器模型,发起通信的进程被标识为客户,会话开始时等待联系的进程是服务器 {P57}
- 运输层的主要功能:
- 提供进程间端到端的逻辑通信
- 复用和分用
- 差错检测
- TCP和UDP的数据单位协议
- TCP(传输控制协议)的数据单位协议是TCP报文段
- UDP(用户数据报协议)的数据单位协议是UDP报文或用户数据报
多路复用与多路分解
多路复用和多路分解的定义
- 多路复用:发送端处理多个socket的数据,加上运输层首部
- 多路分解:利用首部信息将接收到的报文段传送到正确的socket
端口
- 端口用一个16位的端口号进行标志
- 端口号只具有本地意义
- 熟知端口号为0~1023
用户数据报协议UDP
- UDP协议的主要特点
- UDP协议是一种无连接的、不可靠的运输层协议
- 只在IP数据报服务上增加了端口功能和差错检测功能
- UDP的优点:对于数据的应用层控制更加精细、无需建立连接(不会引入建立连接的时延)、无连接状态(支持更多用户)、分组首部开销小
- UDP的socket标识:目的IP地址和目的端口号
- UDP数据报首部
- 格式:伪首部、源端口、目的端口、长度、检验和
- 8个字节、4个字段,每个子段2个字节
- 伪首部是IP数据报的首部,仅在计算检验和时一并考虑
传输控制协议TCP
TCP协议的主要特点
- TCP是一种面向连接的、可靠的传输层协议
- TCP协议建立在不可靠的网络层IP协议之上,IP不能提供任何可靠性机制
- TCP提供的是全双工服务(应用层数据从在两个进程之间来回流动)
面向字节流
- TCP对应用进程发送到缓存区的长度并不关心(只关心字节流)
- TCP根据对方的窗口值和当前网络拥塞程度决定报文段包含的字节数量(UDP的报文长度由应用层给出)
- TCP可把报文段划分短或积累长以后再发送
TCP的socket标识:源IP地址、源端口号、目的IP地址、目的端口号
TCP的报文结构
- TCP长度受限于最大报文段长度(MSS),由最大链路层帧数(即最大传输单元,MTU)来设置。以太网和PPP协议具有1500字节的MTU
- TCP数据报首部(20位 - 60位)
- 源端口、目的端口:2字节(16位)
- 序号:4字节,表示本报文段所发送数据第一个字节的序号
- 确认号:4字节,表示期望收到对方下一报文段第一个数据的编号
- 首部长度:占4位,以4个字节为一个单元,实际值在5-15之间
- 保留字段:占6位,今后的协议中预留
- URG:占1位,紧急字段(高优先级数据)
- ACK:占1位,ACK=1时确认号字段有效
- PSH:占1位,PSH=1时立即传递给上层
- RST:占1位,出现严重差错必须重新建立连接
- 接收窗口:2字节,用于流量控制
- 检验和:2字节,类似UDP有伪头部
- 紧急指针:2字节,说明紧急数据的长度
- 选项:长度可变,用于协商MSS、窗口扩大选项、时间戳选项、选择确认选项
- 填充:让整个首部的长度为4的整数倍
可靠数据传输
停止等待协议
- rdt1.0 可靠信道(无差错、无丢包):接收端不需要提供任何反馈信息给发送方
- rdt2.0 有差错的信道
- 差错检测:校验码的发送
- 接收方反馈:发送NAK或冗余ACK要求重传
- rdt3.0 有差错、丢包的信道
- 接收方必须在报文中包含序号
- 重传的条件是超时,在rdt3.0下重传与冗余ACK无关
- 自动重传请求(ARQ)实现可靠传输协议,接收方不需要请求重传
- 缺点:信道利用率太低
流水线传输
- 回退N步
- 发送方最多保持n个未确认报文段,接收方累积确认、丢弃超前分组
- 发送方维护最早未确认报文段计时器,收到ACK后如有已发送未确认的分组则重启计时器
- 优点:容易实现、丢失确认也不必重传
- 缺点:不能反映接收方正确接收到所有分组的信息
- 选择重传
- 发送方最多保持n个未确认报文段,接收方逐个返回已接收ACK
- 发送方只重传出错的报文段
- 每一个未确认的报文段维护计时器
- 回退N步
TCP可靠传输的实现
每个报文段设置计时器,超时则重传
重传时间
- 加权平均往返时间 ,推荐值为0.125
- 偏差加权平均值 推荐值为0.25
- 超时重传时间
- Karn算法:报文重传则不予计算,报文每重传一次则RTO加倍,最高64s
ACK的生成
接收端事件 | 接收端动作 |
---|---|
序号为#报文段按序到达 | 延迟确认,等待下一报文至多5000ms |
序号为#报文段按需到达,且有报文段等待确认 | 立即发送累积确认 |
序号更高报文段到达(检测空隙) | 立即发送重复确认 |
报文段到达填充空隙 | 如果填充第一个空隙,立即发送确认 |
选择确认SACK
- 在首部选项字段加入SACK选项,最多指明4个字节块的边界信息
- 左右边界表示时左闭右开
TCP的流量控制
- 接收窗口
- :主机B上应用进程从环从读出的数据流最后一个字节的编号
- $LastByteRcvd$:从网络中到达的并且已经放入主机B接收缓存中的数据流的最后一个字节编号
- $rwnd$:接收窗口(见报文段格式)
- 发送缓存与接收缓存
- 发送缓存用来存放应用程序送给TCP准备发送的数据;TCP已发出但未确认的数据
- 接收缓存用来存放按序到达且应用程序尚未度曲的程序;不按序到达的数据
- 由于时间滞后,A的发送窗口并不总是和B的发送窗口一样大
- 持续计时器:用于探测打破死锁
- 接收窗口
连接建立与释放
- TCP通信的三个阶段:连接建立、数据传送、连接关闭
- 三次握手
- 客户发送连接请求报文段,SYN=1,序号seq=x(CLOSED变为SYN-SENT)
- 服务器同意连接请求,SYN=1,ACK=1,ack=x+1,seq=y(LISTENE变为SYN-RCVD)
- A发送确认报文,ACK=1,ack=y+1,seq=x+1,并通知上层连接建立(SYN-SENT变为ESTABLISHED)
- B通知上层连接建立(SYN-RCVD变为ESTABLISHED)
- 四次挥手
- 通信双方均可释放连接
- 第一次挥手,FIN=1,seq=u(此时A停止发送数据,进入FIN-WAIT1状态)
- 第二次挥手,ACK=1,ack=u+1,seq=v(此时TCP连接处于半关闭状态,B若发送数据,A仍要接收,B接收时进入CLOSE-WAIT状态,A接收时进入FIN-WAIT2状态)
- 第三次挥手,B发送FIN=1,ACK=1,seq=w,ack=u+1,应用通知TCP释放连接(B进入LAST-ACK状态,A接收时进入TIME-WAIT状态)
- 第四次挥手,A发出确认ACK=1,seq=u+1,ack=w+1(A进入TIME-WAIT状态,B接收时进入CLOSED状态)
- A等待2MSL后关闭。原因如下
- 保证最后一个ACK报文段能够到达B
- 防止“已失效的连接请求报文段”出现在本连接中
TCP的拥塞控制
拥塞控制和流量控制的区别
- 拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素
- 流量控制往往指在给定的发送端和接收端之间的点对点通信量的控制
- 流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收
拥塞窗口cwnd取决于网络拥堵程度。发送窗口=min{接收窗口,拥塞窗口}
慢开始和拥塞避免算法
- 每经过一个传输轮次,拥塞窗口cwnd加倍
- 传输轮次是指把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认
- 发送方判断网络出现拥塞时,无论此时在执行慢开始算法还是拥塞避免算法,将ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2),cwnd设置为1,执行慢开始算法
- 乘法减小:超时会将ssthresh设置为一半,频繁出现拥塞时ssthresh乘法下降
- 加法增大:即拥塞避免算法,在收到报文段确认后cwnd增大一个MSS的大小
快重传和快恢复
快重传:发送方收到三个重复确认立即重传对方尚未收到的报文段
快恢复:当发送方收到三个重复确认后,ssthresh减半(乘法减小算法),执行加法增大算法。注意,此时cwnd设置为ssthresh或$ssthresh+3\times MSS$,后者对每一个重复的确认均增加MSS,收到重传的报文确认时将cwnd置为ssthresh
应用层
应用层的概念
运输层为应用进程提供了端到端的通信服务,但不同的应用进程之间需要有不同的通信规则,应用层协议就是为了定义这些通信规则,应用层协议主要定义了:应用进程交换的报文类型、各种报文类型的语法、字段的语义以及进程何时、如何发送报文及如何响应报文的规则。
应用层的协议多是基于客户服务器方式,客户和服务器都是指通信中所涉及的两个应用进程,这两者描述的是一种服务与被服务的关系,其主要特征是客户是服务请求方,服务器是服务提供方。
域名系统DNS
域名系统DNS(Domain Name System)是互联网使用的命名系统。用户在与互联网上某台主机通信时,必须知道对方的IP地址,IP地址即便使用点分十进制记法也不易记忆,故而使用便于用户记忆的主机名字,域名系统DNS能把互联网上的主机名字转化为IP地址。互联网的域名系统被设计成一个联机分布式数据库系统,采用C/S架构。DNS使大多数名字都在本地进行解析,仅有少量解析需要在互联网上进行通信,因此DNS系统的效率很高。域名到IP的解析是由分布在互联网上的众多域名服务器程序共同完成,这些程序一般在专设的节点上运行,称为域名服务器。
域名解析的流程一般是:当某一个应用进程需要将某个主机名解析成IP地址时,进程调用解析程序,并成为DNS的一个客户,把待解析的IP地址放在DNS请求报文中,以UDP方式将数据报发给本地域名服务器,在本地服务器查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可进行通信。若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中另一个客户,并向其他域名服务器发出询问请求,直到这一请求能被回答为止。
域名体系是一种抽象的逻辑结构,呈现一种树状结构。为了与其相匹配,域名服务器采用了划分区的方式来解决这类问题。一个服务器所负责管辖的范围称为区,区中的所有主机应该是连通的。每个区设置一个权限域名服务器,用来保存这个区的域名和IP的映射关系,相比于域名体系下的“域”,“区”的范围可以小于或者等于“域”,但不可以大于“域”。域名服务器也是按照层次分配的,分为以下四种不同的类型:
根域名服务器:最高层次的服务器,所有的根域名服务器都记录了所有的顶级域名服务器的域名和IP地址。根域名服务器是最重要的域名服务器,因为任意一个本地服务器如果无法解析某个域名,就会最先求助于根域名服务器。根域名服务器采用任播技术,加快了DNS的查询进程。
顶级域名服务器:负责管理在顶级域名下注册的所有二级域名。
权限域名服务器:负责一个区的域名服务器。
本地域名服务器:本地域名服务器不属于域名服务器的层次结构,他对域名系统非常重要,一台主机要发起DNS查询时首先要发送给本地域名服务器。本地域名服务器又称默认域名服务器。
DNS的解析过程一般分为两种:递归查询和迭代查询。主机向本地域名服务器发起的一般是递归查询,本地域名服务器向根域名服务器发起的一般是迭代查询。递归查询和迭代查询的逻辑如下。
文件传输协议FTP与TFTP
文件传送协议FTP是互联网上使用的最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了许多系统级的细节,使得其可以在各种异构网络的任意计算机上传送文件。文件共享协议一般有两种策略:复制文件和联机访问,FTP和TFTP采用的是复制文件的策略。
FTP基于TCP提供可靠的文件传输服务,采用客户服务器方式。其服务器进程有两大部分组成:一个主进程,负责接收新的请求;另外有若干个从属进程,负责处理单个请求,从属进程包括控制进程和数据传送进程,使得FTP客户和服务器间维护了两个并行的TCP连接,控制连接和数据连接。
TFTP是一个很小且易于实现的文件传送协议,它使用UDP作为传输层协议,这使得其很适合向许多机器下载时使用。另外,TFTP的程序内存占用较小,可以在各类小型终端使用。TFTP的工作模式类似于停止等待协议,这使得其在UDP的运输下能保证不因数据报的丢失而导致传输失败。
远程终端协议TELNET
- TELNET是一个简单的远程终端协议,基于TCP提供了连接注册到远地的另一台主机上的服务。TELNET能将用户的击键传到远地主机,并将远地主机的输出通过TCP返回到用户屏幕,而这种服务是透明的,因此,TELNET又称终端仿真协议。
万维网WWW
- PASS
电子邮件
- PASS
动态主机配置协议DHCP
- PASS
简单网络管理协议SNMP
- PASS
P2P应用
- PASS
无线网络
无线网络的概念
无线局域网有两大类,第一类是有固定基础设施的,第二类是无固定基础设施的。前一类无线局域网的代表是IEEE 802.11所制定的一些类标准,后一类无线局域网的代表是各类自组网络。
802.11是无线以太网的标准,采用星型拓扑,其中心叫做接入点AP,在MAC层使用CSMA/CA协议,使用802.11系列协议的局域网又称为Wi-Fi。802.11规定无线局域网的最小构件是基本服务集BSS,包括一个基站和若干个移动站,AP就是基本服务集的基站,管理员在安装AP时需要为AP分配一个不超过32字节的服务集标识符SSID和一个通信信道,基本服务集覆盖的地理范围称为基本服务区BSA。基本服务集通过AP连接到一个分配系统DS,然后就可以连接到另一个基本服务集,这样就构成了扩展的服务集ESS。
移动站加入一个BSS就要选择一个接入点AP,并与此接入点建立关联。建立关联的方式有两种,一种是被动扫描,即移动站等待AP发出的信标帧,另一种是主动扫描,移动站主动发出探测请求帧并等待从接入点发回的探测响应帧。
802.11协议
802.11的MAC帧共有三种类型:控制帧、数据帧和管理帧。MAC数据帧主要有三个部分组成:占30个字节的MAC帧首部、不超过2313字节的帧主体和4个字节的帧检验序列FCS。802.11局域网的帧格式如下图所示。序号控制字段占16位,其中序号子字段占12位,分片子字段占4位;持续期字段占16位,而由于只有最高位为0时才表示持续期,故而持续期不能超过;帧控制字段共分为11个子字段,协议版本字段现在为0,类型字段和子类型字段用来区分帧的功能,更多分片字段为1时表示该帧属于一个帧的多个分片之一。
802.11的帧首部不同于以太网的MAC帧,有4个地址字段,地址4用于自组网络,这里只讨论前三个。这三个地址字段中的地址内容取决于帧控制字段中去往AP和来自AP这两个子字段的值。常见的两种组合及其规则如下:
去往AP | 来自AP | 地址1 | 地址2 | 地址3 | 地址4 |
---|---|---|---|---|---|
0 | 1 | 目的MAC地址 | AP MAC地址 | 源MAC地址 | - |
1 | 0 | AP MAC地址 | 源MAC地址 | 目的MAC地址 | - |
802.11的MAC层
802.11设计了独特的MAC层,它通过协调功能确定什么时间由哪个移动站发送数据。802.11的MAC层包括两个子层,分布协调功能DCF和点协调功能PCF。DCF要求每一个节点使用CSMA机制分布式接入算法,让各个站通过争用信道来获取发送权,802.11要求所有的实现都必须支持DCF功能;PCF是可选项,使用接入点AP集中控制BSS内的活动,用类似轮询的方式将发送权轮流交给各个站,从而避免了碰撞的发生。
为了避免碰撞,802.11还规定了三种帧间间隔IFS:
SIFS:在ACK帧、CTS帧、分片的MAC数据帧、回答AP探测的帧和采用PCF方式的AP发送的任何帧中使用。
PIFS:PCF方式下的帧间间隔,其长度为一个SIFS加一个时隙。
DIFS:DCF方式下的帧间间隔,比PIFS再长一个时隙。
无线局域网不使用CSMA/CD的原因有二:其一,无线局域网环境下适配器接收信号的强度远小于其发送信号的强度,实现碰撞检测的硬件成本会因此加大;其二,无线局域网并非所有的站都能听见对方,在无线局域网上实现碰撞检测会带来隐蔽站问题和暴露站问题。
802.11面向无线局域网的特点采用了CSMA/CA协议,这里的CA指碰撞避免,由于无线信道的通信质量不如有线信道,所以802.11在使用CSMA/CD的同时还是用停止等待协议,在收到对方的确认帧之后再发送下一帧,这成为链路层确认。
802.11还采用了虚拟载波监听机制,要求源站将其要占用信道的时间(包括目的站发回确认帧的时间)及时通知给其他站,以便使其他站在这段时间内都停止发送数据,这样就大大减少了碰撞发生的几率。当一个站收到正在信道中传送的MAC帧首部的持续时间字段时,就调整自己的网络分配向量NAV,NAV指出了需要在过多长时间才能完成数据帧的这次传输,使信道转入空闲状态。故而,一个站认为信道忙有两种情况:一是物理层载波监听到信道忙,另一种可能是MAC层虚拟载波监听机制指出信道忙。
CSMA/CA协议算法:
若信道最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间DIFS之后,就发送整个数据帧。
否则,站点执行CSMA/CA协议的退避算法,一旦检测到信道忙,就冻结退避计时器。只要信道空闲,退避计时器就进行倒计时。
当退避计时器时间减少到零时(这时信道只可能时空闲的),站点就发送整个帧并等待确认。
发送站若收到确认,就知道已发送的帧被目的站正确收到了。若要继续发送帧,则从步骤2开始,执行CSMA/CA的退避算法,随机选择退避时间。若再规定时间内未收到ACK帧,则再次使用CSMA/CA的退避算法重传此帧,直到接受为止,或者经过若干次重传失败后放弃发送。
CSMA/CA的二进制指数退避算法:
第次退避实在时隙中随机地选择一个。
站点每经历一个时隙就检测一次信道,若检测到信道空闲,退避计时器就继续倒计时;若信道忙,就冻结退避计时器的剩余时间,重新等待信道变为空闲并再经过时间DIFS后,从剩余时间开始继续倒计时。如果退避计时器剩余时间减小到零,就发送整个数据帧。
CSMA/CA的退避时序如图:
为了更好地解决隐蔽站带来的碰撞问题,802.11允许要求发送数据的站对信道进行预约。当A要向B发送数据帧之前,先发送一个短的控制帧,叫做请求发送RTS,包括这次通信的源地址、目的地址和持续时间。若B收到来自A的RTS帧,且媒体空闲,则等待一段SIFS之后,就向A发送一个控制帧允许发送CTS,包括这次通信所需的持续时间。A收到CTS之后等待SIFS后就可以发送控制帧,B收到数据帧后,等待SIFS,向A发送确认帧ACK。预约逻辑的时序如下图:
802.11在MAC层上,是可靠传输的。