· 结点:任何运行链路了层协议的任何设备。包括主机、路由器、交换机和WiFi接入点。
· 链路:沿着通信路径连接相邻结点的通信信道称为链路。数据报必须通过沿端到端路径上各段链路传输。
· 在通过特殊的链路时,传输结点将数据报封装在链路层帧中,并将该帧传送到链路中去。
· 一个子网中的若干结点主要有两种连接方式:点到点连接、多点连接(通过共享连接介质,通过网络交换机)。
· WAN:网络形式采用点到点链路,所具有的特点有:带宽大、距离宽(延迟大),点到点链路的链路层服务主要是:封装和解封装。
· LAN:一般采用多点连接方式,这样连接结点比较方便,只要接到共享介质上(网络交换机),就可以连接其他所有的节点了。LAN实现的链路层功能很复杂,有:多点接入(协调各结点对共享性介质的访问和使用)、竞争方式(结点之间产生冲突后的协调工作)、令牌方式(产生令牌、解决占有和释放等问题)。
· · 链路层所提供的服务会随着链路层协议不同而不同,主要包括:
包装成帧:在链路层,将网络层传输而来的数据报封装成帧。
一个帧由一个数据字段和多个首部字段组成,数据字段储存的就是网络层数据报。
链路接入:媒体访问控制(Medium Access Control,MAC)协议
规定了帧在链路上传输的规则,MAC主要协调帧的传输。
可靠交付:链路层的可靠交付服务通常是用于容易产生差错率的链路中,
可靠交付服务保证了链路层需要无差错地传输的每个网络层数据报,通常是通过确认和重传保证的。
差错检查和纠正:由于信号衰弱和电磁噪声等问题,会导致到帧中的bit出现错误。
所以链路层让发送结点在帧中加入差错检测bit,让接收结点来进行差错检查。
这里的差错检测比运输层和网络层中的校验和差错检测更复杂,链路层的差错检测是用硬件实现的,
不仅能检测出帧中出现的bit差错,还能准确地确定帧中的差错出现的位置,并以此来纠正这些差错。
流量控制:使得相邻的发送和接收结点的速度相相配。
· · 链路层是实现在路由器的线路卡中的,下图是一个主机体系结构:
· · 链路层的主体部分是在网络适配器(网络接口卡)中实现的,其中的链路层控制器位于网络适配器的核心,它是一个实现了链路层许多的服务(成帧、链路接入、差错检测等)的芯片,所以链路层的大部分服务都是由硬件实现的。网络适配器可以是单独分离的
插入卡,也可以被综合结合在主机的主板上。
· · 在发送端,控制器会取得有协议栈高层生成并储存在主机内存中的数据报并在链路层中封装成帧,然后根据链路接入协议将该帧传进通信链路中。在接收端,控制器接收到整个帧,进行差错献策,然后抽取出网络层的数据报。
· · 链路层是硬件和软件的结合体,是协议栈中硬件和软件交接的部分,链路层的软件组实现了高层链路层的功能:组装链路层寻址信息、激活控制器硬件、对控制器中断进行响应(例如多个帧到达时)、处理差错条件和将数据报向上传递给网络层。
· bit级差错检测和纠正,是对一个结点发送到另一个物理连接的邻近结点的链路层帧中的bit损伤进行检测和纠正。这里只进行简单的介绍。
· 在发送结点,为了保护bit免受差错,使用差错检测和纠正比特(Error-Detection-Correction,EDC)来增强数据。这里的数据指:网络层的数据报、链路帧首部中的链路级的寻址信息、序号和其它字段。链路层帧中的数据和EDC都会被发送到接收结点。如图:
· 差错检测和纠正技术使接收方不一定能够检测出所有的比特差错,我们通过选择合适的差错检测方案,降低这种事情发生的概率。常见的检测差错的技术有:奇偶校验、校验和方法和循环冗余检测。
· · 接收方检测和纠正差错的能力被称为前向纠错(Forward Error Correction,FEC)。这种技术通常被用于音频储存和回放设备中,可以减少发送方重发的次数,允许在接收方立即纠正差错,避免了等待重发的时延,这种技术对实时网络应用和具有长传播时延的链路是非常有利的。
· · · 我们首先考虑这样的一种情况,要发送的数据D有d个bit,我们可以附加一个bit,令它为0或1,使得这d+1个bit中的1的总数是偶数,我们把这个附加的bit称为校验比特,被存放在一个单独的字段中。
· · · 如果接收方接收到的数据中,bit为1的个数有奇数个,就说明出现了奇数个比特差错。但如果bit为1的个数有偶数个,就导致检测不出差错。
· · · 如果bit之间的差错被看做独立发生,并且在一个组中多个bit同时出错的概率非常小,所以这种单个bit校验位的方法足够应付了,但实际中,这种方案确实不行的。
· · · 我们将单比特奇偶校验方案二维一般化,数据D中的d个bit被划分为i行j列,对于每行、每列计算奇偶值,产生的i + j + 1奇偶比特构成了链路层帧的差错检测比特。如图:
· · · 在二维奇偶校验方案中,包含比特值改变的列和行的校验值都将会出现差错。所以接收方就可以利用存在奇偶校验差错的列和行的索引来识别发生差错的bit并纠正。二维奇偶校验能检测一个分组中两个比特差错的任何组合(但不能纠正)。
· · 校验和方法和前面在运输层讲的校验和方法差不多,将数据D的b个bit序列当做一个k个整数的序列处理,将这k个整数相加,取反之后作为差错检测比特,然后在接收结点,将接收的数据(包括校验和)的加起来,然后取反码并检测结果是否全为1。
· · 运输层通常是在主机中作为用户操作系统的一部分用软件实现的,因为运输层差错检测由软件实现,所以采用简单而快速的检测方案(如校验和)就显得很重要。而链路层的差错检测在适配器中用专门的硬件实现,所以能够执行复杂的差错检测操作。
· · 目前的网络中应用的差错检测技术主要是基于循环冗余检测(Cyclic Redundancy Check,CRC)编码。CRC编码也称为多项式编码(因为该技术需要将bit串看做是系数为0和1的一个多项式)。
· · 我们考虑一个d个bit的数据D,发送方会和接收方协商一个r + 1比特模式,称为生成多项式G,并要求G的最高有效位的bit是1。对于一个给定的D,发送方要决定一个由r个比特组成的附加串R,将R附加到D上,便得到了d+r比特模式(一个二进制数),要求用模2算术能够恰好被G整除。接收方用G除以接收到的d+r比特。如果余数为非0,接收方就知道出现了差错。
· · 所有的CRC计算都将采用模2算术进行,即加法不进位,减法不借位,相当于异或操作XOR,而乘除法还是和二进制算术中的一样,这样的话,给定D、R,D * 2r XOR R就可以产生d+r比特模式了。
· · 我们要求R对n有:D · 2r XOR R = nG,所以我们可以根据这个等式计算出D · 2r = nG XOR R,这个等式告诉我们R = D · 2r / G 的余数。如图:
· · CRC性能分析:
能够检测出所有的1bit差错。
能够检测出所有的2bit差错。
能够检测出所有长度=r或
有关CRC的实现可以参见[Williams 1993]。
· 网络链路类型:点对点链路和广播链路。
· 点对点链路由链路一端的单个发送方和链路一端的单个接收方组成,有点对点协议(Point-to-point,PPP)和高级数据链路控制协议(high-level data link control,HDLC)。
· 广播链路能让多个发送方和接收方都连接到相同的、单一的、共享的广播信道上(如以太网和无线局域网),这种链路要实现一个很重要的问题——多路访问问题,即如何协调多个发送和接收结点对同一个共享广播信道的访问。结点通过使用多路访问协议(信道划分协议、随机接入协议、轮流协议),去规范它们在共享信道上的传输行为。因为多个结点都可以传输帧,这时发送而来的帧可能会在接收方发生碰撞。
· · 信道划分协议可以分为时分多路复用(TDM)、频分多路复用(FDM)、码分多址(Code Division Multiple Access。CDMA)。信道划分协议主要是为所有在同一个共享信道上的节点划分广播信道带宽。
· · 其中TDM、FDM主要看第一章,CDMA主要看第六章。我们假设一个支持N个结点的信道且信道的传输速率为Rbps。
· · · TDM将时间划分为时间帧,并进一步划分每个时间帧的N个间隙(这里的时间帧和链路层中的帧不是一个概念,时间帧是将一段时间划分为不同的时段,称为时间帧)。如图:
一个时间帧包含了4个时隙,每个时隙都对应着不同的结点,每个结点只能在循环的TDM帧中指派给它的时隙内传输分组。
· · · TDM虽然消除了碰撞,且给每个节点在每个帧时间内分配了专用的传输速率R/N bps,但是它存在着主要缺陷:节点的传输速率被限制为R/N bps;节点必须在它的时隙内传输分组。对于特殊情况下,TDM的效果是很糟糕的。
· · · FDM将R bps的信道划分为不同的频段(每个频段具有R/N的带宽),不同的节点对应着不同的频段。如图:
FDM和TDM拥有同样的缺点,所以也不是很实用。
· · · CDMA对每个结点分配一种不同的编码,然后每个结点用它唯一的编码对它要发送的数据进行编码。这样处理过后,不同的节点能够同时传输,并且它们各自相应的接收方仍能正确的接收发送方编码的数据比特(前提是接收方知道发送方的编码),而不在乎其他结点的干扰传输。
· · 在这种协议中,一个传输结点总是以信道的全部速率发送分组,当发生碰撞时,涉及碰撞的结点(独立地)会在重发帧之前等待一个随机时延,然后不断地重发分组(每次重发前都要等待一个随机时延),直到该帧无碰撞地通过。
· · 常见的随机接入协议有:ALOHA协议和载波侦听多路访问(CSMA)协议等。
· · · 在这种简单的随机接入协议中,做出下列假设:
所有的帧都由L比特组成;
时间都被划分为长度L/R秒的时隙;
结点只在时隙起点开始传输帧;
结点是同步的,每个结点都知道时隙何时开始;
如果在一个时隙中有两个或者更多个帧发生碰撞,则所有结点需要在该帧结束之前检测到该碰撞事件。
每个结点以概率p决定在每个时隙中重传它的帧,直到该帧被无碰撞的传输出去。
· · · 时隙ALOHA的操作:当节点有一个新帧要发送时,它会等到下一个时隙开始并在该时隙传输整个帧。如果没有发生碰撞,该结点会成功地传输它的帧,紧接着发送下一个新帧。如果发生了碰撞,该结点会在时隙结束前检测到这次碰撞,然后以概率p在后续的时隙中重传它的帧,直到重传成功。如图:
· · · 当一个结点是唯一活跃的结点时(即有帧需要发送),时隙ALOHA会允许该结点以全速R连续地传输,并且时隙ALOHA是高度分散的,因为每个节点都会检测到碰撞并独立地决定什么时候去重传。
· · · 我们定义在信道中刚好只有一个结点进行传输的时隙为成功时隙,这样时隙多路访问协议的效率定义为:当有大量的活跃结点时,并且每个结点总有大量的帧要发送时,在运行时段内成功时隙所占得比例。
· · · 我们假设每个结点总是有帧要发送,并且结点对新帧和已经经历过碰撞的帧都要以概率p去决定是否进行传输。如果有N个结点,那么任意一个结点成功传输的概率是Np(1 - p)N-1,所以当有N个活跃结点时,时隙ALOHA的效率是Np(1 - p)N-1,最后可以得到时隙ALOHA协议的最大效率为1/e = 0.37。也就是说使用时隙ALOHA协议的信道的传输速率并不是Rbps,而是0.37Rbps,所以此协议的信道使用效率很低。
· · · 时隙ALOHA协议要求所有结点同步的传输,即在每个时隙开始时传输。但是第一个ALOHA协议是非时隙、完全分散的协议。在ALOHA协议下,当一个帧首次到达(即从网络层数据报在发送结点从网络层传递下来)时,该结点会立刻将该帧完整地传输进广播信道。如果发生了碰撞,这个结点将立即地(在传输完它的碰撞帧后)以概率p重传该帧,否则该节点等待一个传输时间(即1-p的概率),直到重传成功。
· · · 我们做与时隙ALOHA中相同的假设,如图:结点A如果想要成功发送一个帧,就需要在前一个时隙和此时隙内都没有结点进行传输,这样的话结点A就可以在此时隙内传输帧。
由图可知,任意结点一次传输成功的概率是p(1 - p)2(N-1),这样的话,这种ALOHA协议的最大效率只有1/(2e),比时隙ALOHA的效率还低。
· · · 在ALOHA和时隙ALOHA中,一个结点的传输独立于其他连接在这个广播信道上的结点。而载波侦听多路访问(Carrier Sense Multiple Access,CSMA)和具有碰撞检测的CSMA(CSMA with Collision Detection,CSMA/CD)协议中具有这两个规则:
载波侦听:一个结点在传输前会先侦听信道,
如果有来自另一个结点的帧正在向信道上发送,
则该节点会进行等待,直到检测到没有传输。
碰撞检测:当一个传输结点在传输时一直在侦听此信道,
如果它检测到另一个结点正在传输干扰帧,它会停止传输,
并且会在重复 侦听-当空闲时传输 这个循环之前等待一段时间。
· · · 如图解释了为什么所有的节点都进行载波侦听了,为什么还会发生碰撞。首先在t0时刻,B侦听到没有结点正在传输,所以B就会向广播媒体的两个方向上进行传播,而在t1时刻,D还未检测到B正在传输帧(因为B传输的比特还未到达D),所以它也会进行传输,这就发生了碰撞。
因为广播信道的端到端信道传播时延(即信号从一个结点传播到另一个结点所花费的时间),导致载波侦听结点不能侦听到另一个结点是否正在传输。
· · · 如图,当D和B检测到碰撞后,会在极小的时间间隔内放弃它们的传输。
· · · 首先,适配器(结点)会从网络层获得一条数据报,然后准备链路层帧,并将帧放入帧适配器缓存中。
· · · 如果适配器侦听到信道空闲(即没有信号能量从信道进入适配器),它就开始从传输帧。如果检测到信号能量了,它就会进入等待状态,直到没有信号能量才开始传输。
· · · 在传输过程中,适配器会监控其他使用该信道的适配器的信号能量的存在。
· · · 如果适配器传输整个帧而未检测到来自其他适配器的信号能量,该适配器就完成了该帧,另一方面,如果适配器在传输时检测到了来自其他适配器的信号能量,它就会终止传输。
· · · 中止传输后,适配器会等待一个随机时间量,然后返回第二步进行重传。
· · · 可以得到,当碰撞结点数量较少时,随机等待的时间间隔较短,当碰撞结点数量较大时,随机等待的时间间隔会较长。
· · · · 当结点传输一个帧后,该帧经历了一系列的n次碰撞后,结点会随机地从{0,1,2,3……,2n-1}中选择一个K值,用于随机等待的时间间隔,所以一个帧经历的碰撞越多,K的选择范围越大(n最多取到10)。
· · · · 每次适配器准备传输一个新帧时,它都要重新运行CSMA/CD算法,并且不考虑过去时间内发生的碰撞。
· · · · 我们定义CSMA/CD效率为:帧在信道中无碰撞地传输的那部分时间在总运行时间中占的比例。dprop表示信号能量在任意两个适配器之间传播所需的最大时间,dtrans表示传输一个最大长度的帧所需的时间。
· · · · 可以得到效率为:1/(1 + 5dprop/dtrans),具体参见[Lam 1980]和[Bertsekas 1991]。我们可以看出,当dprop接近于0时(传播时延为0,碰撞结点将立即终止而不会浪费信道)或dtrans趋近于∞时(传输一个帧会占用信道很长时间),效率趋近于1。
· · 常见的轮流协议有:轮询协议、令牌传递协议。
· · · 轮询协议指定一些结点为主结点,已循环的方式轮询每个结点,如:主结点首先向结点1发送一个报文,告诉它能够传输的帧的最多数量,然后在结点1传输某些帧后,主节点再告诉节点2能够传输的帧的最多数量(主节点通过观察信道上是否缺乏信号,来决定一个结点何时完成了帧的发送),主结点以这样的方式轮询了每个结点。
· · · 轮询协议消除了碰撞问题和空时隙的问题,但是存在这样的缺点:该协议引入了轮询时延(即通知一个结点“可以传输”所用的时间)、如果主节点发生故障,那么整个信道将停止运行。
· · · 信道中有一个称为令牌的比较小的特殊帧在结点之间以某种固定的次序进行交换。只有当一个结点收到令牌时,它才可以发送帧(发送最大数目的帧),如果没有可发送的帧,那么将立即向下一个结点转发该令牌。但是在这种协议中,如果一个结点发生故障,可能会导致整个信道发生奔溃;如果一个结点忘记释放令牌了,那么必须通过某些恢复步骤使令牌返回到循环中来。
· · DOCSIS使用到了上面所说的各种协议,一个电缆接入网会在电缆网头端将许多用户的电缆调制解调器与一个电缆调制解调器端接系统(CMTS)连接在一起。
· · DOCSIS使用FDM将下行(CMTS到调制解调器)和上行(调制解调器到CMTS)网络段划分为多个频率信道,每个信道均为广播信道,在下行信道中,因为是由单一的CMTS传输,所以不存在多路访问问题,仅在上行出现。如图:
· · 每条上行信道被划分为多个时间间隔(类似于TDM),每个时间间隔都包含了一系列的微时隙,电缆调制解调器可在该微时隙中向CMTS传输帧。
· · CMTS显示地允许每个电缆调制解调器在特定的微时隙内传输,CMTS在下行信道上通过发送控制报文(MAP报文),指定不同的电缆调制解调器(带有要发送的数据)能够在不同的微时隙中传输由控制报文指定的时间间隔。由于微时隙明确的分配给电缆调制解调器,所以CMTS能够确保在微时隙中没有发生碰撞。
· · 通过让电缆调制解调器在一个专门用于微时隙请求帧的微时隙中向CMTS发送微时隙请求帧让CMTS知道哪个电缆调制解调器有数据要发送。因为有多个电缆调制解调器可能同时发送微时隙请求帧,所以可能会发生碰撞。如果电缆调制解调器没有在下一个下行控制报文中收到对请求分配的响应的话,那么该电缆调制解调器就推断出它发送的微时隙请求帧发生了碰撞,随后电缆调制解调器使用二进制指数回退算法将其微时隙请求帧延缓到以后的微时隙中重新发送。
· · 如果当上行信道上有很少的流量,电缆调制解调器可能会在名义上分配给微时隙请求帧的时隙内实际地发送传输数据帧。
· 在链路层,交换机通常是使用链路层地址来转发链路层帧的。
· 应用层地址——主机名;网络层地址——IP地址;链路层地址——MAC地址。
· · 一台路由器对它的每个接口都有一个IP地址、ARP模块和适配器。
· · · 一台具有多个网络接口(适配器)的主机或路由器,拥有与每个接口相关的IP地址,每个IP地址有与之对应的MAC地址(LAN地址,物理地址)。链路层交换机并不具有与它们接口相关联的链路层地址,这是因为链路层交换机的任务是在主机和路由器之间承载数据报,而主机并不需要明确的对帧寻址到主机和路由器之间的交换机。
· · · MAC地址长度为6字节,一共有248个可能的MAC地址,用十六进制表示,每个字节被表示为一对十六进制数,MAC地址通常情况下是被设置为永久性的,但也可以使用软件修改一共适配器的MAC地址,并且适配器的MAC地址具有唯一性的,IEEE管理着MAC地址的分配,固定一个MAC地址的前24比特,让购买MAC地址的公司自己为每个适配器生成后24比特。
· · · 当一个适配器向目的适配器发送一个帧时,发送适配器会将一个MAC地址插入到该帧中,并将该帧发送至局域网。一台交换机也会偶尔的将一个入帧广播到它的所有接口,所以一个适配器可以接受一个并非向它寻址的帧,当适配器接受这样的一个帧后,会检测该帧中的目的MAC地址是否与自己匹配,如果匹配就会取出该帧中的数据报,然后将数据报上传给网络层,如果不匹配就会丢弃该帧。
· · · 发送适配器也可以在一个帧中的目的地址字段中插入一个特殊的MAC广播地址,向在同一个局域网中所有其他的适配器发送该帧。MAC广播地址由48个1组成,即FF-FF-FF-FF-FF-FF。
· · · 局域网是为任意网络层协议而设计的,而不只是用于IP和因特网,如果适配器被指派为IP地址时,那么该适配器就不能为其它网络层协议所使用(如IPX,DECnet)。
· · · 如果适配器使用网络层地址而不是MAC地的话,那么网络层地址就必须被储存在适配器中的RAM中,这样的话,当适配器被移动时,就需要重新配置。
· · · 如果在适配器中不使用任何地址,让每个适配器都将它接受到的帧向上传递,然后由网络层来判断地址是否匹配,这样的话,主机会被局域网上发送的每个帧所中断,包括目的地址是其他主机的帧,这样降低了主机的性能。
· · · 首先我们来考虑广播帧的发送,即交换机将它接受到的所有接口上的帧都向其它接口转发。源主机会向它的适配器提供IP数据报和目的主机的MAC地址,然后由发送适配器构造一个包含目的MAC地址的链路层帧,并将此帧发送至局域网。
· · · 在发送主机中,发送主机会使用ARP模块来获取相同局域网中的任何IP地址的MAC地址。ARP与DNS类似,但DNS是为因特网中的任何主机解析主机名,而ARP只为相同子网下的主机和路由器接口解析IP地址。
· · · 每台路由器在其内存中都具有一个ARP表,这张表包括了IP地址到MAC地址的映射关系,还包括删除每个映射关系的时间TTL,这张表不必为子网上的每个IP地址都包含一个表项。如图:
· · · 当发送方发送一个数据报时,会从该主机中的ARP表中获取目的节点的MAC地址,但如果表中不存在目的节点的MAC地址时,发送方就会构造一个ARP分组,该分组包含发送和接收方的IP地址以及MAC地址,ARP查询分组的目的是询问子网上所有其他主机和路由器,以确定目的IP地址的MAC地址,使用广播地址来发送这个分组(作为目的地址),包含该ARP查询的帧就能被子网上的所有其它适配器接收到,并且每个适配器都会将该帧中的所有ARP分组向上传递给ARP模块,这些ARP模块都会检查它的IP地址是否与ARP分组中的目的地址相匹配,然后与之匹配的适配器就会向查询主机发送一个查询主机所希望映射ARP分组。这样查询主机就会更新它的ARP表,然后发送数据报。
· · · 查询ARP报文是在广播帧中发送的,而响应ARP报文是在一个标准帧中发送的,ARP是即插即用的,一个ARP表是自动建立的,不需要系统管理员来配置,如果某主机与子网断开连接,它的表项就最终会从留在子网中的节点的表中删除,ARP是跨越链路层和网络层边界的两边的协议。
· · · 如图:
如果子网1中的111.111.111.111向主机222.222.222.222发送一个IP数据报,该数据报首先必须发送给路由器接口111.111.111.110,因 为这个接口是通往最终目的地路径上的第一跳路由器R的IP地址,通过使用ARP,发送适配器获取到111.111.111.110的MAC地址,然后将帧发送给R,在R上的路由器适配器会看到该链路层帧是向它寻址的,因此会把这个帧传递给R中的网络层,该帧中的数据报的源IP地址是111.111.111.111,目的IP地址是222.222.222.222,然后帧中的目标MAC地址是111.111.111.110的MAC地址(即R的接入子网1的接口IP地址的MAC地址),源MAC地址是111.111.111.111的MAC地址。
· · · 然后R会转发该数据报,数据报的源地址还是为111.111.111.111,目的IP地址是222.222.222.222,但是创建的链路层帧的目的MAC地址是222.222.222.222的MAC地址(即真正目的地的MAC地址),且源MAC地址是1A-23-F9-CD-06-9B(即R中通向子网2的接口IP地址的MAC地址)。
· · 最初的以太网是使用同轴电缆总线来互联节点的,使用总线拓扑的以太网是一种广播局域网,所有在以太网上传输的帧都会被传送到与该总线连接的所有适配器,并被处理。如图:
· · 在星形拓扑以太网中,主机(路由器)直接使用双绞对铜线与一台集线器连接,集线器是一种物理层设备,作用于每一个比特而不是作用与帧,可以放大比特的能量强度,并将该比特向其它所有接口传输出去。如图:
· · 在星形拓扑以太网中,位于中心的集线器被换成了交换机,交换机是一种“无碰撞”的、储存转发的分组交换机。
· · · 以太网的六个字段如下图:
· · · 数据字段(46~1500字节):这个字段承载了IP数据报,以太网的最大传输单元MTU是1500字节。当数据报的长度小于46字节时,数据报必须补充到46字节,传递给目的主机网络层的数据会包括IP数据报和填充部分,网络层会使用IP数据报首部中的长度字段去除填充部分。
· · · 目的地址:这个字段包含了目的适配器的MAC地址。
· · · 源地址:这个字段包含了传输该帧到局域网上的适配器的MAC地址。
· · · 类型字段(2字节):此字段允许以太网使用多种网络层协议,当以太网帧到达目的适配器E时,E需要知道它该将数据字段的内容传输给哪个网络层协议。该类型字段和网络层数据报中的协议字段、运输层报文段的端口字段相类似。这些字段都是为了把一层中的某协议与上一层的某协议结合起来。
· · · CRC(4字节):CRC(循环冗余检测)字段的目的是使目的适配器检测帧中是否引入了差错。
· · · 前同步码(8字节):以太网帧以一个8字节的前同步码字段开始,该前同步码的前7字节的值都是10101010;最后一个字节是10101011。前同步码的前七字节用于提醒接收适配器,并且将它们的时钟和发送方的时钟同步。接收适配器只需通过锁定前同步码的前7字节的比特,就能锁定源适配器的时钟,前同步码的第8字节的最后两个比特警告目的适配器,即将到达的是重要的内容。
· · · 以太网提供了无连接服务、不可靠服务。并且可能会由于丢弃了以太网帧而存在间隙,如果网络层的协议是UDP,那么目的主机的应用会看到数据中的间隙;如果是TCP,则目的主机的TCP将不会确认(接受)包含在丢弃帧中的数据,会引起源主机的TCP重传。
· · · 以太网有许多标准,如10BASE-T、10BASE-2、100BASE-T、1000BASE-LX和10GBASE-T。分别代表了10Mbps、100Mbps、1000Mbps和10Gbps以太网速率。其中BASE指以太网,指物理媒体承载着以太网的流量。T指双绞铜线。
· · · 吉比特以太网:使用标准以太网帧格式,并且向后兼容10BAST-T和100BASE-T技术;允许点对点链路(使用交换机,允许在两个方向上都以1000Mbps全双工操作)以及共享的广播信道(使用集线器);使用CSMA/CD来共享广播信道。
· · · 以太网的MAC协议采用了二进制退避的CSMA/CD介质访问控制形式,而以太网中的交换机可以协调传输,在任何时候决不会向相同的接口转发超过一个帧,并且是双全工的,使一台交换机和一个节点能够在同时向对方发送帧而没有干扰,所以说,基于交换机的以太局域网中,不会发生碰撞,因此就没必要使用MAC协议了。
· · 交换机对子网中的路由器和主机来说是透明的,也就是说,当主机向另一个主机寻址一个帧时,会将该帧送进局域网,并不知道路径上的交换机将该帧转发到哪一另一个结点。
· · · 交换机可以借助交换机表来完成转发和过滤功能,过滤指决定一个帧应该转发到哪个接口还是丢弃该帧,转发指一个帧应该被转发到哪个接口。交换机表中的一个表项包括:一个MAC地址、通向该MAC地址的交换机接口、表项放置在表中的时间。如图:
· · · 假设一个目的地址为DD-DD-DD-DD-DD-DD的帧从交换机接口x到达,可能会有下面三种情况:
1、表中没有对于DD-DD-DD-DD-DD-DD的表项,交换机会向除了x接口外的所有接口转发该帧的副本。即广播该帧。
2、表中有DD-DD-DD-DD-DD-DD的表项,但是该表项的接口为x,这说明该帧是从包含适配器DD-DD-DD-DD-DD-DD的局域网网段发送的,这种情况下交换机会丢弃该帧(过滤)。
3、表中有DD-DD-DD-DD-DD-DD的表项,且该表项的接口为y≠x,这种情况下,该帧需要被转发到与接口y相连的局域网网段,交换机将该帧放到接口y前面的输出缓存完成转发功能。
· · · 交换机的表项是自动、动态和自治地建立的,所以交换机是自学习的。
· · · 交换机表初始状态为空。
· · · 对于每个接口接收到的入帧,交换机会在其表中储存该帧的源地址字段中的MAC地址、该帧所到达的接口、当前的时间。通过这种方式交换机就在它的表中记录了发送结点所在的局域网网段。
· · · 如果在一段时间后,交换机没有接收到以该地址作为源的帧,交换机就会删除这个表项。
· · · 交换机是一种即插即用的设备,也是双工的,交换机接口能够在同时接收和发送帧。
· · · 消除碰撞:在使用交换机的局域网中,没有英碰撞而浪费的带宽。
· · · 异质的链路:交换机将链路彼此隔离,因此在局域网中的不同的链路能够以不同的速率运行,并且能够在不同的媒体上运行。
· · · 管理:除了提供强化的安全性,交换机也方便进行网络管理,例:如果一个适配器工作异常并持续发送以太网帧,交换机能够检测到该问题并在内部断开异常适配器。
· · · 路由器是使用网络层地址转发分组的储存转发分组交换机,是第三层的分组交换机。交换机使用MAC地址转发分组,且是第二层的分组交换机。
· · · 交换机是即插即用的,还具有相对较高的分组过滤和转发速率,处理高至第二层的帧,但为了防止广播帧的循环,交换网络的活跃拓扑限制为一个生成树,大型交换网络将要求在主机和路由器中有大的ARP表,这会生成较大的ARP流量和处理量,且交换机对广播风暴不提供防护措施。
· · · 使用路由器的网络中存在冗余链路时,分组通常不会通过路由器循环,也不会被限制在一个生成树上,有丰富的拓扑结构构建因特网。路由器还对广播风暴提供了防火墙保护,但路由器对分组的处理时间比交换机长,并且不是即插即用的,需要认为的配置IP地址。最高处理第三层的字段。
· · 现代机构的局域网常常是配置为等级结构的,缺乏流量隔离、交换机可能会无效使用、需要管理用户。我们可以通过使用虚拟局域网(Virtual Local Network,VLAN)的交换机来处理。
· · 支持VLAN的交换机允许一个经一个单一的物理局域网基础设施定义多个虚拟局域网。在一个基于端口的VLAN中,交换机的端口有网络管理员划分为组,每个组构成一个VLAN,在每个VLAN中的端口形成一个广播域(即来自一个端口的广播流量仅能到到改组中的其他端口)。如图:
网络管理员使用交换机管理软件(VLAN软件)声明一个端口属于某个特定的VLAN(未声明的端口属于一个默认的VLAN),在交换机中维护一张端口到VLAN的映射表;交换机软件仅在属于相同VLAN的端口之间交付帧。
· · 实现不同的VLAN内主机的交互:将VLAN A、B交换机的一个端口与一台外部的路由器相连,并且将该端口配置为属于VLAN A、B。这样配置后,VLAN A内主机的数据报会先到达外部路由器,然后通过外部路由器转发到VLAN B内的主机。但这种解决方法不具有扩展性,因为在每个交换机上N个VLAN将要求N个端口直接互联这两台交换机。
· · 具有扩展性的互联VLAN交换机的方法为VLAN干线连接。在VLAN干线方法中,每台交换机上的一个特殊端口被配置为干线端口,用于互联这两台VLAN交换机。该干线端口属于所有VLAN,发送到任何VLAN的帧都会经过干线链路转发到其他交换机。IEEE规定了一种扩展的以太网帧格式——802.1Q,用于跨越VLAN干线的帧,如图:
802.1Q 帧由标准的以太网帧和加入首部的4字节VLAN标签组成,而VLAN标签承载着该帧所属的VLAN标识符。VLAN标签由在VLAN干线发送侧的交换机加入帧中,解析后由在VLAN干线接收侧的交换机删除。
· · · VLAN标签由2字节的标签协议标识符(Tag Protocol Identifier,TPID)字段(具有固定的十六进制值81-00)、一个2字节的标签控制信息字段(包含一个12比特的VLAN标识符字段)和一个3比特优先权字段构成。
· · · 在基于MAC的VLAN中,网络管理员指定属于每个VLAN的MAC地址的集合,无论何时一个设备与一个端口连接时,端口基于设备的MAC地址将其连接进适当的VLAN中。VLAN也能基于网络层协议。
· 多协议标签交换(MPLS)网络,是一种进行分组交换的虚电路网络。它有自己的分组格式和转发方式,MPLS就像以太网一样,用来为IP设备提供互联服务的链路层技术。这里只进行简要介绍。
· 纯IP网络是按照IP地址对分组进行转发的,需要进行前缀匹配,转发的方式是固定;无法控制IP分组的路径,也无法支持流连工程,更无法对一个IP分组流进行资源分配,性能无法得到保证。
· MPLS网络按照标签label进行分组的转发的,类似于VC,MPLS使能路由器有基于标签的转发表。
· · MPLS通过选择性地标识数据报,并允许路由器使用固定长度的标签(而不是目的IP地址)来转发数据报。如下是MPLS使能路由器的链路层帧格式:
MPLS首部被添加在第二层首部与第三层首部之间,MPLS首部包含:标签(起到虚电路标识符的作用)、3比特的实验字段(保留用于实验)、单比特的S字段(用于一系列“成栈”的MPLS首部的结束)、TLL寿命字段。
· · 一个由MPLS加强的帧只允许在两个都是MPLS使能的路由器之间传送,MPLS使能的路由器称为标签交换路由器,它通过在转发表中查找MPLS标签,然后将数据报传递给适应的出口来转发MPLS帧,因此MPLS使能的路由器不需要提供目的IP地址,也不需要在转发匹配过程中执行最长前缀匹配的查找。
· · 如图是一个基于MPLS使能路由器的转发网:
其中R1~R4是基于MPLS使能的,R5、R6都是标准路由器。R1会向R2、R3通告它能够路由到目的地A,并且会把具有MPLS标签6的接收帧转发给目的地A;而R3会向R4通告它能够到达目的地A和D,且会把MPLS标签为10、12的接收帧转发给目的地A、D;同理R2也会向R4通告它能到达目的地A,会把MPLS标签8的接收帧朝着A转发;经过这样的通告后,路由器之间就知道了它的邻居是否是MPLS使能的,并且知道哪个标签与目的地对应。
· · ·入口路由器:LER对进入的分组按照EFC的定义打上标签。
· · · 在MPLS网络中(虚拟成了链路)对分组按照标签进行交换。
· · · 到了出口路由器,再将标签摘除。
· · · 支持MPLS的路由器组构成的网络,从IP网络的角度来看虚拟成了链路。
· · · 标签封装:一些标准定义了在ATM,FR和以太网中如何封装,利用原有网络中的机制VCI,或者定义新的标签。
· · MPLS的最初目的是使用固定长度的标签进行高速率IP转发,而不是使用IP地址的最长前缀匹配。它是基于标签交换的,所以不需要考虑分组的IP地址。
· · 对MPLS使能的路由器来说,具备了一种新的流量管理能力,即MPLS提供了沿着多条路由转发分组的能力,如果使用标准的IP路由选择协议,那么同一目的地的分组都会被选择一条最短路径来转发,网络运行者可以放弃普通的IP路由选择,使一些流量沿着某一条特殊路径朝着目的地引导,并且朝着相同目的地的其它流量会沿着另一条路径转发。
· · MPLS还可以用于执行MPLS转发路径的快速恢复,如:经过一条预计算的无故障路径重路由流量来对链路故障做出反应
· · MPLS还可以用于虚拟专用网络(VPN)等等。
· 数据中心网络被部署在因特网公司的数据中心里,这些数据中心网络将内部主机彼此互联并与因特网中的数据中心互联。
· 主机为数据中心提供内容、执行大规模分布式计算、储存邮件和文档等。数据中心的主机一般被堆叠在机架上,每个机架顶部都有一台交换机,称为机架顶部交换机,它们与机架上的主机互联,并与数据中心中的其它交换机互联。
· 数据中心网络支持两种类型的流量:内部主机与外部客户的流量,内部主机之间的流量,数据中心网络包括了一台或者多台边界路由器,它们将数据中心网络与公共因特网互联。
· · 在数据中心内部有多个负载均衡器,负责将外部用户的请求分发给内部的主机,并保持主机之间的负载均衡。负载均衡器基于分组的目的端口号以及目的IP地址做出决策。
· · 负载均衡器不仅平衡主机之间的工作负载,还提供了类似NAT的功能,负责将外部IP地址转化为内部适当主机的IP地址,然后将反向流向客户的分组进行相应的处理。
· · 数据中心通常使用了路由器和交换机等级结构,其中的所有链路通常使用以太网作为链路层和物理层协议,并混合使用铜缆和光缆。每台接入路由器下的这些主机构成了单一的子网,如图是一个等级结构的数据中心网络:
· · 全连接拓扑:替换了交换机和路由器之间的等级结构,提高了时延和吞吐量上的性能。如图:
这种设计将第一层的交换机与所有的第二层的交换机相连,而且主机到主机的流量绝不会超过该交换机层次。这种设计改善了主机到主机的容量。
· 如果主机A想要与学校的以太网交换机相连,并下载一个Web页面,需要经历很多步骤,如图:
· 学校的路由器与一个ISP连接,图中的ISP就是comcast.net,为学校提供了DNS服务,所以DNS服务器驻留在Comcast网络中,而不是学校网络中。
· · 主机A想要和网络连接,必须获取一个IP地址,即运行DHCP协议,从本地的DHCP服务器获取一个IP地址以及其它信息。而运行在有MAC地址为00:22:6B:45:1F:1B的路由器中的DHCP服务器能够以CIDR块68.85.2.0/24分配IP地址。所以学校内所有的IP地址都在这个地址块中。
· · 1)主机A的操作系统首先生成一个DHCP请求报文,并将这个报文放在具有目的地端口号67(DHCP服务器)和源端口68(DHCP客户端)的UDP报文段中。该UDP报文段则被放置在一个具有广播IP地址的目的地址(255.255.255.255)和源地址为0.0.0.0的IP数据报中,源地址为0.0.0.0指主机A并不具备IP地址。
· · 2)包含DHCP请求报文的IP数据报会被放置在以太网帧中,该以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF,使该帧被广播到交换机连接的所有设备(包括DHCP服务器),该帧的源MAC地址就是主机A的MAC地址00:16:D3:23:68:8A。
· · 3)包含DHCP请求的广播帧会被主机发送至以太网交换机,并在该交换机的所有出端口发送该帧,包括连接到路由器的端口。
· · 4)路由器会在它的MAC地址为00:22:6B:45:1F:1B的接口中,收到该帧,并从中抽取出IP数据报部分,该数据报的广播IP目的地址指出这个IP数据报应当被该结点的最高层协议所处理,因此该数据报的载荷部分(UDP报文段)会被取出交付给UDP,DHCP请求报文从此UDP报文段中抽取出来,这样的话DHCP就接收到了DHCP请求报文。
· · 5)假设DHCP服务器会分配地址68.85.2.101给主机A,所以DHCP生成包含这个IP地址以及DNS服务器的IP地址、默认网关路由器的IP地址和子网块(等价于子网掩码)的DHCP ACK报文,放置到一个UDP报文段中,并将UDP、报文段放置于IP数据报中,IP数据报再被放置到一个以太网帧中,这个以太网帧的源MAC地址就是路由器连接到学校网络时的接口的MAC地址(00:22:6B:45:1F:1B),目的MAC地址就是主机A的MAC地址00:16:D3:23:68:8A。
· · 6)包含DHCP ACK的以太网帧由路由器发送给交换机,由于交换机的自学习性,所以它根据先前收到的DHCP请求报文的以太网帧,已经知道目的MAC地址为00:16:D3:23:68:8A的帧应从通向主机A的端口转发。
· · 7)当主机A收到DHCP ACK的以太网帧时,从中抽取出IP数据报,再从IP数据报中抽取出UDP数据报,从UDP数据报中再抽取出DHCP ACK报文,主机A的DHCP客户会记录下它的IP地址以及DNS服务器的IP地址,并在IP转发表中安装默认网关的地址,这样的话主机A会向默认网关发送目的地址为子网块之外的所有数据报。
· · 经过上面七步,主机A已经初始化好它的网络组件了,就开始准备处理Web网页获取了。
· · 主机A需要生成一个TCP套接字来和Web服务器通信,生成套接字之前需要知道URL的IP地址,而DNS提供URL到IP地址的转换服务。
· · 1)主机A的操作系统会生成一个DNS查询报文,将字符串URL放入DNS报文的问题段中,该DNS报文会被放置在一个具有53号目的端口的UDP报文段中,该UDP报文段会被放入具有目的IP地址68.87.71.226和源IP地址68.85.2.101的IP数据报中。
· · 2)主机A会将包含DNS请求报文的数据报放入一个以太网帧中,该帧将会被发送到学校网关路由器,但是主机A并不知道网关路由器的MAC地址,所以主机A需要使用ARP协议来获取。
· · 3)主机A会生成一个具有目的IP地址68.85.2.1(默认网关)的ARP查询报文,并将该ARP报文放置在一个具有广播目的地址FF:FF:FF:FF:FF:FF的以太网帧中,这样帧就会到达网关路由器。
· · 4)当网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧时,发现在ARP报文中的目标IP地址68.85.2.1匹配到其接口的IP地址,这样网关路由器会准备一个ARP回答,指出它的MAC地址00:22:6B:45:1F:1B对应的IP地址为68.85.2.1,并将回答报文放置在以太网帧中,回送到主机A上。
· · 5)当主机A接收到ARP回答报文的帧后,会从回答报文中抽取出网关路由器的MAC地址,这样主机A就可以使包含DNS查询的以太网帧寻址到网关路由器的MAC地址了,注意该帧中的目的IP地址是DNS服务器的IP地址,但是目的MAC地址是网关路由器的MAC地址,会由网关路由器负责发送至DNS服务器。
· · 6)当网关路由器接收到包含DNS查询IP数据报的帧时,路由器会查找该数据报的目的IP地址(68.87.71.226),并根据其转发表决定该数据报应当被发送至Comcast中的哪个路由器(图中最左边的路由器)。IP数据报放置在链路层帧中,一条链路会将学校路由器连接到Comcast中最左边的路由器,并且包含DNS查询的帧会经这条链路发送。
· · 7)当Comcast网络中的路由器收到该帧时,抽取IP数据报,检查其中的目的地址,然后根据其转发表确定出接口,然后向该接口转发帧,转发表会根据域内协议(如RIP、OSPF或IS-IS)以及域间协议BGP等确定转发表项。
· · 8)最终DNS服务器会受到包含DNS查询的IP数据报,然后抽取出DNS查询报文,在它的DNS数据库中查找URL对应的IP地址,这种缓存数据源于URL的权威DNS服务器。所以该DNS服务器会形成一个包含主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,然后将UDP数据报放入传给主机A的IP数据报中。
· · 9)当主机A收到对应URL的IP地址时,就可以与包含URL的服务器建立连接了。
· · 1)当主机拥有了URL的IP地址时,它就能够生成TCP套接字,该套接字将用于向URL发送HTTP GET报文,生成套接字之前,主机A中的TCP需要先向包含URL的服务器中的TCP执行三次握手。主机A生成一个具有目的端口80的TCP SYN报文段,然后将此报文段放置于具有目的IP地址64.233.169.105的IP数据报中,将该数据报放置在MAC地址为00:22:6B:45:1F:1B(网关路由器)的帧中,并向交换机发送该帧。
· · 2)最后当包含TCP SYN的数据报到达URL时,从数据报中取出TCP SYN报文并分解到与端口80相联系的欢迎套接字中,会对URL服务器与主机A之间的TCP连接生成一个连接套接字,然后产生一个TCP SYNACK报文段,将其放入向主机A寻址的一个数据报中,最后放入链路层帧中。
· · 3)包含TCP SYNACK报文段的数据报通过URL、Comcast和学校网络后,最终到达主机A的以太网卡,数据报在操作系统中分解到套接字中,从而进入连接状态。
· · 4)通过主机A的套接字,现在就可以向URL发送字节了,主机A的浏览器会生成包含要获取的URL的HTTP GET报文。HTTP GET报文会被写入套接字,其中GET报文将会成为一个TCP报文段的载荷,该TCP报文段会被放置进一个数据报中,最后被交付到URL服务器中。
· · 5)当URL服务器从TCP套接字中读取到HTTP GET报文后,就会生成一个HTTP响应报文,将请求的Web页面内容放到HTTP响应体中,并将报文发送进TCP套接字中。
· · 6)最后包含HTTP回答报文的数据报会到达主机A,主机A的Web浏览器会从套接字中读取HTTP响应,从HTTP响应体中抽取Web网页的html,最终显示出Web网页。