首页 > 代码库 > 计算机网络(谢希仁版)——第三章导读(1)
计算机网络(谢希仁版)——第三章导读(1)
※数据链路层讨论什么
数据链路层讨论的是局域网中主机与主机间的连接问题,网络(IP)层讨论的主要是网络与网络互连的问题。
在数据链路层(局域网)使用的信道主要有两种:点对点信道和广播信道,我们具体要讨论的就是这两个信道的特点,以及它们所使用的协议的特点。但在讨论过程中,我们会先讨论数据链路层的三个基本问题,然后再讨论点对点信道、广播信道。此外我们还会讨论一些些额外知识。
数据链路是什么意思?
“链路”指的是两个结点间的物理线路(有线或无线),中间没有其它结点,而“数据链路”则是指链路与其实现协议的硬软件的整体。
数据链路层的工作是什么?
将网络层(不一定是IP层,有可能不是TCP/IP体系)交下来的数据封装成“帧”,以及把“帧”中的数据取出交给网络层。
※数据链路层的三个基本问题
数据链路层也有多种协议(比如点对点信道和广播信道就有不同的协议),但都需要解决三个基本问题:
1.如何封装成帧 2.如何实现“透明传输” 3.如何进行差错检测
如何封装成帧?
为网络层的数据(IP数据报)加上首部和尾部即可封装成帧,首部和尾部根据不同的协议会带有不同的控制信息。
但即使在不同的协议中,首部和尾部都必须有“帧定界符”来确定一个帧的范围。(因为帧的数据部分长度不是固定的,所以整个帧的长度也是不固定的)
举例来说,我们以00000001作为帧的起始定界符(SOH,start of header),00000100作为帧的结束定界符(EOT,end of transmission),那么当接收方收到SOH时就知道一个帧开始了,而收到EOT时则知道一个帧结束了,如果发送方未发送完就中断了,然后重新发送,接收方也会因为接受到两个SOH(中间没接收到EOT)而确定第二个SOH前面的数据应该丢弃。
什么是“透明传输”,如何实现?
“透明”即“实际存在的事物却看不到”
数据链路层的帧定界符会阻碍数据的传输。假定00000001表示SOH,00000100表示EOT,那么帧的数据部分(IP数据报)就不能出现00000001和00000100,否则就会使得数据链路层的传输出错。而“透明传输”就是要实现“虽然存在SOH和EOT这两个阻碍,但要让数据‘
看不出’有这俩个阻碍”,也就是通过技术手段让IP数据报可以出现SOH和EOT而不影响数据链路层的传输。
实现“透明传输”的方法之一就是利用“转义字符”(ESC)来进行字节填充,例如假设ESC为00110000,那么当帧的数据部分出现了SOH或EOT时,只需要在“封装帧”时,在SOH或EOT前面加上00110000即可让接收方明白“这里不是帧定界符而是数据本身”。
那么当数据中出现了“转义字符”又该怎么办?
通过连续的两个ESC来表示,比如数据中出现了转义字符00110000,那么封装成帧时,在00110000前再加上00110000即可。
如何进行差错检测?
首先需要明白的是,数据链路层的差错检测只负责“位差错”的检测,而不负责“帧差错”的检测(仅限于通信质量良好的线路,如果通信质量较差则会采用确认-重传机制)。
所谓“位差错”即帧当中的某些位出了差错,比如发送的1接收时为0或者发送的0接收时为1.
“帧差错”则是指接收方出现了“帧丢失”,“帧重复”或“帧失序”的情况,比如一个IP数据报被分为了帧1,帧2和帧3,但传输过后,接收方只接受到帧1和帧3(丢失帧2),或者接收方接受到了帧1,帧2,帧2,帧3(帧2重复),或者接受到的是帧2,帧1,帧3(失序)
目前数据链路层广泛采用的是循环冗余检验技术(CRC,实现方法略),将CRC计算所得的冗余码加在帧数据部分的尾部(帧检验序列FCS)
什么是PPP协议?
PPP即Point-to-Point Protocol,是目前使用最广泛的用于点对点链路的数据链路层协议。(用户计算机和ISP之间就是采用PPP协议)
PPP协议有什么特点?
1.简单,不需要纠错(只检错),不需要序号(不管帧差错),接收方收到一个帧就进行CRC检验,正确就收下,出错就扔掉,不需要做其他事情。
2.封装成帧 3.透明性 4.差错检测
5.支持多种链路和多种网络层协议
6.负责检查连接状态
7.对数据部分有最大传输单元(Max Transmission Unit,MTU)的限定
8.允许双方“协商”部分事宜(网络层地址,数据压缩方式)
※简单来说,PPP协议由以下三部分组成
1.封装IP数据包的方法(MTU,透明性,差错检测等均在内)
2.建立、配置、测试数据链路链接的链路控制协议LCP(Link Control Protocol)
3.负责支持不同网络层协议的一套网络控制协议NCP(Network Control Protocol)
PPP协议中的帧是怎样的?
PPP帧的首部有4个部分,尾部有2个部分
首部的4个部分分别是F段,A段,C段和协议段
F段即Flag段,也就是帧定界符,表示帧的开始与结束(尾部表示结束的也是F段,两者均为0x7E)
A段和C段在最初时是准备给以后的某种应用的,但目前为止还没有用上,所以两者一直是0xFF和0x03
协议段的内容决定了“帧的信息部分是什么”,如果协议段为0x0021,则信息部分为IP数据报,如果协议段为0xC021,则信息部分为链路控制协议LCP的数据,如果协议段为0x8021则信息部分为网络层的控制数据(网络控制协议NCP)
尾部的2个部分分别是帧检验序列FCS和帧定界符F段(与首部的相同)
※PPP实现透明传输的方式有两种,一种是通过之前所说的字节填充(“转义字符”)来实现(具体实现方式略),另一种则是“零比特填充”。
字节填充方式在PPP中主要适用于异步传输的情况(数据并不是从第一个位到最后一个位一次性传输完毕的,比如出现信道时分复用的情况)
当同步传输时,PPP采用零比特填充的方式。PPP中的帧定界符为0x7E,也就是1111110。所以我们可以通过以下方式来避免数据部分出现1111110:
发送方每当数据部分出现连续的5个1,即11111时,就在其后加一个0。接收方则每当遇到11111,就去掉其后的一个0
使用PPP协议的链路的工作状态大概是怎样的?
按步骤来说,大致如下:
1.双方没有连接(包括物理层,但实际上来说双方有线路相连)
2.双方建立物理层连接(比如用户通过调制解调器呼叫ISP的路由器)
3.双方通过发送LCP的配置请求帧来协商链路配置(协商结束后即建立好LCP链路)
4.鉴别(可选,用于确认对方身份等用途)
5.双方根据网络层使用的协议,选择NCP中对应的支持协议进行配置(比如网络层使用IP协议,则分配IP地址等)
什么是“广播信道”?
广播信道即可以进行一对多通信的信道,信道上一个主机发出的信息可以被多个主机接收,因而叫广播信道,一般使用广播信道的为局域网。
什么是以太网?
以太网就是一种局域网,在共享信道技术上采用了“随机接入”方式,早期为总线网(上图),以太是一种假想的用于传播电磁波的介质,将总线局域网命名为以太网并无特殊含义。
什么是“随机接入”?
在第二章中我们提过一些信道复用技术,比如频分复用、时分复用,只要信道上的用户分配到了信道就可以实现共享信道,这类方法其实是“静态划分信道”,一旦划分完毕就不便更改,不适用于局域网。因此局域网必须采用“动态媒体接入控制”。
“动态媒体接入控制”的特点是不将信道固定的分配给用户,其又分为“随机接入”和“受控接入”两种。
随机接入中用户可随时发送信息,但如果信道中同时有多个用户发送消息则必须发生“碰撞”,令他们全部发送失败,然后再解决(后面讨论)。
受控接入则是用户不可随时发送信息,必须受到控制,受控接入的实现方法之一类似于计算机内部总线的轮询。
※随机接入即以太网所采用的方式,目前来说大部分局域网都是以太网,因此以太网与局域网基本同义,讨论广播信道即讨论局域网、以太网。
※以太网有两个标准,分别是DIX Ethernet V2和IEEE 802.3,但目前TCP/IP体系中只剩下DIX Ethernet V2标准的以太网,所以很多厂商生产适配器也只配置了MAC协议(Medium Access Control)而没有配置LLC协议(Logical Link Control)。
什么是适配器?
适配器即通常所说的“网卡”,其功能包含数据链路层和物理层,比如实现串、并行的转换,对数据的缓存,发送和接收帧等。
※计算机的硬件地址(MAC地址,之后讨论)存储在适配器的ROM中
计算机的软件地址(IP地址)则存储在计算机的存储器中。
※虽然广播信道上一台主机发出的信息可以被所有主机所接收到,但并不是任何时候我们都希望进行广播通信,所以如果信道上的主机有适配器,而适配器中又有唯一的硬件地址,那么我们就可以通过在帧的首部写明接收方的地址,在广播信道上实现一对一的通信。
早期以太网的特点是?
1.采用总线结构(因为当时这种方法比较可靠)。因为采用总线结构,所以才会出现主机间的“碰撞”现象。现在的以太网通过以太网交换机可以避免“碰撞”的发生
2.采用灵活的无连接工作方式,即主机间不需要先建立连接就可直接发送信息。但总线上同一时间只能有一台主机在发送消息,如果有多台主机同时发送消息就会发生“碰撞”,为了解决碰撞,以太网采用了CSMA/CD协议(载波监听多点接入/碰撞检测协议)来处理“碰撞”
3.以太网中的数据采用曼彻斯特编码方式,从而接收方可以从中提取同步信号。
什么是CSMA/CD协议?
载波监听多点接入/碰撞检测协议中:
载波监听其实就是“监听载波”也就是“监测信道”,协议要求每个主机都必须不停的检测信道,不论是发送前还是发送中途
多点接入就是指的总线结构
碰撞检测也就是“边发送边监测”,当适配器发送数据的同时监测信号电压的变化情况,从中判断是否有其他主机也在发送数据,如果有则说明“碰撞”发生。
既然发送前已经确定没有其他主机的信号,为什么发送时还要继续监测信道?
因为电磁波在信道中的传输需要时间(电磁波在1km电缆的传播时间约为5微秒),有可能发送前信道中没有信号,但开始发送后却监测到信道中有其他主机之前发出的信号。
当发生碰撞时,CSAM/CD协议规定怎么做?
首先,当发生碰撞时,主机应停止继续发送帧。但并不能一等到信道空闲就重新发送,因为如果发生碰撞的主机都在监测信道,那么大家都会发现信道空闲然后重新发送,就会再次发生碰撞。因此当碰撞发生后,必须经过一定时间才能再次发送信息,如何确定主机多久以后发送才是难点所在。以太网采用截断二进制指数退避算法来确定主机重传的时间。
截断二进制指数退避算法是怎样的?
首先需要了解一些前提知识:
在图3.17中,主机A从发送数据开始到监测到碰撞最多需要2τ时间(称为“争用期”),也就是说主机A发送数据2τ时间(经过争用期)后就可以确定自己不会被“打断”。同理,一个以太网中必然存在最远的两台主机,这两台主机间信号传输需要的时间记为τ,那么整个以太网的争用期也就是2τ。一般以太网规定争用期时间为51.2微秒,也即τ=25.6微秒(这足够电磁波传送5km的电缆,对于以太网来说足够了)。
在确定争用期时间后,以太网中的主机每当发生碰撞,就从一个离散整数集[0,1,…,2^k-1]中随机取一个数,其中k=Min[重传次数,10],将取出的数与争用期时间相乘,即重传的等待时间。比如第二次碰撞重传时,k=2,集合为[0,1,2,3],从中取一个随机数乘以2τ,假设取出2,则等待4τ时间,然后重传。
当重传次数达到16次,就说明信道中需要发送数据的主机太多,则丢弃该帧并向上汇报。
使用本退避算法可以很好的起到“随着重传次数的增加,重传推迟的平均时间也增加”的效果
※有一种特殊情况是某个主机发送了一个很短很短的帧,该帧发送完毕时依然没有遇到碰撞,但却在传输过程中发生了碰撞,此时接收方将收到有差错的帧从而丢弃它,但发送方却不知情从而不会重传此帧。为了避免这种情况,以太网规定了帧的最低长度,如果要发送的数据真的很少,也必须加入一些填充字节来达到最低长度要求。
※强化碰撞即发送数据的主机在发送时遇上碰撞,此时不仅停止继续发送数据,还要发送一些人为干扰信号以告知所有用户现在发生了碰撞。
计算机网络(谢希仁版)——第三章导读(1)