【笔记】谢希仁—计网五版:chapter three 数据链路层(一)

数据链路层使用的信道有以下两种类型:

①点对点信道,一对一的点对点通信方式

②广播信道,一对多的广播通信方式,复杂。广播信道上连接的主机多,因此必须使用共享协议来协调这些主机的数据发送。

本文先介绍点对点信道和在这种信道上常用的点对点协议PPP。然后讨论共享信道的局域网和有关协议。

我们可以想象数据是在数据链路层从左向右沿水平方向传送:

图片发自简书App


图片发自简书App

每段链路层可能采用不同的数据链路层协议。

一、使用点对点信道的数据链路层

1.数据链路和帧

链路和数据链路不是一回事。

链路(link):是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。通信时,要有很多这样的链路,所以链路只是一条路径的组成部分。(物理链路

数据链路(data link):指在物理线路上添加上控制数据传输的协议的硬件和软件。(逻辑链路

早期的数据通信协议也叫做规程(procedure),因此在数据链路层,规程和协议是同义语。

:点对点信道的数据链路层的协议单元。数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接受到的帧中的数据取出来并交给网络层。在因特网中,网络层协议数据单元就是IP数据报(或简称为数据报、分组、包)。

图片发自简书App

点对点通信步骤:①结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。②结点A把封装好的帧发送给结点B的数据链路层。③结点B的数据链路层收到的帧无差错,则从收到的帧中取出IP数据报上交给上面的网络层,否则丢弃这个帧。

数据链路层不必考虑物理层如何实现比特传输的细节,甚至可以更简单地设想好像是沿着两个数据链路层的水平方向把帧直接发送到对方。

2.三个基本问题

①封装成帧(framing)

在一段数据的前后分别添加首部和尾部,然后就构成了一个帧,进行帧定界

发送帧时,是从帧首部开始发送。各种数据链路层协议都要对帧首部和帧尾部的格式有明确规定。为提高帧的传输效率,帧的数据部分长度应该尽可能大于首部和尾部的长度。但每一种数据链路层协议规定了帧的数据部分的长度上限——最大传送单元MTU(maximum transfer unit)。

另外:当数据是由可打印的ASC2码组成的文本文件时,帧定界可以使用特殊的帧定界符。ASC2码是7位编码,一共可组成128个不同的ASC2码,可打印的有95个,不可打印的有33个。

SOH:start of header,十六进制编码是01。

EOT:end of transmission,十六进制编码是04。

帧界定符的作用:差错控制假定发送端在尚未发送完一个帧时突然出故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据是个不完整的帧(只有首部开始符SOH而没有传输结束符EOT),必须丢弃。而后面收到的数据有明确的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。

②透明传输

如果所传输的数据中的任何8比特的组合和用作帧定界的控制字符的比特编码一样,就会出现帧定界的错误。

当传送的帧是用文本文件组成时,其数据部分不会出现像SOH或EOT这样的帧定界控制字符。不管什么字符都可以放在这样的帧中传输过去,因此这样的传输是透明传输。

当传送的帧是由非ASC2码的文本文件时,情况不同。数据链路层会错误地找到帧的边界,把部分帧收下(误认为是完整的帧),剩下地部分找不到SOH而被丢弃。

解决透明传输问题:

发送端的数据链路层在数据中出现控制字符"SOH"或"EOT"的前面插入一个转义字符"ESC"(其十六进制编码是 1B)。

字节填充(byte stuffing)或字符填充(character stuffing):接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。

如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

③错检测

比特差错:比特在传输过程中,1变成0,0变成1。

误码率BER(bit error rate):在一段时间内,传输错误的比特占所传输比特总数的比率。和信噪比有关,提高信噪比可使误码率减小。

通信链路并非理想,所以有了差错检测措施。

循环冗余检验CRC(cyclic redundancy check)

在发送端,先把数据划分为祖,假定每组K个比特。现假定待传送的数据M = 101001(k=6)。然后CRC运算需要把待传的数据的末尾加上用于检测的n位冗余码,可以简单的理解为在数据后面加上n个0,一共发送(k+n)位。

假设n=3,这样循环冗余检验的被除数101001000就得到了。除数是通信双方商定好的,现在一般使用的方式是用多项式来表示除数,比如P(x)=x^3+x^2+1(生成多项式),就得到除数P=1101。现在就可以开始进行检验了,注意除数P的位数等于n+1。运算的方法和除法类似,只是相减变成了异或而已。经过运算,得到了余数为001,它被称为帧检验序列FCS。

截至现在做的一切的运算,都只是在发送端进行的。为了检验帧是否无比特差错接收了,是在接收端检验的。计算出的帧检验序列FCS会附加在帧的尾部一起发送。

检测:

在接收端把收到的数据以帧为单位进行CRC检测:接收端接收到后,会把FCS取出,添加到数据部分的末尾,得到除数101001001,再次和除数P=1101相除,如果得到的余数等于0,那么就证明此次传输时无比特传输的。如果余数不等于0,那就证明这个帧有差错。

此段参考Ukey_的博文《数据链路层-循环冗余检验》


注意:

1、循环冗余检验CRC和帧检验序列FCS不是同一个概念。CRC是一种检测方法,而FCS是添加在数据后面的冗余码,在检错方法上可以选用也可以不选用CRC。

2、发送端帧检测序列FCS的生成和接收端的CRC检验是用硬件完成的,处理迅速,因此不会延误数据的传输

3、如果在传送数据时不以帧为单位来传送,那么接无法加入冗余码以进行差错检验。因此,必须把数据划分为帧,每一帧都加上冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。

4、在数据链路层如果只是使用循环冗余检验CRC差错检测技术,则只能做到对帧的无差错接受。即:凡是接收端数据链路层接受的帧,我们都近乎人为这些帧在传输过程中没有产生差错。接收端丢弃的帧虽然曾收到了,但最终还是因为有差错被丢弃,即没有被接受。近似表述为:凡是接收端数据链路层接受的帧均无差错。能实现无比特差错的传输,但还不是可靠传输

5、可靠传输指:数据链路层的发送端发送什么,在接收端就收到什么。传输差错分为:比特差错、帧丢失、帧重复、帧失序

6、OSI观点是必须把数据链路层做成可靠传输。于是有了帧编号、确认和重传机制,但是因特网广泛使用的数据链路层协议都不使用确认和重传机制,即不要求数据链路层向上提供可靠传输的服务(代价高,不合算)。如果数据链路层出现了差错则必须改正,这任务由上层协议(如运输层的TCP协议来完成)。这样提高了通信效率

二、点对点协议PPP

通信线路质量较差时,在数据链路层使用可靠传输协议很好,因此能实现可靠传输的高级数据链路控制HDLC(high-level data link control)就成为当时比较流行的数据链路层协议。现在却很少用了,用的多的是PPP(point to point protocol)数据链路层协议。

1.PPP协议的特点

是用户计算机和ISP进行通信时所使用的数据链路层协议。

Ⅰ.需满足

(1)简单

更复杂的是TCP协议,IP协议相对简单(提供不可靠的数据包服务),这样数据链路层没有必要提供比IP协议更多的功能,它不需要纠错、序号、流量控制。当然误码率较高的无线线路上需要更复杂的链路层协议。而且简单的协议使得不同厂商对协议的不同实现的互操性提高了。

接收方每收到一个帧,就进行CRC检验。检验正确,就收下这个帧。不正确,就丢弃,其他什么也不做

(2)封装成帧

PPP协议必须规定特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符),以便接收端能够准确地找出帧的开始和结束位置。

(3)透明性

数据中碰巧出现了和帧定界符一样的比特组合时,要采取有效的措施来解决这个问题。

(4)多种网络层协议

PPP协议必须能够在同一条物理连路上同时支持多种网络层协议(如IP和IPX等)的路由器运行。当点对点链路所连接的是局域网或时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。

(5)多种类型链路

PPP协议不仅要支持多种网络层协议,还要在多种类型的链路上运行。例如,串行的或并行的、同步的或异步的、低速的或高速的等。

(6)差错检测(error detection)

PPP协议必须能够对接收端收到的帧进行检测,并立即丢掉有差错的帧。若没有及时丢掉,则会浪费很多网路资源。

(7)检测连接状态

PPP协议必须具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。

(8)最大传送单元

每一种类型的点对点链路需要。这样可促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过MTU的数值,PPP就丢弃这种帧,并返回差错。强调:MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度

(9)网络层地址协商

PPP协议必须提供一种机制使通信的两个网络层(例如两个IP层)的实体能够通过协商知道或能够配置彼此的网络层地址。这样能保证网络层能够传送分组。

(10)数据压缩协商

PPP协议必须提供一种方法来协商使用数据压缩算法。但PPP协议并不要求将数据压缩算法进行标准化。

Ⅱ.PPP协议不需要的功能

(1)纠错:在TCP/IP协议族中,可靠传输由运输层TCP协议负责,而数据链路层的PPP协议只进行检错。这就是说,PPP协议是不可靠传输协议

(2)流量控制:在TCP/IP协议族中,端到端的流量控制由TCP负责,因而链路级的PPP协议就不需要再重复进行流量控制。

(3)序号: PPP不是可靠传输协议,因此不需要使用帧的序号(许多过去曾经很流行的停止等待协议或连续ARQ协议都是用序号),端到端的流量控制由TCP负责,因而链路级的PPP协议就不需要在重复进行流量控制。

(4)多点线路:PPP协议不支持多线线路(即一个主站轮流和链路上的多个站进行通信),而只支持点对点的链路通信。

(5)半双工或单工链路 :PPP协议只支持全双工链路。

Ⅲ.PPP协议的组成

(1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。

(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(link control protocol)。通信的双方可协商一些选项。

(3)一套网络控制协议NCP(network control protocol),其中的每一个协议支持不同的网络协议层,如IP、OSI的网络层等。

2.PPP协议的帧格式

Ⅰ.字段的意义

F—flag,标志字段,表示一个帧的开始和结束,是帧的定界符。连续两个帧之间只需用一个标志字段,如果连续有两个标志字段则表示这是一个空帧,要丢弃。规定为0x7E。

A—address,地址字段规定为0xFF

C—control,控制字段规定为0x03

A和C两个字段实际上没有携带PPP帧的控制信息。

协议字段—为0x0021时,PPP的信息字段就是IP数据报;为0xC021时,则是PPP链路控制协议LCP的数据;为0x8021时,则是网络层的控制数据

FCS—使用CRC的帧检测序列

Ⅱ.字节填充(异步传输)

信息字段中有和标志字段一样的比特组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充,方法为:

(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)

(2)若信息字段中出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成为2字节序列(0x7D,0x5D)

(3)若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符是传输结束ETX)就要把它转变为2字节序列(0x07D,0x31)

发送端进行了字节填充,因此链路上传送的信息字节数超过了原来的信息字节数,但接收端在收到数据后再进行与发送端字节填充相反的变换,就能正确恢复出原来的信息。

Ⅲ.零比特填充(同步传输)

PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输(逐个字符的传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。

具体做法:

在发送端,扫描整个信息字段(硬件实现快,软件慢),只要发现有5个连续1,立即填入0。这样保证信息字段中不会出现6个连续1。

在接收端,先找到标志字段F确定一个帧的边界,再用硬件对比特扫描,发现5个连续1时,就把后面的一个0删除,还原出原来的信息比特流。

保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起帧边界的判断错误。

3.PPP协议的工作状态

上面我们通过PPP帧的格式讨论了PPP帧是怎样组成的。但PPP链路又是怎样初始化的呢?当用户拨号接入ISP后,就建立了一条从用户PC到ISP的物理链接。这时,用户PC机向ISP发送一系列的LCP分组(封装成多个PPP帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC机分配一个临时的IP地址。这样,用户PC机就成为因特网上的一个有IP地址的主机了。

用户通信完毕时,NCP释放网路层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接。

PPP链路的初始和终止状态永远是图中的链路静止(link dead)状态,这时在用户PC机和ISP的路由器之间并不存在物理层的连接

当用户PC机通过调制解调器呼叫路由器时,路由器就能够检测到调制解掉器发出的载波信号。在双方建立了物理层连接后,PPP就进入链路建立(link establish)状态,其目的是建立链路层的LCP连接

这时LCP开始协商一些配置选项,即发送LCP的配置请求帧。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种相应的一种:

(1)配置确认帧:所有选项都接受

(2)配置否认帧:所有选项都理解但不能接受

(3)配置拒绝帧:选项有的无法识别或不能接受,需要协商

LCP配置选项包括链路上的最大帧长,所使用的鉴别协议的规约(如果有的话),以及不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部中省略这两个字节)

协商结束后双方就建立了LCP链路,接着就进入鉴别状态,在这以状态,只允许传送LCP协议的分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议PAP(password authentication protocol),则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议CHAP(challenge-handshake protocol)。若鉴别身份失败,则转到链路终止状态。若鉴别成功,则进入网络层协议状态。

网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤很重要的,因为现在的路由器都能够同时支持多种的网络层协议。总之,PPP协议连夺冠的网络层可以运行不同的网络层协议,但仍然可使用同一个PPP协议进行通信

如果在PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时就要使用NCP中支持IP的协议——IP控制协议IPCP。IPCP分组也封装成PPP帧(其中的协议字段为0x8201)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。

当网络层配置完毕后,链路就进入可进行数据通信的链路打开状态。链路的两个PPP端点可以彼此向对法国发送分组。两个PPP端点还可以发送回送请求LCP分组回送回答LCP分组,以检查链路的状态。

数据传输结束后,可以由链路的一端发出终止请求LCP分组请求终止链路连接,在收到对方发来的终止确认LCP分组后,转到链路终止状态。如果链路出现故障,会从链路打开状态转到链路终止状态。当调制解调器的载波停止后,则回到链路静止状态。

图的右边方框给出了PPP协议的几个状态的说明,从设备之间的无链路开始,到先接力物理链路,在建立LCP链路。经过鉴别后在建立NCP链路,然后才能交换数据。由此可见,PPP协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容

三、使用广播信道的数据链路层

1.局域网的数据链路层

局域网的优点:

(1)有广播功能,从一个站点可以很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源。

(2)便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变。

(3)提高了系统的可靠性、可用性和生存性。

局域网的工作层次跨越了数据链路层和物理层。由于局域网技术中有关数据链路层的内容比较丰富,因此我们就把局域网的内容放在数据链路层这一章中讨论,但这并不表示局域网仅仅和数据链路层有关。

共享信道:使众多用户能够合理而方便地共享通信媒体资源。有两种方法:

1、静态划分信道:频分复用、时分复用、波分复用、码分复用,用户分配到了信道就不会和其他用户产生冲突,但代价高,不适合局域网使用。

2、动态媒体接入控制:又称为多点接入(multiple access),信道并非在用户通信时固定分配给用户,分为随机接入(用户可随机发送信息,但有多个用户随时发送信息,则会发生碰撞,因此要有解决碰撞的协议)和受控接入(用户不能随机发送信息而必须服从一定控制,典型代表有分散控制的令牌环局域网和集中控制的多点线路探寻,或称为轮询,用得少)。

Ⅰ.以太网的两个标准

(1)DIX Ethernet V2

(2)IEEE 802.3

两标准差距小,所以很多人把802.3的局域网简称为“以太网”,虽然严格说来,以太网应是符合DIX Ethemet V2标准的局域网。

IEEE 802 委员会把局域网链路层拆成两个子层

(1)逻辑链路控制 LLC (logical link control),它与传输媒体无关,不管用何种传输媒体和MAC子层的局域网对LLC子层来说都是透明的。

(2)媒体接入控制MAC(medium access control),与接入到传输媒体相关的内容都在这层。指传输信号所通过的多种物理环境。常用网络介质包括电缆(如:双绞线,同轴电缆,光纤),还有微波、激光、红外线等。

因特网发展很快导致TCP/IP体系经常使用的局域网只剩下DIX Ethernet V2而不是IEEE 802.3标准中的局域网,因此LLC的作用消失了。很多厂商生产的适配器上只有MAC协议而没有LLC协议。所以这里不考虑LLC子层。

Ⅱ.适配器的作用

计算机是怎样连接到局域网上的?

通过适配器(adapter),本是在主机箱内插入的一块网络接口板(或在笔记本本电脑中插入一块PCMCIA卡),又称网络接口卡NIC(network interface card),或网卡。适配器上装有处理器和存储器(包括RAM和ROM)。

适配器需要

(1)进行数据串行传输和并行传输的转换

因为适配器和局域网之间的通信时通过电缆或双绞线以串行传输方式进行的,而适配器和计算机之间的通信时通过计算机主板上的I/O总线以并行传输方式进行的。

(2)装有对数据进行缓存的存储芯片

因为网络上的数据率和计算机总线上的数据率不相同

(3)能够实现以太网协议


若在主板上插入适配器,必须把管理该适配器的设备驱动程序安装在计算机的操作系统中。这个驱动程序以后告诉适配器,应从存储器的什么位置把多长的数据块发送到局域网,或者应该在存储器上的什么位置把局域网传送过来的数据块存储下来。

适配器接收和发送各种帧时不使用计算机的CPU?

这时CPU可以处理其他任务。  当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机并交付协议栈中的网络层。当计算机要发送IP数据报时,就由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。

计算机的硬件地址:在适配器的ROM中

计算机的软件地址——IP地址:在计算机的存储器中

2.CSMA/CD协议

Ⅰ.历史背景

以前以太网方案的思路是:寻找一种简单方法把距离近的计算机互连起来,使它们能方便可靠地进行高速率数据通信。最早以太网是把很多计算机都连在一根总线上。总线特点:一台计算机发送数据时,总线上所有计算机都能检测到这个数据。但是,我们不总是要在局域网上进行一对多的广播通信。

为了实现一对一的通信,我们可使每一台计算机的适配器拥有一个与其他适配器不同的地址。发送数据帧时,在帧首部写明接收站的地址。仅当数据帧中的目的地址和适配器ROM中存放的硬件地址一样时,该适配器才能接收到这个数据帧。适配器对不是发送给自己的数据帧就丢弃。

Ⅱ.为了通信方便,以太网的两种措施

(1)采用较为灵活的无连接工作方式

不用先建立连接就可以直接发送数据,适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做是因为局域网信道的质量很好,差错率小。收到有差错帧时就丢弃,是否重传由高层决定。但以太网不知道是否是重传帧,而是当做新的数据帧来发送。所以,以太网提供的服务是不可靠的交付,即尽最大努力的交付

(2)以太网发送的数据使用曼切斯特(manchester)编码的信号

二进制基带数字信号:是高、低电压交替出现的信号,但是这样的问题就是当出现一长串的连1或连0时,接收端就无法从收到的比特流中提取位同步(即比特同步)信号。

曼切斯特方法:把每一个码元分为两相等间隔。码元1是前低后高,码元0是前高后低。这样保证了在每一个码元的正中间出现一次电压变换,而接收端就利用这种电压的转换很方便地把位同步信号提取出来。

缺点:它所占的频带宽度比原始的基带信号增加了一倍(因为每秒传送的码元数加倍了)。

Ⅲ.如何协调总线上各计算机的工作

总线上只要有一台计算机在发送数据,总线的传输资源就被占用。因此,同一时间只能允许一台计算机发送信息。否则,各计算机之间会相互干扰,结果大家都无法发送数据。

协议CSMA/CD

1、含义

载波监听多点接入/碰撞检测(carrier sense multiple with collision detection)

多点接入:说明是总线型网络

载波监听:发送前先监听。每一个站在发送数据前先要检测总线上是否有其他站在发送数据,如果有则暂时不发,等待信道空闲再发。总线上无载波,载波监听就是用电子技术检测总线上有没有其他计算机发送的数据信号。

碰撞检测:边发送边监听,也称冲突检测。适配器边发送数据边检测信道上的信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据。同时发送数据时,总线上的信号电压变化幅度大,超过一定门限值时,就认为总线上至少两个站同时在发送数据,表明有碰撞。这时总线上的信号失真,无法恢复。所以,每一个正在发送数据的站,一旦发现有碰撞,适配器就要立即停止发送,以免浪费网络资源,等待一段随机时间后再发送。

2、原理

某个站监听到总线是空闲时,总线并非一定是空闲。

电磁波在1km电缆的传输时延约为5us。因此,A向B发出的数据,在约5us后才能传到B。把总线上的单程端到端传播时延记为τ

发送数据的站想尽早知道是否有碰撞,那么在A发送数据后,最迟经过多长时间才能知道自己发送的数据和其他站发送的数据有无碰撞?答案最多是两倍的总线端到端的传播时延(2τ),或总线的端到端往返传播时延

本协议中,一个站不可能同时进行发送和接收。所以使用CSMA/CD协议的以太网不可能进行全双工通信而只能进行双向交替通信(半双工通信)。

t=0时,A发送数据。B检测到信道为空闲。

t=τ-δ时(这里τ>δ>0),A发送数据还没到达B时,由于B检测到信道是空闲的(为什么B检测是空闲的?因为电磁波1km的传播时延是5us,换言之就是5us后B才能检测到信道是忙的,5us之前,B认为是空闲的,于是开始发送数据)。因此B发送数据。

经过时间δ/2后,即在t=τ-δ/2时,A发送的数据和B发送的数据发生了碰撞。这时,A和B都不知道发送了碰撞。

T=τ时,只有B先检测到了发生碰撞,于是停止发送数据。

在T=2τ- δ时,A才检测到发生了碰撞,也停止发送数据。

然后A和B就随时选择一个时间,推迟,再重新发送。

由此可知,每一个站,在发送数据时,在一定时间内,都存在碰撞的可能性。称为发送的不确定性。整个以太网的平均通信量小于以太网的最高数据率时,碰撞的机会会小。

发送数据帧的A站,最多经历2τ时间就可以知道是否遭受碰撞了。我们把这2τ称为争用期,也叫碰撞窗口。

经过这个争用期时间,检测没有发生碰撞,就能肯定这次发送的数据不会发生碰撞。

至此,碰撞问题还是没有解决。专家们就发明了一种算法,来减小发生碰撞的概率,这个算法就是:截断二进制指数退避(truncated binary exponential backoff)算法。

退避算法的思想如下

(1)确定基本退避时间,就是争用期2τ。以太网把争用期2τ定为51.2us 。对于10Mb/s以太网,在争用期内可发送512bit,即64字节512bit怎么来的? 就是速率乘以时间,就等于数据量。

10Mb/s*51.2us=[10*10^6b/s] * [51.2^(-6)s]=512bit

(2)从离散的整数集合随机取出一个数[0,1,2,3……,(2^k-1)]  ,取出来的数,记为r。重传推迟的时间就是r倍的争用期。T=r*2τ

上面k的参数,按照这个计算k=Min[重传次数,10]。  可见,当重传次数不超过10时,参数k=重传次数。如果重传次数超过10时,k就不再增加了,一直等于10。

(3)当重传达16次,仍然会不能成功时,就丢弃该帧,向高层报告。说明发送的人太多了,导致连续发送碰撞。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(也称动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。

举例:

在第一次重传时,k=1,随机数r从整数{0,1}中选一个数,  可得重传的推迟时间要么为0,要么为1*2τ, 这两个选择一个。

如果再次发送,即第二次重传,k=2,代入[0,1,2,3……,(2^k-1)] ,随机数r从整数{0,1,2,3}选一个数,可得重传推迟时间是0,2τ,4τ,6τ 这4个值随机选择一个。

同理,再次发送碰撞,以此类推。

3、注意

适配器每发送一个新的帧,就要执行一次CSMA/CD算法。适配器对过去发生过的碰撞无记忆功能。所以,好几个适配器正在执行指数退避算法时,很可能某一个适配器发送的新帧能碰巧立即成功地插入到信道中,得到了发送权。

以太网在发送数据时,如果帧的前64字节没有发送冲突,那么后续的数据就不会发送冲突。换句话说,就是如果发送冲突,就一定是在发送的前64字节之内。因为检测到冲突就停止发送,这时已经发送出去的数据一定小于64字节。因此以太网规定了最短有效帧长为64字节,只要长度小于64字节的帧都是由于冲突而异常中止的无效帧。收到这种无效帧就立即丢弃。

以太网的端到端时延实际上是小于争用期的一半(即25.6us)。争用期被定为51.2us,不仅是考虑了以太网的端到端时延,而且还包括其他因素,如转发器内的时延、强化碰撞的干扰信号的持续时间等。

4、以太网最小帧是64字节的原因

首先说一下时隙,时隙在一般的数字通信原理中是这样定义的:由各个消息构成的单一抽样的一组脉冲叫做一帧,一帧中相邻两个脉冲之间是时间间隔叫做时隙

以太网的时隙有它自己的特定意义:

a.在以太网CSMA/CD规则中,若发生冲突,则必须让网上每个主机都检测到。但信号传播到整个介质需要一定的时间。

b.考虑极限情况,主机发送的帧很小,两冲突主机相距很远。在A发送的帧传播到B的前一刻,B开始发送帧。这样,当A的帧到达B时,B检测到了冲突,于是发送阻塞信号。

c.但B的阻塞信号还没有传输到A,A的帧已发送完毕,那么A就检测不到冲突,而误认为已发送成功,不再发送。

d.由于信号的传播时延,检测到冲突需要一定的时间,所以发送的帧必须有一定的长度。这就是时隙需要解决的问题。

这里可以把从A到B的传输时间设为T,在极端的情况下A要在2T的时间里才可以检测到有冲突的存在。

(1)理想情况下,电磁波在1KM电缆的传输时延约为5us(这个数字应该记下来)。

(2)在10Mbps的以太网中有个5-4-3的问题:10Mbps以太网最多只能有5个网段,4个转发器,而其中只允许3个网段有设备,其他两个只是传输距离的延长。按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米。

那么在理想的情况下,时隙可以为2500/1000*5*2us=25us,但是事实上并非如此简单,实际上的时隙一定会比25us大些,比如中继转发延时等干扰。IEEE将10M以太网的时隙定义为512比特时,即51.2us。

对于10Mbps以太网来说,10Mb/s*51.2us=512bit,所以一般说的512bit时隙长度就是这样来的。这个长度为512/8=64字节,即最小帧长度64字节。以太网在发送数据时,如果在前面64字节没有发生冲突的话,那么后续的数据就不会发生冲突,以太网就认为这个数据的发送是成功的。

5、强化碰撞措施

发送数据的站一旦发现了碰撞,除了立即停止发送数据外,还要继续发送32或48比特的人为干扰信号(jamming signal),以便让所有用户都知道已经发生了碰撞。对于10Mb/s以太网,发送32(或48)比特只需要3.2(或4.8)us。

A、B站知道发生碰撞后,也要发送人为干扰信号。碰撞使A浪费时间Tb+Tj,可是整个信道被占用的时间还要增加一个单程端到端的传播时延τ。因此总线被占用时间是Tb+Tj+τ。

帧间最小间隔为9.6us,相当于96比特时间。这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。

CSMA/CD协议的要点

①准备发送:适配器从网络层获得一个分组,加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中,准备发送;

②检测信道:若适配器检测到信道忙,则应不停地检测,一直等待信道转为空闲。若检测到信道空闲,并在96比特时间内信道保持空闲,就发送这个帧;

③在发送过程中仍不停地检测信道,若一直未检测到碰撞,就顺利把这个帧发送完毕。若检测到碰撞,则中止数据的发送,并发送人为干扰信号。

④在中止发送后,适配器就执行指数退避算法,等待r倍512比特时间后,返回步骤2。


四、使用广播信道的以太网

1.使用集线器的星形拓扑

传统以太网最初是用粗同轴电缆,后用较便宜的细同轴电缆,后用更便宜更灵活的双绞线。它采用星形拓扑,星形中心有可靠性非常高的设备,叫集线器(hub,使用了大规模集成电路芯片所以可靠性高)。双绞线以太网总是和集线器配合使用的。每个站需要用两对无屏蔽双绞线(做在一根电缆内),分别用于发送和接收。

双绞线要能传送高速数据,需要绞合度非常精确。这样能较少失真,减少干扰。

集线器的特点

主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。

①使用集线器的以太网在逻辑上仍是一个总线网,各站共享逻辑上的总线,使用的还是CSMA/CD协议(各站中的适配器执行协议)。网络中的各站必须竞争对传输媒体的控制,并且在同一时刻至多只允许一个站发送数据。

②一个集线器有很多接口,像一个多接口的转发器

工作在物理层,每个接口只是简单地转发比特,不进行碰撞检测。

④采用了专门的芯片,进行自适应串音回波抵消。这样就可使接口转发出去的较强信号不致对该接口收到的较弱信号产生干扰(这种干扰即近端串音)。每个比特在转发前还要进行再生整形并重新定时。

堆叠式(stackable)集线器

由4~8个集线器堆叠起来,有少量的容错能力和网络管理功能。例如,以太网中有一个适配器出了故障,不停发送以太网帧,这时集线器可检测到这个问题,在内部断开与出故障的适配器的连线,使整个以太网仍然能正常工作。模块化的机箱式智能集线器有很高的可靠性。它全部的网络功能都以模块方式实现。各模块均可进行热插播,出故障时不断电即可更换或增加新模块。集线器上的指示灯还可显示网络上的故障情况,给网络的管理带来了很大的方便。

IEEE 802.3 标准还可使用光纤作为传输媒体,相应的标准是 10 BASE-F系列,F代表光纤。它主要用作集线器之间的远程连接。

2.以太网的信道利用率

假定发送帧需要时间T0,它等于帧长(bit)除以发送速率。成功发送一个帧需要占用信道时间是T0+τ,多一个τ是因为一个站发送的最后一个比特还要在以太网上传输。所以经过时间T0+τ后以太网的媒体才能完全进入空闲状态,才能允许其他站发送数据

要提高以太网的信道利用率,就必须减小tT0之比。在以太网中定义了参数a,它是以太网单程端到端时延t与帧的发送时间T0之比:

a=t/T0

a→0时,表示只要一发生碰撞,就立即可以检测出来,并立即停止发送,因而信道资源不会被浪费。反之,参数a越大,表明争用期所占的比例增大,这就使得信道利用率降低。因此,以太网的参数a的值应当尽可能小些

从上式可看出,这就要求分子t的数值要小些,分母T0的数值要大些。这就是说,当数据传输速率一定时,以太网的连线的长度受到限制(否则t的数值会太大),同时以太网的帧长不能太短(否则T0的值会太小)。

现在考虑一种理想化的情况。假定以太网上的各站发送数据都不会产生碰撞(这显然已经不是CSMA/CD,而是需要使用一种特殊的调度方法),并且能够非常有效地利用网络的传输资源,即总线一旦空闲就有某一个站立即发送数据。这样,发送一帧占用线路的时间是T0+t,而帧本身的发送时间是T0。于是我们可计算出极限信道利用率Smax为:

Smax=T0/(T0+t)=1/(1+a)

该式指出了参数a远小于1才能得到尽可能高的极限信道利用率。反之,若参数a远大于1,则极限信道利用率就远小于1,而这时实际的信道利用率就更小了。

3.以太网的MAC层

1.MAC 层的硬件地址

在局域网中,硬件地址又称为物理地址、MAC地址(因为这种地址用在MAC帧中)、链路地址。

Ⅰ、含义

是指局域网上的每一台计算机中固化在适配器的ROM中的地址(因此也叫适配器地址或适配器标识符EUI—48),由硬件厂商决定,是不会变的。只要适配器不变,它就不变。它是每一个站的“名字”或标识符。如果连接在局域网上的主机或路由器安装有多个适配器,那么这样的主机或路由器就有多个“地址”,也就是说,这种48位地址应当是某个接口的标识符。

Ⅱ、组成

起初,人们认为用两个字节(16位)表示地址就够了,但是后来希望在各地的局域网中的站具有互不相同的物理地址。为了使用户在买到适配器并把机器连到局域网后马上就能工作,而不需要等待网络管理员给他分配一个地址,IEEE 802 标准就规定MAC地址字段可采用6字节(48位)或2字节(16位)这两种中的一种。6字节地址字段可使全世界所有的局域网适配器都具有不相同的地址,现在的局域网适配器都用的这种。

6字节中的前3字节:由IEEE的注册管理机构RA(registration authority,局域网全球地址的法定管理机构)负责分配,所有生产局域网适配器的厂家必须向IEEE购买这3个字节构成的号(即地址块),这个号的正式名称是组织唯一标识符OUI(organizationlly unique identifier),也叫公司标识符(company_id)。

24位的OUI不能单独标志一个公司,因为一个公司可能有几个OUI,也可能几个小公司合起来购买一个OUI。

第1字节的最低位I/G(individual/group)位,为0时,地址字段表示一个单个站地址为1时表示组地址,用来多播

注意:有的书把上述最低位写为“第一位”,但“第一”含糊不清,因为地址记法有两种:一种是把每一字节的最低位写在最左边(最左边的最低位是第一位),IEEE 802.3 是这种记法,发送数据时先发最低位;二种是把每一字节的最高位写在最左边(最左边的最高位是第一位),发送数据时先发最高位。

第1字节的最低第二位:IEEE考虑到有人不愿意购买OUI,因此把此位规定为G/L(global / local)位。为1时是全球管理(保证在全球没有相同地址),厂商向IEEE购买的OUI都属于全球管理。为0时是本地管理,用户可任意分配网络上的地址,采用2字节地址字段时全都是本地管理。以太网几乎不适用这个G / L 位

6字节中的后3字节:厂家自行指派,称为扩展标识符(extended identifier),保证无重复地址即可。

用以上方式得到的48位地址称为MAC—48,通用名称是EUI—48。(extended unique identifier),它不仅用于局域网的硬件地址,还可哟关于软件接口。

当路由器通过适配器连接到局域网时,适配器上的硬件地址就用来标志路由器的某个接口。路由器如果同时连接到两个网络上,那么它就需要两个适配器和两个硬件地址。

Ⅲ、适配器的重要功能

①进行串行/并行转换

②对数据进行缓存

③在计算机的操作系统安装设备驱动程序

④实现以太网协议

⑤适配器从网络上每收到一个 MAC 帧就首先用硬件检查 MAC 帧中的 MAC 地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则就将此帧丢弃,不再进行其他的处理。

这里发往本站的帧有三种:

一是单播(unicast)帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同。

二是广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)。

三是多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。

所有的适配器都至少应当能够识别两种帧,即能够识别单播和多播地址。有的适配器可用编程方法识别多播地址。当操作系统启动时,它就把适配器初始化,使适配器能够识别某些多播地址。显然,只有目的地址才能使用广播地址和多播地址。

以太网还可设置混杂方式(promiscuous mode),工作在混杂方式的适配器只要“听到”有帧在以太网上传输那就悄悄接收下来,而不管是发往哪个站,当然不中断。黑客利用这种方法非法获取网上用户的口令。但这种方式可帮助网络维护和管理人员监视和分析以太网上的流量,以便找出提高网络性能的具体措施。嗅探器(sniffer)使用了设置为混杂方式适配器,可帮助学习网络的人员更好理解各种网络协议的原理。

2.MAC帧的格式

有两种标准,一种是DIX Ethernet V2 标准(即以太网V2标准),另一种是IEEE的802.3标准。这里只介绍使用的最多的以太网V2的MAC帧的格式。图假定网络层使用的是IP协议。

类型字段:用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。

数据字段:最小长度是46字节(64字节减去18字节的首部和尾部)

FCS字段:帧检测序列(使用CRC检验)

Ⅰ、MAC以太网子层如何知道从接收到的以太网帧中取出多少字节的数据交付给上一层协议?

曼切斯特编码:每一个码元的正中间一定有一次电压的转换,发送方把一个码元发送完后,就不再发送其他码元了,因此电压不再变化。这样接收方就很容易找到以太网帧的结束位置。在这个位置往前数4字节(FCS长度是4字节),就能确定数据字段的结束位置。

Ⅱ、数据字段小于46字节,即以太网的MAC帧长小于64字节怎么办?

注意到,MAC帧的首部没有指出数据字段的长度是多少。在有填充字段后,接收端的MAC子层在剥去首部和尾部后就把数据字段和填充字段一起上交给上层协议。那么,上层协议如何知道填充字段长度?(IP层不需要填充字段)上层使用IP协议时,首部有一个“总长度”字段,“总长度”加上填充字段长度,应等于MAC帧数据字段长度。

Ⅲ、传输媒体上实际传送的为什么要比MAC帧多8个字节?

因为当一个站在刚开始接收MAC帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC帧的最前面的若干位无法接收,结果使整个的MAC成为无用的帧。为了接收端迅速实现位同步,有了这8字节(硬件生成)。

有两个字段组成。第一个字段是7字节的前同步码(1和0交替码),作用是使接收端的适配器在接收MAC帧时能迅速调整其始终频率,使它和发送端的时钟同步,即“实现位同步”(比特同步)。第二个字段是帧开始界定符,定义为10101011,前6位作用和前同步码一样,最后连续的1是要告诉接收端适配器:MAC帧的信息马上就要来了,请适配器注意查收。

MAC帧的FCS字段的检查范围不包括前同步码和帧开始界定符

在使用SONET / SDH进行同步传输时不需要用前同步码,因为在同步传输时收发双方的位同步总是一直保持着的。

Ⅳ、为什么以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输?

这是因为在以太网上传送数据时是以帧为单位的,传送帧时各帧之间有间隙。因此,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个MAC帧。

Ⅴ、IEEE 802.3 规定的无效帧

①帧的长度不是整数个字节

②用收到的帧检测序列FCS查出有差错

③收到的帧的MAC数据字段的长度不在46~1500字节之间。

无效帧直接丢弃,以太网不负责重传。

Ⅵ、IEEE 802.3 规定的MAC帧格式与以太网V2 MAC帧格式的区别

①IEEE 802.3 规定的MAC帧的第三个字段是“长度 / 类型”。这个值大于0x0600(相当于十进制的1536),就表示“类型”。这样的帧和以太网V2 MAC帧完全一样。只有当这个值小于0x0600时,才表示“长度”,即MAC帧的数据部分长度。显然,数据字段的长度与长度字段的值不一致时,是无效的帧。而由于以太网使用了曼切斯特编码,长度字段无意义。

②“长度 / 类型”字段值小于0x0600时,数据字段必须装入上面的LLC子层的LLC帧。

由于广泛使用的局域网只有以太网,所以LLC帧失去了原来的意义。

五、扩展的以太网

在物理层和链路层扩展,这样扩展的以太网在网络层看来仍然是一个网络。

1.在物理层扩展以太网(集线器)

以太网上的主机之间的距离不能太远,否则主机发送的信号经过铜线的传输会衰减到使CSMA/CD协议无法正常工作。过去使用粗缆或细缆以太网时,常使用工作在物理层的转发器来扩展以太网的地理覆盖范围。那时,两个网段可用一个转发器连接起来。IEEE 802.3标准还规定,任意两个站之间最多可以经过三个电缆网段。但随着双绞线以太网成为以太网的主流类型,扩展以太网的覆盖范围已很少使用转发器了。

现在,扩展主机和集线器之间的距离的一种简单方法就是使用光纤(通常是一对光纤)和一对光纤调制解调器

光纤调制解调器的作用就是进行电信号和光信号的转换。由于光纤带来的时延很小,并且带宽很高,因此使用这种方法可以很容易地使主机和几公里以外的集线器相连接。

上图好处:使不同系的以外网可以进行跨系通信,另外扩大了以太网的覆盖范围。

上图缺点:①每一个系的 10BASE-T 以太网是一个独立的碰撞域(collision domain,又称冲突域),即在任一时刻,每一个碰撞域中只能有一个站在发送数据,每一个系吞吐量是10Mb/s,连在一起后还是10Mb/s,而不是30Mb/s。当某个系的两个站在通信时所传送的数据会通过所有的集线器进行转发,使得其他系的内部在这时都不能通信(一发送就碰撞)。

②如果不同的系使用不同的以太网技术(如数据率不同),那么就不可能用集线器互连。如有三个系分别为10Mb/s、10Mb/s、100Mb/s,那么用集线器连接起来后,大家都只能工作在10Mb/s的速率。集线器基本是个多接口(即多端口)的转发器,它不能把帧进行缓存。

集线器、交换机、路由器的比较

参考博文《集线器交换机区别》

集线器:共享带宽、半双工,在物理层

交换器:独享带宽、全双工,在链路层

如果用最简单的语言叙述交换机与集线器的区别,那就应该是智能与非智能的区别。集线器说白了只是连接多个计算机的网络设备,它只能起到信号放大和传输的作用,不能对信号中的碎片进行处理,所以在传输过程中容易出错。而交换机则可以看作为是一种智能型的集线器,它除了拥有集线器的所有特性外,还具有自动寻址、交换、处理的功能。并且在数据传递过程中,发送端与接受端独立工作,不与其它端口发生关系,从而达到防止数据丢失和提高吞吐量的目的。

所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。路由器可以让不同子网、网段进行互连,因此路由器与集线器、交换机不同,它一般安装在网络的“骨干”部位。在网络层


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容