目录
1.概述
1.1 术语
- 结点:主机和路由器。
- 链路:连接相邻结点的通信信道,链路分为物理链路和数据链路,物理链路研究的是如何通过编码将比特进行传输,物理链路又分为有线链路和无线链路(如局域网),此处讲的是数据链路(位于物理链路之上),实现数据包的传输。
- 数据帧(frame):数据链路层封装的分组。
1.2 数据链路层的功能
- 总功能:数据链路层通过一条链路从一个结点向链路直接相连的另一个相邻结点传送数据报。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
- 组帧:封装数据报构成数据帧,加首部和尾部,而且这个过程要实现帧同步,即能够让接收方识别出一个个数据帧,通常采用的方法是添加帧定界符,为了区别帧定界符和数据报中的和帧定界符相同的内容,在封装数据报时会对其类似部分进行转义。
- 链路接入:如果链路是共享介质,还需要解决信道接入问题,即如何正确地给不同接收方传输数据帧且不造成干扰。帧首部还有MAC地址,用于识别帧的源和目的,不同于IP地址。
- 相邻节点之间的可靠传输:在低误码率的有线链路上很少采用可靠数据交付协议(如光纤),在高误码率的无线链路就会采用类似于传输层的可靠数据协议。
- 流量控制:协调相邻节点的发送和接收
- 差错检测:不同协议对此有不同处理。
- 差错纠正:部分协议实现,对错误的比特进行纠正。
- 半双工和全双工通信:全双工指的是发送方和接收方可以同时双向传输,半双工指的是交替双向传输。
1.3 数据链路层——网卡
2.差错编码
2.1 差错编码的基本原理
差错编码的基本原理是在数据中添加冗余比特,使得数据中比特和比特之间建立起了原本不存在的关联关系。差错编码技术有多种,可分为分组码和卷积码,卷积码在通信工程应用较多,分组码在计算机应用较多,分组码又可以分为线性分组码和非线性分组码,我们此处主要讲线性分组码。
2.2 差错编码的检错能力
根据检错能力,差错编码可以分为检错码和纠错码。
1.检错码
首先介绍一下几个概念:码字,编码集,码字之间的汉明距离和编码集的汉明距离。
- 码字:一个特定的比特串,可以用来编码的最小单位。如00,11。
- 编码集:码字的集合。如{00,01,10,11}
- 码字之间的汉明距离:以00和11两个码字为例,它们之间的汉明距离就是二者对应比特位上不同比特的个数,可见00和11的汉明距离是2,00和01汉明距离是2,01和10的汉明距离是2。
- 编码集的汉明距离:假设有一个编码集{0000,0101,1010,1111},每个码字前2位是可以看作是2.1中的D,后2位可以看作是R。编码集的汉明距离是从两两码字之间的汉明距离值组成的集合中取最小值。该编码集的汉明距离为2,尽管0000和1111的汉明距离是4,但是最小的是0000和0101是2,因此取2。
然后再说一个定理:如果编码集的汉明距离为r+1,则该检错码百分百最多可以检测出r位的比特差错,大于r位的比特差错则不一定能检错了。原因很简单,因为小于等于r的比特位发生变化,也变不了编码集中任一其它码字。
2.纠错码
定理:如果编码集的汉明距离为2r+1,则该纠错码百分之百最多可以纠正r位的比特差错,大于r位的比特差错纠错就不一定准确了。原因很简单,如果传输过程中,一个码字A发生了r位比特差错变成了码字A`,那么A`与A码字的汉明距离是r,与其它码字的汉明距离至少是r+1,纠错码是按照最近的汉明距离进行纠错的,因此百分百能纠正回A,但如果发生了r+1位比特差错,那么与A的汉明距离是r+1,但可能与另一个码字B的距离是r,那就可能错误纠正为B了。
2.3 奇偶校验码
缺点是只有百分之五十的检错率,优点是检错算法简单,进行时间短。
2.4 校验和
注意:发送端计算时checksum字段看作是全0进行计算,接收端计算时就按照接收到的checksum字段计算。
2.5 循环冗余校验码(CRC)
循环冗余校验码是一个检错能力十分强大的校验码。其做法如下:
对于发送端:①发送端将数据比特部分D视为二进制数②选一个r+1位的二进制数G③将D左移r位得到D*2^r再除以G,得到的一个r位的余数就是R④最后发送方将D*2^r XOR R发送给接收方
对于接收方:接收方检错通过<D,R>除以G,余式全为0则无错,否则有错。
为什么余式会全为零呢?<D,R>=D*2^r+R,而R+nG=D*2^r,因此如果没错的话接收方<D,R>/G=D*2^r+(D*2^r-nG)=??
存在问题
3.多路访问控制(MAC)——广播链路控制
链路可以分为点对点链路和广播链路。
点对点链路:一个链路只连接两个相邻的结点,没有第三个结点与该链路相连,如拨号接入的PPP,以太网交换机与主机之间的双绞线联络。
广播共享链路:通信的物理介质是被共享的,如早期的总线结构的同轴电缆以太网,802.11无线局域网。
采用广播共享链路下的多个结点共享同一信道时同时进行传输,那么接收结点就会接收到多个信号,就会导致冲突则接收失败,就好比多个人同时讲话,接收方不知道声音是谁传出来的。多路访问控制协议就是为了解决这个问题而产生的。
3.1 MAC一般原则
①MAC在进行协调时不通过第三方结点协调,而是结点本身进行协调。也就是说当A和B都要说话时,就A和B协调,而不是让一个C进行协调。
②MAC在进行协调时也通过当前信道进行协调,不是通过第三方信道协调。也就是说A和B要协调时,就通过说话来协调,而不是通过写信来协调。
3.2 MAC分类
1.信道划分MAC协议
简介:通过第一章提到的多路复用技术进行信道划分,结点使用时使用属于自己的信道带宽。
TDMA协议:
FDMA协议:
2.随机访问MAC协议
简介:信道不划分,没有事先的结点协调机制,每个结点使用时使用信道的全部带宽,允许发生冲突,当多个结点同时传输时就会发生冲突,但有冲突恢复机制。
时隙ALOHA协议:
该协议有以下几个假设:①所有的数据帧大小相等②时间被划分为等长的时隙,每个时隙可以传输一个数据帧③结点只能在时隙的开始时刻发送数据④为了能够在时隙开始的时刻发送数据,结点间是时钟同步的⑤如果多个结点在同一时隙内发送数据,则会发送冲突
每个结点运行时工作如下:当结点有新的数据帧时,在下一时隙发送该帧,如果没有冲突,则结点可以在下下时隙继续发送新的数据帧,如果有冲突,则意味着该数据帧发送失败,则该结点在下一时隙以概率p决定要不要重发该数据帧,直至成功发送为止。
非时隙ALOHA协议:
CSMA协议:
上述两个ALOHA协议效率差的原因是,明明当别的结点已经在发送数据报了,这些结点还要发,导致冲突,损人不利己,延迟了别人也延迟了自己。而CSMA协议发现信道中有载波(即有人用信道),我就推迟发送。
由于发生冲突,因此后续的数据报也没用了,继续传也是浪费时间,因此有了CSMA/CD,一旦检测到冲突,则停止后续传输。而普通的CSMA一旦发送数据报,尽管检测到冲突,但还是会把数据报毫无意义地发完。
CSMA/CD协议:
CSMA/CD可以做到发送信号的同时还能监听信道,其特点就是“边发边听,不发不听”!一旦检测到传输过程中发送冲突,则停止后续传输。这种冲突检测对于有线网络来说较容易实现,有线网络可以测量我实际发出去的信号强度和目前信道中的信号强度,进行比较,如果目前信道中的信号强度变大,则说明出现冲突;对于无线网络较难实现,因为信号强度容易被淹没。所以一般都是有线网络实现该协议。
下面是一个例子: 主机A和B相距dmax距离,A此时发现信道空闲,然后发送数据,当信号马上到达B的时候,B此时也想发送数据,由于信号还没到B,B认为信道是空闲的,因此B也将数据发出去了,结果一发出去B就收到了A的信号,检测冲突然后停止后续传输,但是A此时还不知道冲突,直至B刚刚发送的一小段数据又经过dmax到达A,A才能检测冲突,因此在2dmax/V这段时间里,A需要一直监听信道,又由于csma/cd是不发不听,因此A此时还是要处于发送数据的情况,因此A发送数据帧所需要的时间L/R要大于等于2dmax/V,结果就有了上述式子。
例题:
CSMA/CD的效率:
tprop趋近于0说明一旦一个结点发出信号,则另一个结点能马上收到,因此会马上检测到信道忙,不会产生冲突,因此效率趋近于1。
3.轮转MAC协议
简介:通过某种机制让结点轮流使用信道,且使用时使用的全部带宽,不发生冲突。
轮询协议:
网络中有一个主结点,轮流邀请从属结点发送数据,一次只邀请一个从属结点,如果从属结点有数据,则让其占用全部带宽进行发送,如果没有数据则不发送数据。每个从属结点只有被轮询到时才有资格发送数据。轮询存在的问题是轮询存在开销,还有结点存在等待延迟问题,而且轮询到没有数据的从属结点则浪费了轮询时间,还存在单点故障问题,如果主结点寄了,就全寄了。
令牌传递协议:
每个结点要发送数据时必须要获取令牌才能发送数据,控制令牌依次从一个结点传递到下一个结点。令牌本质上就是一个特殊帧。该协议存在的问题是传令牌也要开销,还有结点存在等待延迟问题,也存在单点故障问题,拿令牌的那个主机突然寄了,那也就寄了。
3.3 MAC地址及ARP协议
1.MAC地址
MAC地址(又称LAN地址,物理地址(但其实不是物理层),以太网地址),用于局域网内标识一个帧从哪一个接口发出,到达哪一个物理相连的其他接口。
MAC地址一般是48位比特,固化在网卡的ROM中,有时也可以软件设置,但是修改后要保证MAC地址在局域网中唯一。表示法e.g.1A-2F-BB-76-09-AD。
局域网中每一个网卡都有唯一的一个MAC地址。
MAC地址和IP地址的比较。IP地址可以比作邮政地址,MAC地址可以比作身份证号,IP地址是层次地址,也就是说归属某个区域,某个子网,离开了这个子网这个IP地址便不起作用,而MAC地址是平面地址,无论到哪里,MAC地址总可以发挥作用且唯一,它可以从一个局域网迁移到另一个局域网仍起作用。MAC地址是由IEEE统一管理与分配的,每一个生产网卡的厂商都要去IEEE购买前24比特的MAC地址空间,后24比特则可以用于给它生产的网卡进行分配MAC地址。mac地址就好像个人的身份证号,人的身份证号和人户口所在的城市,出生的日期有关,但是和人所在的位置没有关系,人是会移动的,知道一个人的身份证号,并不能找到它这个人,mac地址类似,它是和设备的生产者,批次,日期之类的关联起来,知道一个设备的mac,并不能在网络中将数据发送给它,除非它和发送方的在同一个网络内。所以要实现机器之间的通信,我们还需要有ip地址的概念,ip地址表达的是当前机器在网络中的位置,类似于城市名+道路号+门牌号的概念。通过ip层的寻址,我们能知道按何种路径在全世界任意两台Internet上的的机器间传输数据。mac地址通常是不变的,ip地址是可变的,尤其是移动设备,ip地址会经常变更。
2.ARP协议
在同一个局域网内,如何在已知目的主机的IP地址的情况下确定其MAC地址?ARP协议起作用了。局域网中的每个结点(路由器、主机)都会维护各自的ARP表,表中映射IP和MAC的关系,其中还有个TTL,如<IP,MAC,TTL>,TTL存在是因为可能IP会被更换或者网卡会被更换,因此要更新表。
如果A想向同一局域网内的B发送数据报,A首先会在它的ARP表中检索B的IP地址对应的表项,如果发现表中没有,则会在局域网中广播B的查询分组,其中包含B的IP地址,目的MAC地址是FF-FF-FF-FF-FF-FF,局域网中的所有结点都会收到该查询,如果其它结点都没有找到,直到B收到了该查询分组,则会利用单播向A应答B的MAC地址,A在其ARP表中添加该表项,直至超时再次刷新。结点自主创建ARP表,无需人为干预。
再看看以下场景,即A和B不在同一局域网内的场景。A已知B的ip地址,且A知道R左侧的接口IP地址(通过默认网关知道),且A知道R左侧的MAC地址(在同一局域网内那就知道了呗),则A先构造IP数据报,源地址是A的ip地址,目的地址是B的ip地址,然后构造链路层帧,源MAC地址是A的MAC地址,目的MAC地址是R左侧的MAC地址,帧从A发送到R,R接收帧,提取IP数据报,传递给上层IP协议,R网络层转发数据报,转到R右边的接口中来,然后R创建链路层帧,其中源MAC地址是R右侧的MAC地址,目的MAC地址是B的MAC地址,B收到帧后就一层层往上提取。
4.以太网
4.1 简介
以太网使用的CSMA/CD,CSMA/CD在网卡完成。冲突域指的是同一时间内只能有一台设备发送信息的范围。现在流行的是星形以太网,每个结点一个单独冲突域,因此不会产生冲突。以太网提供的服务是不可靠(没有确认机制,接受网卡不向发送网卡进行确认)、无连接(发送帧的网卡与接收帧的网卡没有握手过程)的服务,差错帧直接丢弃,丢弃帧中的数据恢复依靠高层协议。由于以太网是用于局域网内,所以发生误码率并不大。
4.2 以太网的CSMA/CD算法
4.3 以太网帧的结构
①前导码。前导码(8B)的作用是用于发送网卡和接受网卡之间的时钟同步,类似于喊口令一二一、一二一。在讨论以太网帧大小时一般不算前导码。
②目的MAC地址和源MAC地址和类型和数据和CRC。为什么数据要至少46个字节呢?因为CSMA/CD协议要控制发送数据帧所需要的时间L/R要大于等于2dmax/V。
5.交换机
集线器、交换机、路由器、网桥、网关之间的区别 - Imapla - 博客园
交换机是链路层设备,其功能是存储和转发以太网帧,通过检验到达帧的目的MAC地址,选择性地向一个或多个输出链路转发帧,通过CSMA/CD访问链路发送帧。它是透明的,即主机感知不到交换机的存在,是自学习的,无需配置,即插即用。
如今交换机一般采用的是星型交换机(如下图所示),主机利用独享链路直接连接交换机,交换机在每段链路上利用CSMA/CD首发帧,但是没有冲突(因为每段链路是一个独立的冲突域),而且可以全双工。图中A-A`与B-B`的传输可以同时进行,没有冲突。
交换表。每个交换机有一个交换表,其表项如(目的主机MAC地址,到达主机的接口,时间戳),与路由表类似。但是其生成算法与路由表差异巨大,交换机获取交换表是通过自学习获知到达某个主机的接口信息的,其学习过程如下:当交换机收到来自主机A的帧时,交换机就可以获知主机A的MAC地址,同时又知道它是从哪个接口传来的帧,因此交换机就可以将主机A的MAC地址和接口信息记录到交换表中。
帧过滤/转发。当交换机收到数据帧时,首先它可以学习(即记录帧的源MAC地址和其对应的输入链路的接口),然后它根据数据帧中的目的MAC地址检索交换表,如果检索到了交换表中有与其对应的接口,再进行一次判断,如果该接口和原来的输入接口相同,那么交换机就会丢弃帧(因为会认为二者可以直接交换,无需经过交换机),如果不同,那么就将帧转发到交换表中对应的输出接口。如果在交换表中根本没检索到与目的MAC地址匹配的接口,则交换机就会采取泛洪手段,即将该数据帧转发到除了发送方的输入接口之外的所有接口。
交换机互联。用的同样是自学习。
路由器和交换机。
路由器可以起到划分广播域的功能,交换机可以起到划分冲突域的功能,集线器不能划分冲突域。一个广播域可以对应一个子网,但是一个子网并不一定能够对应一个广播域,因为一个子网可能有多个路由器。广播域就是没有第三层设备的地方,即一个最小子网(只有一个路由器)能够广播到的地方。冲突域就是任意两个节点同时发送信号会冲突的地方。
如何分割冲突域?用第二层设备替换第一层设备。
如何分割广播域?用第三层设备替换第二层设备或者VLAN。
二者共同点:①二者均为存储-转发设备;②二者均使用转发表。
二者不同点:①路由器是网络层设备,它进行存储转发时检测网络层的分组首部,交换机是链路层设备,它进行存储转发时检测链路层的分组首部。②路由器的转发表是利用路由算法计算,交换机的转发表是自学习。③路由器工作是位于交换机之上的,交换机只是作用于局域网,路由器用于连接局域网和外网,交换机用于局域网内网的数据转发。我们每个人相当于主机,路由器相当于快递员,快递员只负责把快递送到学校的快递站点。由于疫情隔离,同学们被封校在内,而快递站点负责把快递发送给同学们,快递站点相当于交换机,学校是一个局域网。快递员根据学校地址(IP)把包裹送到学校的快递站点,快递站点根据同学们的名字将快递送到同学们手上。④路由器可以隔离广播域,交换机不可以。
6.虚拟局域网(VLAN)
6.1 提出背景
①希望将该子网内的广播域分隔开,即CS广播则只在CS那一块,而不是广播整个子网(因为交换机没有隔离广播功能,因此一般在子网内是会广播整个子网)。②或者一个CS的同学来到了EE区域,但他想连接的是CS的交换机。
6.2 划分方法
1.基于端口的VLAN
6.3 VLAN的好处
①流量隔离:假设如上图划分,则去往/来自端口1-8的帧只能到达端口1-8,达到了隔离广播域的作用。②方便灵活:VLAN是通过软件层面实现的,因此端口可以动态分配给不同VLAN,比如CS和EE两个区域有两台交换机,CS交换机被虚拟划分成了1-8端口为逻辑上的CS交换机,9-15端口被划分为了逻辑上的EE交换机,EE交换机被虚拟化分成1-8端口为逻辑上的CS交换机, 9-15端口被划分为了逻辑上的EE交换机。因此当一个CS的同学到达了EE处,也可以物理上连接EE的交换机,但逻辑上是CS的交换机。
6.4 问题
①在VLAN间如何进行转发呢?在VLAN之间进行转发则通过路由器进行。
②如何在不同物理交换机上的同一VLAN进行转发呢(如6.3的②)?第一种办法是通过线缆连接,物理上将逻辑交换机连接起来,不方便;第二种办法是设置中继端口,中继端口是共用的VLAN,为了区别转发时是哪一个VLAN,因此需要在转发的帧种增加额外的首部域。
7.PPP协议——点对点链路控制
【深度好文】