当前位置: 首页 > article >正文

CAN201 Introduction to Networking(计算机网络)Pt.4 链路层

文章目录

  • 5. Link Layer(链路层)
    • 5.1 Services of link layer(链路层的服务)
    • 5.2 Error detection and correction(错误检测和纠正)
      • 5.2.1 Partity Checks(奇偶检验)
      • 5.2.2 Checksum(检验和)
      • 5.2.3 Cyclic redundancy check(CRC,循环冗余检验)
    • 5.3 Multiple access protocols(多址接入协议)
      • 5.3.1 TDMA(时分协议)
      • 5.3.2 FDMA(频分多址)
      • 5.3.3 CSMA(carrier sense multiple access,载波侦听多址)
      • 5.3.4 “Taking turns”(轮询)
        • 5.3.4.1 Polling(轮询)
        • 5.3.4.2 Token passing(令牌传递)
      • 5.3.5 Summary of MAC protocols
    • 5.4 MAC address and ARP(MAC地址和ARP地址解析协议)
      • 5.4.1 MAC address(MAC地址)
      • 5.4.2 ARP(address resolution protocol,地址解析协议)
    • 5.5 Ethernet(以太网)
      • 5.5.1 Ethernet’s physical topology(以太网的物理拓扑结构)
      • 5.5.2 Ethernet frame structure(以太网帧结构)
      • 5.5.3 Ethernet’s characteristic(以太网的特性)
      • 5.5.4 802.3 Ethernet standards(802.3以太网标准)
    • 5.6 Switches(交换机)
      • 5.6.1 Switch(forwarding)table(交互及表/转发表)
      • 5.6.2 Self-learning(自我学习功能)
    • 5.7 VLANs(Virtual Local Area Network,虚拟局域网)
    • 5.8 Data center networking(数据中心网络)

5. Link Layer(链路层)

5.1 Services of link layer(链路层的服务)

数据链路层(数据链路层也就是链路层)负责将datagram(数据报)通过link(链路)从一个节点传输到另一个节点。
数据链路层处理的是直接相连的两个节点之间的数据传输。
链路是连接相邻节点的通信通道。它可以是有线的(如以太网电缆)或无线的(如Wi-Fi)。
链路层的数据单元称为frame(帧),它包含了控制信息,如帧同步、地址字段、差错控制等。链路层在传输数据报之前,会将其封装在帧中,这一步叫Framing。
1.Framing,在这个过程中,数据报被添加了头部和尾部信息,这些包括了一些控制字段,以及用于错误检测和纠正的校验信息。不同的数据链路层协议可能会有不同的帧格式。
2.Link access(链路接入),在数据链路层,使用MAC协议来控制设备在共享介质上的数据传输。网络中连接设备的方式有:点对点连接和广播链接。
点对点连接是指两个设备之间的直接连接,而广播链接是指多个设备连接到同一个介质上。
数据链路层的帧中使用MAC地址来唯一标识源设备和目标设备。
MAC地址用于在链路层唯一标识设备,而IP地址用于在网络层唯一标识设备。
3.Reliable delivery(RD,可靠交付),指数据链路层提供的一种保证数据帧能够在通信过程中可靠地被传输和接收的服务。在低比特错误率的链路上,可靠交付很少被使用,因为数据很少会因为传输错误而丢失。而在高误码率的无线链路上,可靠交付通常会被使用,以确保数据能够成功地传输到目标设备。
4.Error detection and correction(错误检测和纠正),指数据链路层对传输过程中可能出现的错误进行检测和纠正。这包括了使用校验和和纠错码等技术来检测和纠正数据帧中的错误。
Signal attenuation(信号衰减)和noise(噪声)是导致数据传输中出现错误的常见原因。
当接收方检测到数据帧中存在错误时,它可以选择retransmission(重新发送请求)或者尝试进行correction(纠错)来修复错误。
Correction(纠错)是指在不重新发送数据帧的情况下,通过纠错码等技术来修复数据帧中的比特错误。

如果我们接着前面的物流快递的例子。转发是物流快递公司(网络层)将包裹从一个物流中心转移到另一个物流中心的过程,而这个过程具体就是实现这一步,它像一个运输司机,将包裹(数据,对于链路层是帧)从一个节点运送到下一个节点。

链路层通常是在网络adaptor(适配器)(如以太网卡、Wifi 802.11卡)或芯片组上上实现的。这些适配器或芯片组被连接到主机系统的总线上(如主板上的总线,如USB、PCI(外部设备互联)、Thunderbolt(雷电接口)等),并通过硬件、软件和固件(嵌入式软件)来实现链路层和物理层的功能。
在这里插入图片描述
Adaptor(适配器)实现rdt(Reliable Data Transfer Protocol,可靠数据传输协议)来发送和接受datagram(数据报)的流程如下:
Sending side(发送端):
将数据报封装在帧中并添加error checking bits(错误检查位)、rdt、flow control(流量控制)等。

Receiving side(接收端):适配器在接收到帧后,会检查错误检查位以确定数据是否在传输过程中被损坏,同时检查rdt和流量控制等信息。
一旦确认数据无误,接收端的适配器会从帧中提取数据报,并将其传递给网络层,以便进一步处理。
在这里插入图片描述

5.2 Error detection and correction(错误检测和纠正)

D代表受错误检查保护的数据,包括头部信息。这也意味着数据和头部信息都通过错误检查来确保其完整性。
EDC(Error Detction and Correction bits,错误检测和纠正位),这些位是添加到数据中的冗余信息,用于检测和纠正错误。
错误检测不是100%可靠的。协议可能会错过一些错误,但这种情况很少发生。
更大的EDC字段(更复杂的)可以提供更好的检测和纠正能力,但也可能带来一些问题,比如增加数据量和处理复杂性。
在这里插入图片描述
图中bit-error prone link指的是在数据传输过程中容易发生比特错误的通信链路。数据包在发送前加上头部信息封装为一个帧,传输结束后,会利用EDC进行检测,如果"D’"中的所有位都正确,那么没有检测到错误。如果"D’"中的位不正确,那么detected error(检测到错误)。

错误的三种技术如下:
1.Parity Checks(奇偶检验):奇偶校验是一种简单的错误检测技术,它通过检查数据中1的个数来确定数据中是否存在奇数个1或偶数个1。如果系统使用偶校验,那么数据被设置为包含偶数个1;如果系统使用奇校验,那么数据被设置为包含奇数个1。通过这种方式,接收方可以检测出数据传输过程中是否发生了单个位的错误(因为比如两个或多个位的错误,奇偶检验就无法发现)。
2.Check sums(检验和):这是一种在传输层使用的错误检测技术,它通过对数据包中的所有数据进行求和计算,然后将结果附加到数据包中。接收方在接收数据包后,也会进行相同的求和计算,并将结果与附加的校验和进行比较,从而检测出数据传输过程中是否发生了错误。
3.Cyclic Redundancy Checks(CRC,循环冗余校验):这是一种在链路层中适配器中使用的错误检测技术,它通过对数据进行多项式除法运算来生成冗余校验码,并将其附加到数据中。接收方在接收数据后,也会进行相同的多项式除法运算,然后将结果与附加的冗余校验码进行比较,从而检测出数据传输过程中是否发生了错误。

5.2.1 Partity Checks(奇偶检验)

它通过在传输的数据中添加一个额外的比特位来实现。这个额外的比特位被用来确保传输的数据中包含的“1”的总数(包括额外的比特位)是偶数或奇数。这样,接收方可以通过检查数据中包含的“1”的总数来判断数据中是否存在单比特错误。
在这里插入图片描述
2D parity checking(二维奇偶检验)
二维偶校验是一种在两个维度上应用奇偶校验的方法。它不仅对每一行的数据应用奇偶校验,还对每一列的数据应用奇偶校验
在这里插入图片描述
下图展示了一个二维偶检验的例子:
在这里插入图片描述
我们可以发现一维奇偶检验只能检测错误的存在但是无法确定错误发生的具体位置,但是二维奇偶检测可以检测错误的存在的同时确定错误发生的具体位置。

5.2.2 Checksum(检验和)

校验和的目标是在传输的数据段中检测出“错误”。
发送方将数据段(包括头部)分割成16位的整数,并对其进行处理。发送方计算这些16位整数的一补码和,得到校验和值,计算出的校验和被放入数据段的校验和字段中,然后数据段被发送。
接收方对接收到的数据段再次进行校验和的计算。检查计算出的校验和是否等于校验和字段值。如果计算出的校验和与接收到的校验和字段值不匹配,那么认为数据在传输过程中发生了错误。如果校验和匹配,通常认为数据没有错误。但是,校验和并不能保证100%的错误检测率,因为存在极小的概率两个不同的数据段可能产生相同的校验和值(碰撞),这被称为校验和的“碰撞”。
在TCP和UDP协议中,互联网校验和计算包括所有字段(包括头部和数据字段)。在IP中,校验和仅计算IP头部,因为UDP或TCP段有其自己的校验和。
下面的例子与前文一致。
在这里插入图片描述

5.2.3 Cyclic redundancy check(CRC,循环冗余检验)

这是一种更强大的错误检测编码,广泛应用于实际中,例如以太网、802.11 WiFi和ATM等通信协议中。
在CRC计算中,所有的计算都是在modulo-2(模2)算术中进行的,这意味着在加法中没有进位,减法中没有借位。
模2算术包括以下几种操作:加法、减法、Bitwise exclusive-or(XOR,按位异或)。
异或运算是一种逻辑运算,其结果为1的条件是两个操作数不相等时,否则结果为0。
因此在模2运算下,有以下例子:
1011 + 0101 = 1110 1011+0101=1110 1011+0101=1110
1011 − 0101 = 1110 1011-0101=1110 10110101=1110
1011   X O R   0101 = 1110 1011 \ XOR \ 0101=1110 1011 XOR 0101=1110

下面讲解CRC的具体计算过程:
1.将数据位D视为一个二进制数。
2.选择一个r+1位的模式作为生成器G,这个模式由发送方和接收方共同约定。生成器多项式G是预先确定的,并且发送方和接收方都已知。G的最显著位(即最高位)必须是1。
3.找到r位的CRC位(余数)R,使得数据位D和CRC位R组合成的d+r位模式能够被G整除。
这步的细节将由后续的例子展示。
4.接收方知道生成器G,并使用它来除以接收到的<D, R>模式。
如果除法的结果有余数,那么表示检测到了错误。

因此数据组成的方式如下:
在这里插入图片描述
下面的数学形式可以理解成数据位D左移r位后加上了长度为r位的余数R。

