继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

网络基础 : 以太网数据封装

哔哔one
关注TA
已关注
手记 463
粉丝 93
获赞 543

以太网的数据链路层

在数据链路层,以太网负责以太网编址,这通常称为硬件编址或 MAC 编址。以太网还负责把来自网络层的分组封装成帧。

以太网编址

以太网编址使用固化在每个以太网网卡(NIC)中的 MAC (Media Access Control,介质访问控制)地址。MAC (硬件)地址长 48 位,采用十六进制格式。

OUI(Organizationally Unique Identifier,组织唯一标识符)是由 IEEE 分配给组织(厂商)的,它包含 24 位,而组织给其生产的每个网卡都分配一个唯一的全局管理地址,该地址长 24 位。查看上图您会发现最高位是 I/G(Individual/Group) 位:如果它的值为 0,我们就可以认为相应的地址为某台设备的 MAC 地址,很可能出现在MAC 报头的源地址部分;如果它的值为 1,我们就可以认为相应的地址要么是以太网中的广播地址或组播地址,要么是令牌环和 FDDI 中的广播地址或功能地址。
接下来是 G/L 位(全局/本地位,也称为 U/L 位,其中 U 表示 universal):如果这一位为 0,则表示相应的地址为全局地址,由 IEEE 分配;如果为 1,则表示相应的地址为本地管理地址。在以太网地址中,右边 24 位为本地管理(制造商分配)的编码,特定制造商在生产第一个网卡时,通常将这部分设置为 24 个 0,然后递增,直到 24 个1。

以太网帧

数据链路层负责将比特合并成字节,再将字节封装成帧(frame)。在数据链路层我们使用帧封装来自网络层的分组,以便通过特定类型的介质进行传输。
以太网工作站的职责是,使用 MAC 帧格式彼此传递数据帧。它利用 CRC(Cyclic Redundancy Check,循环冗余校验)提供错误检测功能,记住,仅仅是检测,不是纠错。
下图说明了 802.3 帧和以太网帧的格式:

注意:使用一种帧封装另一种帧称为隧道技术。

下面详细介绍各个字段。
前导码
交替的 0 和 1,在每个分组的开头提供 5MHz 的时钟信号,让接收设备能够跟踪到来的比特流。
帧起始位置分隔符(SFD)/同步
前导码为 7Byte,而 SFD(同步)为 1Byte。SFD 的值为 10101011,其中最后两个1让接收方能够识别中间的 0 和 1 交替模式,进而同步并检查到数据开头。
目标地址 (DA)
包含一个 48 位的值,且 LSB(Least Significant Bit,最低有效位)优先。接收方根据 DA 判断到来的分组是否是发送给特定节点的。目标地址可以是单播地址、广播地址或组播 MAC 地址。广播地址全为 1(十六进制格式下全为F),广播发送给所有设备,而组播只发送给网络中一组类似的节点。
源地址(SA)
SA 是一个 48 位的 MAC 地址,用于标识传输设备,也使用 LSB 优先格式。在 SA 字段中,不能包含广播地址或组播地址。
长度或类型
802.3 帧使用长度字段,而 Ethernet_II 帧使用类型字段标识网络层协议。802.3 不能标识上层协议,只能用于专用 LAN,如 IPX。
数据
这是网络层传递给数据链路层的帧,其长度为 46-1500 Bytes。
帧校验序列(FCS)
FCS 字段位于,用于存储 CRC(Cyclic Redundancy Check,循环冗余校验)结果的帧的帧尾。CRC 是一种数学算法,创建每个帧时都将运行它。作为接收方的主机收到帧并运行 CRC 时,其结果必须相同,否则接收方将认为发生了错误,进而将帧丢弃。

数据封装

主机通过网络将数据传输给另一台设备时,数据将经历封装:OSI 模型的每一层都使用协议信息将数据包装起来。每层都只与其在接收设备上的对等层通信。
为了通信和交换信息,每层都使用 PDU(Protocaol Data Unit,协议数据单元)。PDU 包含在每一层给数据添加的控制信息。这些控制信息通常被添加在数据字段前面的报头中,但也可能被添加在报尾中。
OSI 模型每一层都对数据进行封装来形成 PDU,PDU 的名称随报头提供的信息而异。这些 PDU 信息仅在接收设备的对等层被读取,然后剥离,然后数据被交给下一层。
下图显示了各层的 PDU 及每层添加的控制信息:

