链路层详解:直通交换与数据帧传输

需积分: 0 9 下载量 66 浏览量 更新于2024-08-21 收藏 2.34MB PPT 举报
"直通交换技术是计算机网络中链路层的一种数据传输方式,与存储转发方式相对。在直通交换中,交换机在接收到数据帧的一部分,通常是目标地址后,无需等待整个帧完全到达就可以开始转发,提高了数据传输效率。这种方式减少了延迟,尤其在处理短帧时更为明显。然而,直通交换可能无法检测到帧的尾部错误,因为这些错误在帧的前部分到达后才会被发现。" 直通交换技术,作为计算机网络中的一个重要概念,特别是在局域网和链路层通信中,它与存储转发方式形成了鲜明对比。存储转发方式要求交换机先完整接收整个数据帧,然后检查其正确性,最后将其转发到目的地。这种方法虽然保证了数据的完整性,但增加了传输延迟,尤其对于大帧而言。 链路层是OSI模型中的第二层,负责在相邻节点间进行数据帧的传输。它关注如何通过单一链路将数据报从一个节点传送到相邻节点,同时处理帧的封装、解封装、差错检测、流量控制和媒体访问等问题。链路层协议,如以太网、802.11无线局域网、令牌环和点对点协议(PPP),定义了帧的结构和节点间的交互规则。 点对点通信链路和广播链路是链路层通信的两种基本类型。点对点链路仅连接两个节点,访问控制相对简单,而广播链路则涉及多个节点共享同一通信信道,需要解决碰撞和媒体访问控制问题,常见于局域网、无线局域网和混合光纤同轴电缆接入网。 链路层服务包括将网络层的数据报封装成帧,并通过链路进行传输。适配器(也称为网络接口卡,NIC)是实现链路层通信的关键硬件,它负责物理信号与数据帧的转换,以及链路层协议的执行。 在网络层和链路层之间存在密切的协作。网络层,如IP层,负责跨不同网络和链路层协议的端到端数据传输,而链路层则专注于确保数据在单个链路上的可靠传输。两者共同作用,使得数据能够从源主机经过一系列链路和路由器最终到达目的主机。 直通交换是提高网络性能的一种策略,它牺牲了一定的数据完整性检查以换取更快的传输速度,适用于对延迟敏感的应用场景。而在链路层,除了传输机制外,还需要解决诸如错误检测、媒体访问控制和地址分配等问题,以确保数据的准确无误地传输。理解这些概念和技术对于构建和维护高效、可靠的计算机网络至关重要。

void QtWidgetsApplication2::pt_clicked(QString data1, QString data2) { pcl::console::TicToc time; // --------------------------------读取点云------------------------------------ pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ>("opened_cloud.pcd", *cloud) == -1) { PCL_ERROR("Cloudn't read file!"); } //cout << "滤波前点的个数为:" << cloud->size() << endl; // --------------------------------直通滤波------------------------------------ float a = data1.toFloat(); float b = data2.toFloat(); pcl::PointCloud<pcl::PointXYZ>::Ptr filtered(new pcl::PointCloud<pcl::PointXYZ>); std::string fv = "z"; // 滤波字段 filtered = pcl_filter_passthrough(cloud, a, b, fv); //cout << "直通滤波用时:" << time.toc() << " ms" << endl; pcl::io::savePCDFileASCII("opened_cloud.pcd", *filtered); ui.textBrowser->clear(); QString Pointsize = QString("%1").arg(cloud->points.size()); ui.textBrowser->insertPlainText(QStringLiteral("点云数量:") + Pointsize); QString Pointsize1 = QString("%1").arg(filtered->points.size()); ui.textBrowser->insertPlainText(QStringLiteral("\n滤波后点云数量:") + Pointsize1); auto renderer2 = vtkSmartPointer<vtkRenderer>::New(); auto renderWindow2 = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); renderWindow2->AddRenderer(renderer2); viewer.reset(new pcl::visualization::PCLVisualizer(renderer2, renderWindow2, "viewer", false)); ui.openGLWidget->setRenderWindow(viewer->getRenderWindow()); viewer->setupInteractor(ui.openGLWidget->interactor(), ui.openGLWidget->renderWindow()); viewer->setBackgroundColor(0, 0, 0); //设置背景 pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> fildColor(filtered, "z"); viewer->addPointCloud<pcl::PointXYZ>(filtered, fildColor, "sample cloud"); viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud"); viewer->resetCamera(); update(); };这段代码存在内存泄漏的问题

2023-05-26 上传