例子如下:如果多项式 R = x 3 + 1 R=x^3+1 R=x3+1,根据多项式的系数我们可以的到除数 R R R 1001 1001 1001,然后我们将袁术数据补上一定数量的0,0的数量又多项式阶数决定,因为是3次方所以加3个0。我们现在对数据 D D D做模2除法或者每次拿出与 R R R相同位数的数进行 X O R XOR XOR计算。
D = 101110 D=101110 D=101110所以第一次我们进行计算 1011   X O R   1001 = 0010 1011 \ XOR \ 1001 = 0010 1011 XOR 1001=0010去掉前面的 0 0 0我们将剩余的 10 10 10补上 10 10 10然后计算 1010   X O R   1001 = 0011 1010 \ XOR \ 1001 = 0011 1010 XOR 1001=0011去掉前面的 0 0 0我们将剩余的 11 11 11补上 00 00 00然后计算 1100   X O R   1001 = 0101 1100 \ XOR \ 1001 = 0101 1100 XOR 1001=0101去掉前面的 0 0 0我们将剩余的 101 101 101补上最后的一个 0 0 0然后计算 1010   X O R   1001 = 0011 1010 \ XOR \ 1001 = 0011 1010 XOR 1001=0011
因为我们刚刚补了3个0,这个地方我们就要补充3位作为 R R R所以最后的数据是 101110011 101110011 101110011
我们将这个数用上面的方法进行计算就会发现余数现在是0,这也就说明数据传输没有问题。如果有余数,那就说明数据在传输过程中可能发生了错误。
下图是用除法的方式进行的计算。
在这里插入图片描述
所以 D ∗ 2 r   X O R   R = n G D * 2 ^ r \ XOR \ R = nG D2r XOR R=nG
因此R位的计算方式用数学表达式为 R = r e m a i n d e r [ D ∗ 2 r / G ] R = remainder[D*2^r/G] R=remainder[D2r/G]
下面的视频也解释了CRC这部分的计算:[CRC校验]手算与直观演示

那么R值是哪里来的呢?在不同的通信协议或系统中,通常会有默认规定的CRC多项式值。下图展示了一些CRC标准,对应的多项式,十六进制,以及用途。在这里插入图片描述

5.3 Multiple access protocols(多址接入协议)

前面我们说过链接的方式有两种:Point to point(点对点链接)和Broadcast(广播链接)。
Point to point(点对点链接)中有:
PPP(Point-to-Point Protocol):用于建立点对点链接的通信协议,通常用于拨号接入(dial-up access)等场景。
PPPoE(Point-to-Point Protocol over Ethernet):是一种在以太网上传输PPP帧的协议,通常用于在以太网上建立点对点链接,例如在宽带接入中。

Broadcast(广播链接)是广播式的共享传输介质。例如:
Old-fashioned Ethernet(旧式以太网技术),它使用广播式的传输介质,所有连接到同一网络的设备都可以接收到发送到网络的数据包。这种方式在现代网络中仍然被广泛使用。
Upstream HFC指的是有线电视网络中的上行信号传输,HFC 是 Hybrid Fiber-Coax(混合光纤同轴)的缩写,它使用同轴电缆作为传输介质。在HFC网络中,上行信号是从用户设备发送到网络中心的信号。
WLAN-802.11指的是无线局域网技术,其中802.11是无线局域网协议的标准编号。802.11协议允许无线设备通过共享的无线传输介质进行通信。
在这里插入图片描述
在Multiple access protocols(多址接入协议)中,多个节点共享同一个广播信道进行通信。如果多个节点simultaneously(同时)发送数据,它们的信号会相互interference(干扰),导致接收节点可能无法正确解码和处理这些信号。
如果一个节点在同一时间接收到两个或更多个信号,这些信号会相互干扰并导致collision(冲突)。在发生冲突时,不同信号的数据帧会混在一起,变得无法区分,所有涉及到冲突的数据帧都会丢失,而且整个广播信道在冲突期间都无法有效利用。
所以Multiple access protocols(多址接入协议)确定了一种分布式算法,用于确定各个节点如何共享通信信道,即确定节点何时可以发送数据。
通信信道共享的协调工作必须使用通信信道本身进行。这意味着没有专门的信道用于节点之间的协调和通信。

因此理想的Multiple access protocols(多址接入协议)应该满足(假设:广播信道的传输速率为R bps)
1.当只有一个节点需要发送数据时,它可以以信道速率 R 发送数据,即它可以充分利用整个信道的带宽。
2.当有M个节点需要发送数据时,每个节点可以以平均速率 R/M (instantaneous瞬时的)发送数据。
3.这种协议是fully decentralized(完全分散的),不需要特殊的节点来coordinate(协调)传输,也不需要进行synchronization(时钟同步)或时间槽的分配。这种特性使得协议更加灵活和适用于各种环境。
4.简单且成本低廉的,易于实现和部署。

MAC 协议分类涉及到三种广泛的类别:channel partitioning(信道划分)、random access(随机接入)、“taking turns”(轮询)。
1.Channel partitioning(信道划分):信道划分类的MAC协议将整个通信信道划分为更小的“片段”(如时间槽、频率或码),然后将这些片段分配给节点进行独占使用。这种方法可以有效地避免碰撞,因为每个节点在分配的时间、频率或码上独立进行通信。常见的信道划分协议包括TDMA(时分多址)和FDMA(频分多址)。
2.Random access(随机接入):随机接入类的MAC协议不对通信信道进行划分,允许节点之间发生碰撞。在发生碰撞后,协议需要采取措施来“恢复”从碰撞中恢复出有效的数据。这种方法通常用于低负载和不需要严格时间同步的环境中。常见的随机接入协议包括Slotted ALOHA,ALOHA,CSMA(载波侦听多址)和其变种,如CSMA/CD和CSMA/CA。
Slotted ALOHA将时间划分为时隙,并要求节点只能在时隙开始时发送数据。如果发生碰撞,节点会在稍后的时隙中进行重传。
ALOHA是早期的随机接入协议,它允许节点在任何时间发送数据,但可能会导致碰撞。如果发生碰撞,节点会在随机的时间进行重传。
3.“Taking turns”(轮询):轮询类的 MAC 协议让节点按照一定的顺序轮流发送数据,而且节点发送数据的时间长度可以根据节点需要发送的数据量来调整。这种方法通常用于有中央控制节点的网络环境中,如蓝牙网络中的轮询方式。

5.3.1 TDMA(时分协议)

TDMA(时分多址)是channel partitioning(信道划分)MAC协议的一种。
在TDMA中,通信信道被划分为一系列固定长度的时间槽,每个时间槽都被分配给网络中的不同站点或节点进行独占使用。
通信信道被划分为一系列rounds(轮次),每个轮次包含了一系列固定长度的时间槽。
在每个轮次中,每个站点或节点都被分配一个固定长度的时间槽,这个时间槽的长度通常等于一个数据包的传输时间。
如果某个站点或节点没有数据需要发送,那么它被分配的时间槽就会空闲下来,不会被使用。
例子如下图所示。
在这里插入图片描述
这是一个包含6个站点的局域网,其中第1、3和4号站点有数据包需要发送,而2、5和6号站点没有数据需要发送,所以是空闲。

5.3.2 FDMA(频分多址)

FDMA(频分多址)也是channel partitioning(信道划分)MAC协议的一种。
在FDMA中,通信信道的频谱被划分为多个不同的频率带,每个频率带被分配给网络中的不同站点或节点进行独占使用。
如果某个站点或节点没有数据需要发送,那么它被分配的频率带就会处于空闲状态,不会被使用。
例子如下图所示。
在这里插入图片描述
这是一个包含6个站点的局域网,其中第1、3和4号站点有数据包需要发送,而2、5和6号站点没有数据需要发送,所以频率带2、5、6是空闲状态。

5.3.3 CSMA(carrier sense multiple access,载波侦听多址)

节点在发送数据前会先侦听信道,以检测信道是否处于空闲状态或忙碌状态:
如果信道被侦听到为空闲状态,节点会立即发送整个数据帧。
如果信道被侦听到为忙碌状态,节点会选择延迟发送数据,以避免与其他节点的数据发生碰撞。
这就像我们在生活中,在发言前会先倾听,如果发现其他人正在说话,就等待合适的时机再发言,以避免造成混乱或干扰。

5.3.4 “Taking turns”(轮询)

Channel partitioning只能实现在高负载时表现优异,而Random access只能实现在低负载时表现优异。“Taking turns”可以做到在高负载时高效而公平地共享通信信道,并在低负载时保持高效率。

5.3.4.1 Polling(轮询)

Master node(主节点)负责“邀请”slave node(从节点)依次传输数据。通常情况下,被邀请的从节点会依次回应主节点的邀请,并在其所分配的时间内传输数据。
然而,这也会存在一些缺点:
Polling overhead(轮询开销):轮询方式需要主节点不断地发送邀请信号,并等待从节点的回应,这会增加通信的开销和延迟。
Single point of failure(单点故障):在轮询方式中,主节点是整个通信过程中的中心节点,如果主节点出现故障,整个通信系统将受到影响。
在这里插入图片描述

5.3.4.2 Token passing(令牌传递)

控制令牌按顺序从一个节点传递到下一个节点。持有令牌的节点有权在其持有期间进行数据传输。一旦数据传输完成,该节点将把令牌传递给下一个节点。
然而,这也会存在一些缺点:
Token overhead(令牌开销):维护和传递令牌本身会产生一定的通信开销。
Node crashes/fails to release token(节点崩溃/未释放令牌):如果持有令牌的节点发生故障或未能正确释放令牌,可能会导致通信中断或资源浪费。
在这里插入图片描述

5.3.5 Summary of MAC protocols

Channel partitioning(通道划分):通过时间、频率或码分多址进行通道划分。
应用包括TDMA、FDMA。

Random access(随机接入):采用动态方式进行接入,包括ALOHA、S-ALOHA、CSMA、CSMA/CD等协议。
载波感知:在某些技术(如有线通信)中比较容易实现,但在其他技术(如无线通信)中则较为困难。
CSMA/CD:在以太网中使用的一种随机接入协议。
CSMA/CA:在802.11中使用的一种随机接入协议。

轮询方式:通过中央站点进行轮询或令牌传递的方式进行通信。
应用包括蓝牙、FDDI、token ring。

5.4 MAC address and ARP(MAC地址和ARP地址解析协议)

5.4.1 MAC address(MAC地址)

IP地址:IP地址是用于在网络中唯一标识主机或设备的地址,分为IPv4(32位)和IPv6(128位)两种格式。应用于网络层的数据包forwarding(转发)。
MAC地址:MAC地址是用于在局域网(LAN)中唯一标识网络设备的地址,通常由48位二进制数字表示,也可以用12-34-56-78-90-AB这样的十六进制表示,每个“数字”代表4位二进制数。MAC地址通常由NIC(Network Interface Card,网络接口卡)的ROM中固化,用于在局域网中将数据帧从一个物理连接的接口传输到另一个物理连接的接口(在IP地址的意义下,指的是在同一个网络中传输)。

局域网上的每个网络适配器都有唯一的局域网地址。
因此可以确保在局域网上每个设备都有自己独特的标识,避免了地址冲突和混乱。
在这里插入图片描述
MAC地址分配由IEEE进行管理,制造商购买MAC地址空间的一部分来确保唯一性。MAC地址是flat(扁平的),这意味着它具有portability(可移植性),可以将网络适配器从一个局域网移动到另一个局域网。这使得设备可以在不同的网络环境中使用,而不需要更改其MAC地址。
相比之下,IP地址是层次化的,并且不具备可移植性。IP地址取决于节点所连接的IP子网,因此当节点移动到不同的子网时,其IP地址可能会发生变化。

我们再用生活的例子进行一个类比:MAC地址就像身份证或护照号码,是唯一且具有全球唯一性的标识。而IP地址则类似于邮政地址,它表示了设备在网络中的位置,但可能会随着设备的移动而发生变化。

5.4.2 ARP(address resolution protocol,地址解析协议)