该图说明了如何对上层用户数据进行转换,以便通过网络传输。然后,数据被交给传输层,而传输层通过发送同步分组来建立到接收设备的虚电路。接下来,数据流被分割成小块,传输层报头被创建并放在数据字段前面的报头中,此时的数据块称为数据段(一种PDU)。我们可以对每个数据段进行排序,以便在接收端按发送顺序重组数据流。
接下来,每个数据段都交给网络层进行编址,并在互联网络中路由。为让每个数据段前往正确的网络,这里使用逻辑地址(如IP地址)。对于来自传输层的数据段,网络层协议给它添加一个控制报头,这样就生成了分组或数据报。在接收主机上,传输层和网络层协同工作以重建数据流,但它们不负责将 PDU 放到本地网段上--这是将信息传输给路由器或主机的唯一途径。
数据链路层负责接收来自网络层的分组,并将其放到网络介质(电缆或无线)上。数据链路层将每个分组封装成帧,其中帧头包含源主机的硬件地址。如果目标设备在远程网络中,则帧将被发送给路由器,以便在互联网络中路由。到达目标网络后,新的正被用来将分组传输到目标主机。
要将帧放到网络上,首先必须将其转换为数字信号。帧是有 1 和 0 组成的逻辑编组,网络层负责将这些 0 和 1 编码成数字信号,供本地网络中的设备读取。接收设备将同步数字信号,并从中提取 1 和 0 (解码)。接下来,设备将重组帧,运行 CRC,并将结果与帧中 FCS 字段的值进行比较。如果它们相同,设备从帧中提取分组,并将其他部分丢弃,这个过程称为拆封。分组被交给网络层,而网络层将检查分组地址。如果地址匹配,数据段被从分组中提取出来,而其他部分将被丢弃。数据段将在传输层处理,而后者负责重建数据流,然后向发送方确认,指出接收方收到了所有信息。然后传输层将数据流交给上层应用程序。
在发送端,数据封装的过程大致如下:
    1. 用户信息被转换为数据,以便通过网络进行传输。
    2. 数据被转换为数据段,发送主机和接收主机之间建立一条可靠的连接。
    3. 数据段被转换为分组或数据报,连接地址被添加在报头中,以便能够在互联网络中路由分组。
    4. 分组或数据报被转换为帧,以便在本地网络中测试。硬件(以太网)地址被用于唯一标识本地网段中的主机。
    5. 帧被转换为比特,并使用数据编码方法和时钟同步方案。
下图解释了数据封装的过程:

传输层使用端口号标识虚电路和上层进程,如下图所示:

使用面向连接的协议(即TCP)时,传输层将数据流转换为数据段,并创建一条虚电路以建立可靠的会话。接下来,它对每个数据段进行编号,并使用确认和流量控制。如果你使用的是 TCP,虚电路将由源端口号和目标端口号已经源 IP 地址和目标 IP 地址(称为套接字)标识。主机只能使用不小于 1024 的端口号。目标端口号标识了上层进程(应用程序),在接收主机可靠地重建数据流后,数据流将被交给进程(应用程序)。
下面让我们回到数据封装的过程。
给数据块添加传输层报头信息后,便形成了数据段;随后,数据段和目标 IP 地址一起呗交给网络层。(目标IP地址是随数据流一起由上层交给传输层的,它是由上层使用名称解析方法(可能是DNS)发现的。)
网络层在每个数据段的前面添加报头和逻辑地址(IP地址)。给数据段添加报头后,形成的 PDU 为分组。分组包含一个协议字段,该字段指出了数据段来自何方(UDP或TCP),这样当分组到达接收主机后,传输层便能够将数据段交给正确的协议。
网络层负责获悉目标硬件地址(这种地址指出了分组应发送到本地网络的什么地方),为此,它使用 ARP(Address Resolution Protocol,地址解析协议)。网络层查看目标 IP 地址,并将其与主机的 IP 地址和子网掩码进行比较。如果比较表明分组是前往本地主机的,则 ARP 请求被用于请求该主机的硬件地址;如果分组是前往远程主机的,IP 将获悉默认网关(路由器)的 IP 地址。
接下来,网络层将分组向下传递给数据链路层,一同传递的还有本地主机或默认网关的硬件地址。数据链路层在分组前面添加一个报头,这样数据块将变成真(之所以称其为帧,是因为同时给分组添加了报头和报尾,使其类似于书档)。帧包含一个以太网类型(Ether-Type)字段,它指出了分组来自哪种网络层协议。现在,将对帧运行CRC 校验,并将结果放在帧尾的 FCS 字段中。
至此,可以用每次 1 比特的方式将帧向下传递给网络层了,而网络层将使用比特定时规则(bit timing rule)将数据编码成数字信号。网段中的每台设备都将同步时钟,从数字信号中提取 1 和 0,并重建帧。重建帧后,设备运行 CRC,以确保帧是正确的。如果一切顺利,主机将检查目标 MAC 地址和目标 IP 地址,以检查这个帧是不是发送给它的。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP