网络编程(三)数据链路相关知识

2024-04-18 10:32

本文主要是介绍网络编程(三)数据链路相关知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据链路,指OSI参考模型中的数据链路层,有时也指以太网、无线局域网等通信手段。

各个设备之间在数据传输时,数据链路层和物理层都是必不可少的。数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。

MAC地址

MAC地址用于识别数据链路中互连的节点。以太网、无线LAN、蓝牙等设备都是使用的相同规格的MAC地址。

MAC地址长48比特,在使用网卡(NIC)的情况下,MAC地址一般会被烧入到ROM中。因此,任何一个网卡的MAC地址都是唯一的,在全世界都不会有重复(凡事有例外:微机板自己设置MAC;虚拟机分配的MAC等不能确保不重复)。

MAC格式
MAC地址中3~24位(比特位)表示厂商识别码,每个NIC厂商都有特定唯一的识别数字。25~48位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同MAC地址的网卡。

半双工与全双工通信

半双工是指,只发送或只接收的通信方式。它类似于无线电收发器,若两端同时说话,是听不见对方说的话的。而全双工不同,它允许在同一时间既可以发送数据也可以接收数据。类似于电话,接打双方可以同时说话。

共享介质网络与非共享介质网络

从通信介质的使用方法上看,网络可分为共享介质型和非共享介质型。

共享介质网络

指由多个设备共享一个通信介质的一种网络。最早的以太网和FDDI就是介质共享型网络。在这种方式下,设备之间使用同一个载波信道进行发送和接收。为此,基本上采用半双工通信方式,并有必要对介质进行访问控制。

非共享介质网络

是指不共享介质,是对介质采取专用的一种传输控制方式。在这种方式下,网络中的每个站直连交换机,由交换机负责转发数据帧。此方式下,发送端与接收端并不共享通信介质,因此很多情况下采用全双工通信方式。

最近它也成为了以太网的主流方式。通过以太网交换机构建网络,从而使计算机与交换机端口之间形成一对一的连接,即可实现全双工通信。

该方式还可以根据交换机的高级特性构建虚拟局域网(VLAN,Virtual LAN)、进行流量控
制等。当然,这种方式也有一个致命的弱点,那就是一旦交换机发生故障,与之相连的所有计算机之间都将无法通信。

交换集线器(以太网交换机)

这是一种将非介质共享型网络中所使用的交换机用在以太网中的技术,交换集线器也叫做以太网交换机。

以太网交换机就是持有多个端口的网桥,它们根据数据链路层中每个帧的目标MAC地址,决定从哪个网络接口发送数据。这时所参考的、用以记录发送接口的表就叫做转发表(Forwarding Table)。

自学过程

上面提到的转发表不需要人工在交换机上面进行设置,可以自动生成。

数据链路层的每个通过点在接到包时,会从中将源MAC地址以及曾经接收该地址发送的数据包的接口作为对应关系记录到转发表中。以某个MAC地址作为源地址的包由某一接口接收,实质上可以理解为该MAC地址就是该接口的目标。因此也可以说,以该MAC地址作为目标地址的包,经由该接口送出即可。这一过程也叫自学过程。

交换机的转发方式
1、存储转发

存储转发方式检查以太网数据帧末尾的FCS位后再进行转发。
因此,可以避免发送由于冲突而被破坏的帧或噪声导致的错误帧。

2、直通转发

不需要将整个帧全部接收下来以后再进行转发。只需要得知目标地址即可开始转发。
因此,它具有延迟较短的优势。但同时也不可避免地有发送错误帧的可能性。

VLAN

为了减少实际网络拓扑的修改,可以使用带有VLAN功能的交换机。

VLAN技术附加到网桥/2层交换机上,就可以切断所有VLAN之间的所有通信。因此,相比一般的网桥/2层交换机,VLAN可以过滤多余的包,提高网络的承载效率。

简单VLAN

如下图所示,是一个简单的VLAN,该交换机按照其端口区分了A、B两个网段,从而区分了广播数据传播的范围、减少了网络负载并高了网络的安全性。然而异构的两个网段之间,就需要利用具有路由功能的交换机(如3层交换机),或在各段中间通过路由器的连接才能实现通信。

简单VLAN区分网段

TAG VLAN(定义了IEEE802.1Q的标准)

TAG VLAN中对每个网段都用一个VLAN ID的标签进行唯一标识。

在交换机中传输帧时,在以太网首部加入这个VID 标签,根据这个值决定将数据帧发送给哪个网段。

跨交换机的VLAN

以太网

在众多数据链路中最为著名、使用最为广泛的莫过于以太网(Ethernet)(以太网(Ethernet)一词源于Ether(以太),意为介质。在爱因斯坦提出量子力学之前,人们普遍认为宇宙空间充满以太,并以波的形式传送着光。) 。

现在,以太网已成为最具兼容性与未来发展性的一种数据链路。

早期以太网结构

初期使用多台终端使用同一电缆的共享介质型的连接方式。

初期以太网

现代以太网结构

终端与交换机之间独占电缆的方式实现以太网通信。

现代以太网

以太网分类

下图展示以太网介质,不做详细介绍:

以太网分类

以太网帧格式

以太网帧前端有一个叫做前导码(Preamble)的部分,表示一个以太网帧的开始,也是对端网卡能够确保与其同步的标志。

前导码如下所示:

以太网帧的前导码
以太网帧本体的前端是以太网的首部,它总共占14个字节。分别是6个字节的目标MAC地址、6个字节的源MAC地址以及2个字节的上层协议类型。

以太网帧本体

这篇关于网络编程(三)数据链路相关知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914531

相关文章

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。