我们可以使用ARP将已知的IP协议解析为对应的MAC地址。
ARP表是每个局域网节点(主机、路由器)上的表格,其中包含了IP地址到MAC地址的映射关系。每个条目包含了一个IP地址、对应的MAC地址以及TTL(Time To Live,存活时间),TTL表示地址映射会在多长时间后被删除,通常是20分钟。
条目格式如下: < IP address; MAC address; TTL>。
注意:ARP表并不一定包含子网上每个主机和路由器的条目;有些可能从未被输入到表中,而其他一些可能已经过期。
在这里插入图片描述
在同一局域网中进行ARP协议的转发过程如下:
1.当设备A需要向设备B发送数据报时,如果设备A的ARP表中没有设备B的MAC地址,设备A会广播一个ARP查询数据包,其中包含了设备B的IP地址。ARP查询数据包的目标MAC地址被设置为广播地址(FF-FF-FF-FF-FF-FF),这样所有局域网上的节点都会接收到这个ARP查询。
2.设备B接收到ARP查询数据包后,会回复一个包含自己MAC地址的ARP应答数据包,这个数据包会以单播方式发送到设备A的MAC地址。
3.设备A收到来自设备B的ARP应答后,会将设备B的IP地址和MAC地址的映射关系保存到自己的ARP表中,一直到ARP表中的条目随着时间的推移而过期。
ARP表中的条目是一种“软状态”,意味着它们会随着时间的推移而过期,除非被刷新或更新。
ARP协议是“即插即用”的,网络中的节点可以自动创建它们的ARP表,而无需网络管理员的干预。

下图给出了一个两个局域网通过路由器R进行数据传递的例子。
在这里插入图片描述
A知道B的IP地址,这是数据传输的目的地。
A知道第一跳路由器R的IP地址,这通常是通过静态配置或者动态路由协议(如DHCP)获得的。
A知道R的MAC地址,这通常是通过ARP(地址解析协议)获得的。当A需要发送数据给R时,它会在局域网内广播一个ARP请求,询问“谁是111.111.111.110?”,R会响应并告知其MAC地址。
R获得B的MAC地址的过程类似。当R接收到来自A的数据报,需要转发给B时,它会在B所在的局域网内发送ARP请求,询问“谁是222.222.222.222?”,B会响应并告知其MAC地址。

5.5 Ethernet(以太网)

Ethernet是一种主要的有线局域网技术,它可以通过单一的芯片实现多种传输速度,包括10Mbps、100Mbps、1Gbps和10Gbps等不同的速率。它是第一个广泛使用的局域网技术。以太网技术相对来说比较简单且成本较低。
在这里插入图片描述

5.5.1 Ethernet’s physical topology(以太网的物理拓扑结构)

以太网的物理拓扑结构包括Bus(总线型)和Star(星型)拓扑。
Bus(总线型)拓扑:
在90年代中期之前,总线型拓扑是一种流行的以太网物理拓扑结构。在总线型拓扑中,所有的节点都连接到同一条总线上,它们处于同一个冲突域中(可以相互发生碰撞)。这意味着当两个节点同时发送数据时,它们的数据包可能会发生碰撞,需要进行冲突检测和处理。
在这里插入图片描述
Star(星型)拓扑:
目前较为流行的是星型拓扑。在星型拓扑中,有一个中心的活动交换机,而每个连接到交换机的节点都形成一个"辐射"状的结构。每个"辐射"上运行着独立的以太网协议,节点之间不会相互发生碰撞。
在这里插入图片描述

5.5.2 Ethernet frame structure(以太网帧结构)

发送适配器(也称为发送端)将IP数据报(或其他网络层协议数据包)封装在以太网帧中。格式如下:
在这里插入图片描述
preamble(前导码):8字节长,由7字节的10101010模式后跟1字节的10101011模式组成。preamble(前导码)用于synchronize(同步)接收器和发送器的时钟速率,确保数据能够被正确地解码。
addresses(地址):包含了6字节的源MAC地址和6字节的目的MAC地址。当适配器接收到帧时,它会检查目的MAC地址是否与自身的MAC地址匹配,如果匹配或者是广播地址(例如ARP数据包),适配器会将帧中的数据传递给网络层协议进行处理。否则,适配器会丢弃该帧。
type(类型字段):用来指示帧中携带的数据使用的是哪种高层协议,通常是IP协议,但也可能是其他协议,如Novell IPX、AppleTalk等。
CRC:CRC(循环冗余校验)字段用于在接收端进行错误检测。接收端会对接收到的帧进行CRC校验,如果发现错误,就会丢弃该帧。

5.5.3 Ethernet’s characteristic(以太网的特性)

Connectionless(无连接性):以太网是一种无连接的协议,发送端和接收端的网络接口卡(NIC)之间没有握手过程。
Unreliable(不可靠性):以太网是一种不可靠的协议,接收端的NIC不会发送确认(ACK)或否定确认(NACK)给发送端的NIC。如果数据在传输过程中丢失,接收端不会通知发送端,丢失的数据只有在初始发送方使用更高层的可靠数据传输协议(例如TCP)时才能够得到恢复,否则丢失的数据将无法被恢复。
以太网的MAC协议:以太网使用的是非时隙的(CSMA/CD)协议,当发送数据时,NIC首先监听信道是否空闲,如果空闲则发送数据,如果检测到碰撞,则采用binary backoff(二进制指数退避算法)进行重传。

5.5.4 802.3 Ethernet standards(802.3以太网标准)

802.3 Ethernet standards(802.3以太网标准)定义了以太网在链路层和物理层的操作。
存在许多不同的以太网标准,它们在速度和物理介质上有所不同。尽管存在多种标准,但它们共享相同的介质访问控制(MAC)协议和帧格式。这意味着不同速度和介质的以太网设备可以在同一网络上互操作。
以太网支持多种速度,包括2 Mbps, 10 Mbps, 100 Mbps (Fast Ethernet), 1 Gbps (Gigabit Ethernet), 10 Gbps (10 Gigabit Ethernet), 和 40 Gbps (40 Gigabit Ethernet)。
以太网可以在不同的物理介质上运行,包括fiber(光纤)和cable(铜缆)。

下图列出了几种100 Mbps的以太网物理层标准。
在这里插入图片描述
100BASE-TX:使用双绞线,最常用于局域网。
100BASE-T2:使用双绞线,但较少使用。
100BASE-FX:使用多模光纤。
100BASE-SX:使用单模光纤,通常用于短距离传输。
100BASE-BX:使用单模光纤,通常用于长距离传输。
100BASE-T4:使用四对双绞线,较少使用。

5.6 Switches(交换机)

Switch(交换机)是链路层设备,它在网络中起着主动作用。
交换机能够存储和转发以太网帧,它会检查传入帧的MAC地址,并根据目的地址选择性地将帧转发到一个或多个输出链路上。当帧需要在特定段上转发时,交换机会使用CSMA/CD协议来访问段/链路。
交换机是transparent(透明的),主机对其存在毫无察觉。
交换机是plug-and-play(即插即用的),并且具备self-learning(自学习能力)。它们能够自动学习网络中各个设备的MAC地址,并根据需要建立转发表,从而实现数据的有效转发,因此不需要进行额外的设置。

交换机允许多个主机simultaneous(同时)进行数据传输。
每个主机都有专用的直连链路到交换机,因此每个主机通信不会受到其他主机通信的影响。每个链路都成为了独立的碰撞域。
交换机可以缓存数据包,以便在需要时进行转发,这有助于提高数据传输的效率。
在每个传入的链路上使用以太网协议,但是由于采用了full duplex(全双工传输),所以不会发生碰撞。传统的half duplex(半双工模式)下,数据的发送和接收是在同一条链路上进行的,这可能导致碰撞的发生。而在全双工模式下,发送和接收是在不同的频谱上同时进行的,因此不会发生碰撞。
如图所示。
在这里插入图片描述
主机A到A’和主机B到B’可以同时进行数据传输,而不会发生碰撞。

5.6.1 Switch(forwarding)table(交互及表/转发表)

每一个交换机里有switch table(交换机表),交换机表里存着entries(表项),每个entry(表项)包含了MAC地址、指向该MAC地址的交换机接口以及该表项被创建的time stamp(时间戳)。些内容看起来像是路由表。
通过这样的方式,交换机就知道某个主机可以通过哪一个接口访问。

5.6.2 Self-learning(自我学习功能)

那交换机表里的表项怎么来的呢?它又如何维护呢?
这是依靠交换机的self-learning(自我学习)实现的。
当交换机接收到数据帧时,它会学习到发送者的MAC地址和相应的接口位置,并将这些信息记录在交换机表中。
对于交换机表中的条目,如果在一段时间内没有收到特定MAC地址的数据帧,这些条目会根据预先配置的超时时间从交换机表中移除,这样可以确保交换机表中的信息是最新的。
如下图所示。交换机接收到了一个数据帧,因此记录了发送者A的MAC地址和相应的接口位置。
在这里插入图片描述
在显示应用中:
当交换机接收到一个数据帧,目的地址是A’,而A’的位置在交换机表中未知时,交换机会执行flood(泛洪),它会将这个数据帧发送到所有的接口(除了接收到数据帧的那个接口),以确保数据帧能够到达目的地。
一旦交换机学习到了A’的位置,也就是知道了A’所对应的接口,那么接下来当有数据帧的目的地址是A’时,交换机就会有选择地只将数据帧发送到已知的接口,而不再进行广播。
在这里插入图片描述
因此frame filtering(帧过滤)/forwarding(转发)算法如下:
1.当交换机接收到数据帧时,它会记录下数据帧到达的接口和发送主机的MAC地址。
2.接着,交换机会使用数据帧中的目的MAC地址作为索引,来查找交换机表中的条目。
3.如果交换机表中存在目的地址的条目,交换机会进行以下判断:
如果目的地址在与数据帧到达的LAN段/链路上,则丢弃数据帧(即不进行转发)。
否则,交换机会根据交换机表中目的地址对应的接口信息,将数据帧转发到相应的接口。
如果在交换机表中没有找到目的地址的条目,交换机会执行泛洪操作,即将数据帧转发到除了接收到数据帧的那个接口之外的所有接口上,以确保数据帧能够到达目的地。

 if entry found for destination
	 then {
		 if destination on LAN segment/link from which frame arrived
			 then drop frame
		else forward frame on interface indicated by entry
	 }
	 else flood  /* forward on all interfaces except arriving interface */

自学习交换机可以通过它们的端口相互连接,以扩展网络覆盖范围。多个交换机连接在一起就行了interconnecting switches(互联交换机),即一个更大的网络拓扑。
下图展示了一个interconnecting switches(互联交换机)形成的更大的网络拓扑。
在这里插入图片描述
当设备A需要发送数据帧到设备G时,这里的过程与前面一样。
S1交换机通过自学习过程来确定如何转发帧。当S1收到这个数据帧,如果目的MAC地址不在它的转发表中,它会将帧泛洪到所有端口,除了接收该帧的端口。随着时间的推移,S1会学习到G的MAC地址,并且知道应该通过S4和S3来转发帧。

因此我们现在介绍Institutional network(机构网络),如下图所示。
在这里插入图片描述
这个机构网络就相当于是一个子网,通过路由器连接到外部网络。邮件服务器和网页服务器为这个机构网络提供了内部服务。

下面我们将交换机和路由器进行以下对比。
交换机和路由器都是存储转发(store-and-forward)设备:
路由器是网络层设备,它主要根据网络层的头部信息(例如IP地址)来进行决策和转发数据包。路由器使用路由算法和IP地址来计算转发表,以确定数据包应该被发送到网络中的哪个位置。
而交换机是链路层设备,它主要根据链路层的头部信息(例如MAC地址)来进行决策和转发数据帧。交换机通过泛洪、学习和MAC地址来学习转发表,以确定数据帧应该被发送到哪个接口。

交换机和路由器都有转发表:
路由器的转发表是通过路由算法和IP地址计算得出的。
交换机的转发表是通过泛洪、学习和MAC地址学习得出的。
在这里插入图片描述

5.7 VLANs(Virtual Local Area Network,虚拟局域网)

在没有使用VLAN的传统局域网中,由于是单一广播域,所有设备都接收到相同的广播流量,这可能导致lack of traffic isolation(流量隔离不足)。所有第二层广播流量必须穿越整个局域网,这意味着像ARP(地址解析协议)、DHCP(动态主机配置协议)这样的广播流量,以及当目的地MAC地址未知时的流量,都会在整个局域网中传播。这可能影响网络效率,还可能导致安全和隐私问题。
这可以通过替换中心交换机为路由器来解决,即通过在网络中引入路由器,可以将网络划分为多个子网,从而实现流量隔离和提高安全性。
下图展示了一个机构网络。我们可以将图中的中心交换机替换为路由器去解决这个问题。
当然这个问题也可以使用VLAN解决,这样我们就用交换机解决了这个问题。
在这里插入图片描述
如果使用前面说的划分子网的方法解决前面传统局域网中遇到的问题还会遇到一个问题:
当用户从一个部门移动到另一个部门(例如,从计算机科学部门移动到电气工程部门,且在不同的建筑中),如果他们想要保持与原部门交换机的连接,这在没有VLAN的网络中是难以管理的。

VLAN技术可以允许交换机在单一的物理网络结构上,通过配置交换机来创建多个虚拟的局域网。
Port-based VLAN(基于端口的VLAN)是一种VLAN配置方式,交换机的端口被分组(通过交换机管理软件),使得单个物理交换机可以作为多个虚拟交换机运行。
在这里插入图片描述
在这里插入图片描述
Port-based VLAN(基于端口的VLAN)的特性如下:
1.Traffic isolation(流量隔离):
通过VLAN,可以隔离网络流量。例如,从端口1-8发出的数据帧只能到达端口1-8。
VLAN不仅可以基于交换机端口来定义,还可以基于网络端点的MAC地址来定义。

2.Dynamic membership(动态成员资格):
端口可以动态地分配到不同的VLAN中。这意味着网络管理员可以根据需要调整端口的VLAN分配,而不需要物理地重新连接设备。

3.Forwarding between VLANs(VLAN之间的转发):
VLAN之间的数据转发需要通过路由来实现,就像在不同的交换机之间转发数据一样。这通常需要一个路由器来在VLAN之间转发数据包。
在实际应用中,供应商通常会提供集成了VLAN功能的交换机和路由器。这意味着外部路由器(如图中所示)可能不是必需的,因为交换机已经集成了路由功能。
在这里插入图片描述
我们现在将这个网络继续升级拓展,我们现在的网络有多个交换机组成,那我们如何再多个交换机之间的VLANs中传递信息呢?
通过Trunk port(干道端口)。
Trunk port(干道端口)是指在交换机之间传输跨越多个VLAN定义的帧的端口。在这些端口上传输的帧需要携带有关VLAN身份的信息,以便在不同交换机之间正确转发。
当帧通过trunk port(干道端口)在交换机之间传输时,帧需要携带有关所属VLAN的信息。这样,接收帧的交换机就能够知道应该将帧转发到哪个VLAN。
为了实现在trunk port(干道端口)之间正确传输帧的VLAN信息,802.1Q协议引入了额外的头字段,用于在帧的头部中添加或移除VLAN标识信息。
在这里插入图片描述
因此现在802.1Q协议的VLAN帧格式如下:
在这里插入图片描述
2-byte Tag Protocol Identifier(2字节标签协议标识符):这是一个2字节的字段,其值为81-00,用于标识帧中包含802.1Q VLAN标签。
Tag Control Information(标签控制信息):
这是一个字段,包含12位的VLAN ID字段和3位的优先级字段(类似于IP头中的服务类型TOS字段)。
VLAN ID字段用于标识帧属于哪个VLAN。
优先级字段用于确定帧的优先级,类似于IP数据包中的QoS(服务质量)标记。
Recomputed CRC(重新计算的CRC):
在添加了VLAN标签后,因此帧的CRC会被重新计算,以确保帧的完整性。

5.8 Data center networking(数据中心网络)

数据中心网络是指用于连接和支持大量主机的网络,这些主机通常紧密耦合,支持各种不同的云应用。这些应用可能包括:搜索引擎和数据挖掘(如Google、百度)、电子商务(如阿里巴巴、亚马逊)、社交网络服务(如腾讯、Facebook)以及内容服务器(如YouTube、苹果、微软)。
因此数据中心网络面临的挑战有:
1.多个应用同时运行,每个应用都需要服务大量的客户。
2.管理并平衡负载,确保服务的稳定性和响应速度。避免处理、网络和数据的瓶颈,这些瓶颈可能会影响服务的性能和用户体验。

Load balancer是一种应用层路由设备,用于管理和分发来自外部客户端的请求到数据中心内部的工作负载。它的主要功能包括接收外部客户端的请求、在数据中心内部分配工作负载,并将结果返回给外部客户端。通过这种方式,负载均衡器可以隐藏数据中心内部的细节,将请求和结果处理过程对外部客户端进行屏蔽。
在实际应用中,负载均衡器可以采用各种软件或硬件实现。例如,常见的负载均衡器软件包括Apache、Nginx,也可以通过Python或Node.js等编程语言自行开发实现。
在这里插入图片描述
数据中心网络中实现了交换机与racks(机架)之间的多种连接方式,包括物理连接和逻辑连接。racks(机架)是用来放置服务器、网络设备和其他硬件设备的支架或架子。
这种丰富的互连可以带来以下好处:
增加机架之间的吞吐量:通过实现多条路径的路由,可以在机架之间实现更大的数据吞吐量,提高数据中心网络的整体性能。
提高可靠性:通过实现冗余的互连,即使某些连接出现故障,数据中心网络仍然能够保持可靠的运行。
在这里插入图片描述
我们现在来看一个网络请求在协议栈(包括应用层、传输层、网络层、链路层)中的完整过程。
具体的场景是一个学生将笔记本电脑连接到校园网络,并请求或接收www.google.com网页的过程。
如图所示,一个学生将笔记本电脑连接到校园网络,并请求访问Google网站。
在这里插入图片描述

首先第一步,当笔记本电脑连接到网络时,它需要获取自己的IP地址、第一跳路由器的地址以及DNS服务器的地址。这个过程通过DHCP协议来完成。
笔记本电脑通过DHCP协议发出请求,请求获取IP地址、第一跳路由器地址和DNS服务器地址。这个DHCP请求被封装在UDP协议中,然后封装在IP协议中(目标地址为广播IP),最后封装在以太网的802.3帧中。
以太网帧被广播到局域网上(目标地址为FFFFFFFFFFFF),交换机使用自学习机制添加转发条目,路由器上运行的DHCP服务器接收到这个请求。
以太网帧被解封到IP层,然后解封到UDP层,最终解封到DHCP协议。
在这里插入图片描述
第二步,DHCP服务器构建包含客户端IP地址、客户端的第一跳路由器的IP地址以及DNS服务器的名称和IP地址的DHCP应答(ACK)。这个ACK被封装在以太网帧中,并通过交换机在局域网中进行转发。
交换机将帧转发到局域网上,客户端接收到这个帧并进行解封,以获取DHCP ACK应答。
在这里插入图片描述
至此,客户端已经获得了自己的IP地址,并知道了DNS服务器的名称和地址,以及它的第一跳路由器的IP地址。

第三步,在发送HTTP请求之前,客户端需要获取www.google.com的IP地址,为此需要进行DNS查询。客户端创建了一个DNS查询,将其封装在UDP中,然后封装在IP中,最后封装在以太网帧中。
为了将帧发送到路由器,客户端需要知道路由器接口的MAC地址。为了获取这个信息,客户端发送了一个ARP查询广播,路由器接收到这个查询并回复一个ARP应答,提供了路由器接口的MAC地址。
现在客户端知道了第一跳路由器的MAC地址,因此可以发送包含DNS查询的帧。
在这里插入图片描述
第四步,包含DNS查询的IP数据报从客户端经过局域网交换机转发到第一跳路由器。
IP数据报从学校网络转发到Comcast网络(美国网络提供商COmcast Corporation提供的网络),然后通过路由协议(如RIP、OSPF、IS-IS和/或BGP)进行路由,并最终到达DNS服务器。
DNS服务器接收到IP数据报,并进行解封,以获取DNS查询。
DNS服务器根据查询回复客户端www.google.com的IP地址。
在这里插入图片描述
第五步,在知道www.google.com的IP地址后,客户端现在发送HTTP请求,但HTTP是基于TCP的,所以需要先建立TCP连接。
客户端首先打开一个TCP套接字到Web服务器,然后发送一个TCP SYN段(三次握手的第一步)到Web服务器。这个TCP SYN段会Inter-domain(跨越不同的域)被路由到Web服务器。
Web服务器收到客户端发送的TCP SYN段后,会回复一个TCP SYNACK段(三次握手的第二步)给客户端。
客户端接收到Web服务器发送的TCP SYNACK段后,会回复一个TCP ACK段(三次握手的第三步)给Web服务器。
这样,TCP连接就建立起来了。
在这里插入图片描述
第六步,HTTP请求被发送到TCP套接字中,然后封装成IP数据报。
包含HTTP请求的IP数据报被路由到www.google.com的Web服务器。
Web服务器接收到HTTP请求后,会回复一个HTTP响应,其中包含了请求的网页内容。
包含HTTP响应的IP数据报被路由回到客户端。
在这里插入图片描述
至此,终于成功完成了对www.google.com的访问。


http://www.kler.cn/a/467403.html

相关文章:

  • THREE.js的VideoTexture以及CanvasTexture在部分浏览器以及小程序webview中纯黑不起作用的解决办法
  • 01、Docker学习,第一天:简单入门与安装
  • spring mvc源码学习笔记之六
  • LangChain 介绍
  • 在线二维码生成器-GO在线工具-文本工具
  • HTML5 SSE
  • Nginx:负载均衡
  • Qt6.8.1 Mingw13.1 编译opencv4.10时cannot convert ‘char*‘ to ‘LPWSTR
  • Day27:for-in语句
  • Maven 入门指南:从零开始掌握 Maven
  • 电子电气架构 --- 中央HPC架构
  • 结合梯度信息来改进爬山算法
  • Fabric部署-docker-compose安装
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • 力扣-数据结构-12【算法学习day.83】
  • C#多线程精解
  • 第4天:Web应用蜜罐系统堡垒机运维API内外接口第三方拓展架构部署影响
  • Tortoisegit 安装之后没有Add、ignore解决
  • 最小二乘有限差分的物理信息神经网络与物理信息神经网络的区别
  • 升级Cypress到10.8.0
  • LeetCode 力扣 热题 100道(二十九)螺旋矩阵(C++)
  • 【STC库函数】Compare比较器的使用
  • 基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】
  • Python嵌套列表的浅拷贝与深拷贝
  • Python虚拟环境管理
  • jquery实现的网页版扫雷小游戏源码