计算机网络课设-模拟Ethernet帧的发送过程

合集下载

ETHERNET的帧封装课程设计

ETHERNET的帧封装课程设计

ETHERNET的帧封装课程设计一、课程目标知识目标:1. 理解ETHERNET帧封装的基本概念和原理;2. 掌握ETHERNET帧的结构,包括前导码、目的地址、源地址、类型/长度、数据和循环冗余校验(CRC);3. 了解不同类型以太网帧的封装过程及其差异。

技能目标:1. 能够独立完成ETHERNET帧的构建和解析;2. 学会使用相应工具或软件对ETHERNET帧进行抓包和分析;3. 培养学生对网络通信过程中帧封装的实际应用能力。

情感态度价值观目标:1. 培养学生对计算机网络知识的好奇心和探索精神;2. 增强学生合作学习、讨论交流的能力,提高团队意识;3. 通过学习计算机网络知识,让学生认识到科技发展对社会进步的重要性。

课程性质:本课程为计算机网络技术基础课程,以理论教学和实践操作相结合的方式进行。

学生特点:学生已具备一定的计算机网络基础知识,对ETHERNET有一定了解,但对帧封装的具体过程尚不熟悉。

教学要求:结合学生特点和课程性质,以实际操作为主,理论讲解为辅,注重培养学生的实践能力和团队协作能力。

通过本课程的学习,使学生能够掌握ETHERNET帧封装的相关知识,为后续计算机网络课程打下坚实基础。

二、教学内容1. 引言:回顾计算机网络基础知识,引导学生认识ETHERNET帧封装的重要性。

- 网络体系结构概述- 以太网发展简史- 帧封装的作用与意义2. ETHERNET帧结构解析:- 帧结构组成:前导码、目的地址、源地址、类型/长度、数据、CRC- 各字段作用及取值范围- 不同类型以太网帧结构对比3. 帧封装过程:- 数据链路层与物理层关系- 帧封装流程及关键技术- 帧封装错误处理机制4. 实践操作:- 使用Wireshark等抓包工具抓取和分析ETHERNET帧- 搭建实验环境,模拟帧封装过程- 分析实验结果,总结帧封装规律5. 教学案例分析:- 分析实际网络环境中的帧封装案例- 探讨案例中存在的问题及解决方案教学内容安排与进度:1. 引言与ETHERNET帧结构解析(1课时)2. 帧封装过程与实践操作(2课时)3. 教学案例分析(1课时)本教学内容以课本相应章节为基础,注重理论与实践相结合,旨在帮助学生系统地掌握ETHERNET帧封装的相关知识。

模拟Ehternet帧的发送过程代码

模拟Ehternet帧的发送过程代码

模拟Ehternet帧的发送过程代码模拟Ethernet帧的发送过程代码在计算机网络中,Ethernet是一种常见的局域网协议。

在数据传输过程中,计算机会将数据封装成一个Ethernet帧,并通过物理媒介发送给接收方。

下面是模拟Ethernet帧的发送过程代码:```#include <stdio.h>#include <string.h>// 定义Ethernet帧结构体typedef struct {char dest[6]; // 目标MAC地址char src[6]; // 源MAC地址char type[2]; // 类型字段char data[1500]; // 数据部分} EthernetFrame;// 定义函数:将字符串形式的MAC地址转换为字符数组void mac_str_to_arr(char *mac_str, char *mac_arr) {int i, j;for (i = 0, j = 0; i < strlen(mac_str); i += 3, j++) { mac_arr[j] = (char) strtol(mac_str + i, NULL, 16); }}int main() {EthernetFrame frame;// 设置目标MAC地址和源MAC地址char dest_mac[] = "00:11:22:33:44:55";mac_str_to_arr(dest_mac, frame.dest);char src_mac[] = "aa:bb:cc:dd:ee:ff";mac_str_to_arr(src_mac, frame.src);// 设置类型字段(这里假设为IPv4)strcpy(frame.type, "\x08\x00");// 设置数据部分(这里假设为字符串"Hello world!") strcpy(frame.data, "Hello world!");// 发送Ethernet帧printf("Sending Ethernet frame...\n");printf("Dest MAC: %s\n", dest_mac);printf("Src MAC: %s\n", src_mac);printf("Type: IPv4\n");printf("Data: %s\n", frame.data);return 0;}```在上面的代码中,我们定义了一个EthernetFrame结构体,用于表示一个Ethernet帧。

《计算机网络实验》实验一 以太网帧的构成

《计算机网络实验》实验一 以太网帧的构成

院系:计算机学院实验课程:计算机网络实验实验项目:以太网帧的构成指导老师:XXX开课时间:XXXX ~ XXXX年度第 2学期专业:XXXX班级:XXXX级本X班学生:XXX学号:XXXXXXXX实验一以太网帧的构成一、实验目的掌握以太网帧的构成模式,能够识别不同的MAC地址并理解MAC地址的作用,了解网络故障分析仪的基本使用方法。

二、实验学时4学时三、实验类型综合型四、实验要求1.了解协议仿真编辑器的五个组成部分及其功能2.了解网络协议分析仪的各组成部分及其功能3.学会使用协议仿真编辑器编辑以太网帧,包括单帧和多帧的编辑4.学会观察并分析地址本中的MAC地址5.学会分析以太网帧的MAC首部6.理解MAC地址的作用7.理解MAC首部中的LLC-PDU长度/类型字段五、实验原理(1)6 6 2帧类型字段:表示后面数据类型。

例如0x0806表示ARP请求或应答。

(2) 太网帧的构成14 20-60 根据协议而定(TCP20-60)4(3) 其他原理请参考教材:第一章:计算机网络的基本概念第二章:局域网技术六、实验步骤(一)仿真机端练习一:运行ipconfig命令1.启动网络协议仿真编辑器,选择“工具”菜单栏中的IPCONFIG项,观察ipconfig /all;命令下的运行结果,获得本机的主机名及以太网地址。

Ethernet adapter 本地连接2:Connection-specific DNS Suffix . :Description . . . . . . . . . . . : Intel(R) PRO/100 VE Network ConnectionPhysical Address. . . . . . . . . : 00-13-20-AA-F4-7CDHCP Enabled. . . . . . . . . . . : NoIP Address. . . . . . . . . . . . : 192.168.0.100Subnet Mask . . . . . . . . . . . : 255.255.255.0IP Address. . . . . . . . . . . . : fe80::213:20ff:feaa:f47c%7Default Gateway . . . . . . . . . :DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%2fec0:0:0:ffff::2%2fec0:0:0:ffff::3%22.在地址本中找到本机的信息练习二:单帧编辑并发送1.打开协议仿真编辑器,在界面初始状态下,程序会自动新建一个单帧。

计算机网络课设模拟Ethernet帧的发送过程

计算机网络课设模拟Ethernet帧的发送过程
例如,在第1次重传时,k=1,随机数r从整数{0,1}中选一个数。因此重传推迟的时间是0或争用期,在这两个时间中随机选择一个。
若再发生碰撞,则重传时,k=2,随机数r就从整数{0,1,2,3}中选一个数。因此重传推迟的时间是在0,2 ,4 和6 这4个时间中随机抽取一个。
同样,若在发生碰撞,则重传时k=3,随机数r就从整数{0,1,2,3,4,5,6,7}中选一个数。以此类推。
default_random_engine e;
printf("ID %s send conllision\n",ss.str().c_str());
auto sleeptime=randnum(e);
sleep(sleeptime);
continue;
}
使用randnum(0,pow(2,min(RepeatCounter,10)-1))来实现截断二进制指数退避算法。
如果RepeatCounter>=16,则放弃发送此包。
注意,此处使用printf而非cout,因为cout不是线程安全的,易出现字符串打断现象。而printf是线程安全的。可以直接使用。
若连续多次发生冲突,就表明可能有较多的站参与争用信道。但使用退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
我们还注意到,每发送一个新的帧,就要执行一次/CD算法。适配器对过去发生过的碰撞并无记忆功能。因此,当好几个适配器正在执行指数退避算法时,很可能有某一个适配器发送的新帧能够碰巧立即成功插入到信道中,得到了发送权。
ss << std::this_thread::get_id();
wchar_t Pid = std::stoull(ss.str());

计算机网络课程设计[模拟Ethernet帧发送过程]

计算机网络课程设计[模拟Ethernet帧发送过程]

计算机网络课程设计报告课题: 模拟Ethernet帧的发送过程姓名:刘珊岑学号:12170106专业班级:计算机科学与技术1201指导教师:聂方彦设计时间:2015年上学期地点:E3-A501目录一、课程设计目的和意义 (1)二、课程设计题目描述和要求 (1)三、可行性分析 (2)1.技术可行性 (2)2.功能分析 (2)四、帧结构分析 (2)帧的介绍 (2)五. Ethernet帧的发送与接收流程 (4)1 .Ethernet帧的发送流程 (4)2 Ethernet帧的接收流程 (5)六.详细设计 (5)1.设计中的重点及难点 (6)2.核心代码 (6)3.程序流程 (7)4.完整程序 (7)七.运行结果 (11)八.总结 (12)九.参考文献 (12)一、课程设计目的和意义帧是在数据链路层数据进行传输与交换的基本单位。

构造帧对于理解网络协议的概念、协议执行过程以及网络问题处理的一般方法具有重要的意义。

本次课程设计的目的是应用数据链路层与介质访问控制层的知识,根据数据链路层的基本原理,通过构造一个具体的Ethernet帧,从而深入理解网络协议的基本概念与网络问题处理的一般方法。

二、课程设计题目描述和要求题目:编写程序模拟Ethernet结点的数据发送流程设计要求:(1)用两个线程a,b来模拟Ethernet上的两台主机。

(2)用一个双字类型变量Bus来模拟总线(将其初始化为“/0”,并且总线等于“/0”时表示总线空闲)。

(3)两个子线程向总线发送自己的数据。

数据用该线程的线程信号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。

(4)每台主机须向总线成功发送10次数据,如果其中某次数据发送失败,则该线程结束。

(5)发送流程须遵循CSMA/CD。

随机延迟算法中的冲突窗口取0.005。

在数据发送成功(即Bus==ID)后,报告“ID send success”,产生冲突(即Bus!=ID)后,报告“ID send collision”,发送失败(即冲突计数器值为0)后报告“ID send failure”。

计算机网络以太帧

计算机网络以太帧

计算机网络以太帧1. 简介以太网是一种常用的局域网技术,其通信基本单位是以太帧(Ethernet Frame)。

以太帧是数据链路层中用于在网络中传输数据的基本单元。

本文将详细介绍以太帧的结构、功能和处理过程。

2. 以太帧结构以太帧是由一系列字段组成的数据包,通常包括以下几个部分:2.1 帧前导码帧前导码是一个固定的字段,由7个字节构成。

它的作用是在数据传输之前进行同步和定时,以确保接收方能正确解读数据。

帧前导码的内容为10101010。

2.2 目的MAC地址目的MAC地址是一个6个字节的字段,用于识别帧的接收方。

每个网络设备都有一个唯一的MAC地址,用于标识其在网络中的位置。

2.3 源MAC地址源MAC地址是一个6个字节的字段,用于识别帧的发送方。

与目的MAC地址类似,源MAC地址也是设备的唯一标识符。

2.4 类型/长度字段类型/长度字段用于指示数据字段的类型或长度。

它可以表示以太网上使用的协议类型,如IP、ARP等,或者表示数据字段的长度。

2.5 数据字段数据字段包含实际传输的数据。

它的长度可以根据类型/长度字段的指示进行变化。

2.6 帧校验序列帧校验序列是一个4字节的字段,用于检测帧在传输过程中是否发生了错误。

接收方会根据帧的内容计算校验序列,并与接收到的校验序列进行比较,以确认接收到的帧是否正确。

3. 以太帧的工作流程了解以太帧的工作流程对理解其在计算机网络中的作用非常重要。

下面是以太帧的基本工作流程:3.1 数据封装在发送端,数据从应用层逐层向下传输,最终被封装成以太帧。

数据会按照特定的格式组织,然后与目的MAC地址、源MAC地址等信息一起构建帧。

3.2 帧传输以太帧通过网络传输到目的地。

在传输过程中,帧会经过网络设备,如交换机、路由器等。

这些设备会根据目的MAC地址将帧转发到正确的接口,以确保帧能够到达正确的接收方。

3.3 帧解封在接收端,以太帧被接收到,并根据其结构进行解封。

接收方会根据目的MAC地址判断是否接收该帧,并提取数据字段中的数据。

基于TCP协议的局域网通信程序的设计

基于TCP协议的局域网通信程序的设计

基于TCP协议的局域网通信程序的设计作者:肇宇飞来源:《山东工业技术》2015年第14期摘要:本文设计并实现了基于TCP协议的局域网简单即时通信系统,设计主要应用C/S 模式,运用SOCKET套接字接口实现底层通信,并发送和接受TCP数据包、模拟Ethernet帧的发送过程。

本通信系统实现了基本通信功能,包括客户端登陆验证、向好友发送文字信息和图片信息以及好友信息的保存。

好友间实现文件传输和消息传递是运用P2P方式。

本文先从系统设计的背景意义及需求分析入手,主要介绍了发送和接受TCP数据包设计思想和模拟Ethernet帧的发送过程设计思想并阐述了套接字和多线程执行任务等。

关键词:套接字;模拟Ethernet帧发送过程;C/S模式;TCP协议;文件传输1 绪论1.1 开发背景及意义进入21世纪,随着IT技术的飞速发展,网络时代随之到来,它将人们生活中原本互不联系的各个模块编织到一起,给人们的生产生活带来了极大的方便。

例如,现如今的微信、腾讯QQ、MSN等基于网络的即时聊天软件已经逐步取代了人们传统的通信方式,对比传统媒介,此类聊天软件具有操作简单、经济实用、实时性强、能存储大量数据等优点。

除此之外,即时聊天软件还具有其他传统通信方式不具备的特殊功能,它们除文字外还能传送图片、影像、文件和声音,而且还具有许多人性化的设计,例如个人空间和显示好友状态等。

1.2 需求分析当今社会正处于信息技术飞速发展的时代,在此时代背景下,通信网络和计算机是信息交互的基础设施。

在网络十分普及的今天,通过网络交友、通信是大多数人的首选。

局域网通信系统是现今网上最简单的点对多点通信系统。

一个简单的聊天软件,对于程序员来说就是在许多端点间实现点对多点的通信。

基于TCP协议的局域网通信是一个方便实现的、灵活的、低投入的方法。

它可以在多种基于TCP协议的通信网络上运行。

2 基于TCP协议的局域网通信程序设计概述2.1 发送和接受TCP数据包TCP是一种可靠的、面向连接的传输层协议。

计算机三级考试知识点:以太网

计算机三级考试知识点:以太网

计算机三级考试知识点:以太网计算机三级考试知识点:以太网1.以太网帧构造与工作流程(1)以太网数据发送流程CSMA/CD的发送流程可以概括为以下4点:先听后发,边听边发,冲突停顿,随机延迟重发。

详细的工作流程如下:①载波侦听过程发数据时,先侦听总线是否空闲。

以太网的物理层规定发送的数据采用曼彻斯特编码方式。

②冲突检测方法从电子学的详细实现角度看,进展冲突检测可以有两种方法:比拟法和编码违例判决法。

③发现冲突、停顿发送假如有冲突,发送点进入停顿发送数据、随机延迟后重发的流程。

随机延迟重发的第一步是发送“冲突加强信号”。

④随机延迟重发以太网协议规定一个帧的最大重发次数为16。

假如重发的次数超过了16,那么认为线路故障,进入“冲突过多”完毕状态。

假如重发次数n≤16那么允许结点随机延迟再重发。

(2)以太网帧构造Ethemet V2.0规定的以太网帧构造由以下6个局部组成:①前导码。

②帧前定界符字段和前导码主要用于接收同步阶段。

③目的地址和地址字段,分别表示帧的接收结点地址和发送结点的硬件地址。

④类型字段,类型字段表示的是网络层使用的协议类型。

⑤数据字段,数据字段是高层待发送的数据局部。

数据字段最大长度为1500B。

以太网帧的最小长度为64B,最大长度为1518B。

⑥帧校验字段。

帧校验字段(FCS)采用32位的循环冗余校验(CRC)。

其校验的范围是:目的地址、地址、长度、LLC数据等字段。

2.以太网的物理地址以太网的物理地址是一个重要的`概念。

按照48位的连续的以太网物理地址编码方法,允许分配的以太网的物理地址应该有247个。

注意:网卡地址的格式。

如00-A6-38-01-05-A0网卡地址由6组两位的十六进制数组成。

每组数之间用一个连字符隔开。

前3组是公司标识,同一厂商的网卡地址前3组应该一样。

后3组是厂商自己分配的。

计算机网络课程设计(第四章)模拟Etnernet帧的发送过程(完整程序代码)

计算机网络课程设计(第四章)模拟Etnernet帧的发送过程(完整程序代码)

计算机网络课程设计——机械工业出版社第4章:模拟Etnernet帧的发送过程程序共分三个部分:填充帧头部字段,填充数据字段,计算CRC校验码并填充。

课程设计目的:Ethernet是当前应用最广泛的局域网类型。

学习Ethernet技术对深入掌握局域网知识是非常重要的。

本课程设计的主要目的是通过模拟Ethernet帧的发送过程,熟悉Ethernet的基本工作原理,特别是CSMA/CD介质访问控制方法。

注意文件名与程序代码的关联{红色标记}完整程序代码:#include "stdafx.h"#include "4.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif // The one and only application objectCWinApp theApp;CWinThread *thread1,*thread2;DWORD ID1,ID2,Bus=0;UINT aThread(LPVOID pParam);UINT bThread(LPVOID pParam);using namespace std;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){int nRetCode = 0;// initialize MFC and print and error on failureif (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {// TODO: change error code to suit your needscerr << _T("Fatal Error: MFC initialization failed") << endl;nRetCode = 1;}else{thread1=AfxBeginThread(aThread,NULL);ID1=thread1->m_nThreadID;thread2=AfxBeginThread(bThread,NULL);ID2=thread2->m_nThreadID;getchar();}return nRetCode;}UINT aThread(LPVOID pParam){int i=0;int CollisionCounter=16;double CollisionWindow=0.005;int randNum=rand()%3;Loop:if(Bus==0){Bus=Bus|ID1;Sleep(12);if(Bus==ID1){printf("%d send success\n",ID1);Bus=0;CollisionCounter=16;Sleep(rand()%10);i++;printf("主机a发送成功次数=%d\n",i);if(i<5)goto Loop;}elseprintf("%d send Collision\n",ID1);Bus=0;CollisionCounter--;if( CollisionCounter>0){Sleep(randNum*(int)pow(2,(CollisionCounter>10)?10:CollisionCounter)*Collisi onWindow);goto Loop;}else printf("%1d send failure\n",ID1);}}elsegoto Loop;return 0;}UINT bThread(LPVOID pParam){int i=0;int CollisionCounter=16;double CollisionWindow=0.005;int randNum=rand()%3;Loop:if(Bus==0){Sleep(2);Bus=Bus|ID2;Sleep(3);if(Bus==ID2){printf("%d send success\n",ID2);Bus=0;CollisionCounter=16;Sleep(rand()%10);i++;printf("主机b发送成功次数=%d\n",i);if(i<5)goto Loop;}else{printf("%d send Collision\n",ID2);Bus=0;CollisionCounter--;if( CollisionCounter>0){Sleep(randNum*(int)pow(2,(CollisionCounter>10)?10:CollisionCounter)*Collisi onWindow);goto Loop;}else printf("%1d send failure\n",ID2);}}elsegoto Loop;return 0;}。

计算机网络实验二--以太网MAC帧的构造

计算机网络实验二--以太网MAC帧的构造

实验报告课程名称计算机网络实验名称以太网 MAC 帧的构造实验类型验证型实验地点实验日期指导教师专业班级学号姓名成绩计算机与通信工程学院一、实验目的1. 了解网络协议仿真教学系统的工作原理。

2. 掌握网络协议分析器的基本使用方法,构造并发送MAC帧。

3. 掌握协议仿真编辑器的基本使用方法,分析捕获的MAC帧。

4. 掌握以太网帧的结构。

5. 理解MAC地址作用,识别MAC地址的形式。

二、实验环境LAN:100M 交换以太网。

操作系统:Windows XP,采用默认网络参数配置。

使用网络协议仿真教学系统。

三、实验描述验证型实验,2~4学时,两人一组进行。

在Ethernet MAC帧/MAC地址等内容讲授之后进行。

本实验包括参考文献[7]中“实验环境”、“网络协议仿真器的使用说明”、“网络协议分析器的使用说明”和“实验一以太网数据帧的构成”等3个基本实验项目的内容。

本实验项目是其它使用网络协议仿真教学系统实验项目的基础。

四、实验任务1. 熟悉“网络协议仿真教学系统”的结构和实验环境。

2. 学习使用“仿真编辑器”和“协议分析器”。

3. 构造并发送MAC帧。

构造MAC帧,帧中“数据”包括:实验日期、姓名1、姓名2,以仿真机为源发送给服务器。

4. 捕获并分析MAC帧。

捕获从仿真机用仿真编辑器发送的MAC帧并分析。

以太网 MAC 帧的构造与捕获实验项目:姓名:学号:专业班级:实验项目:以太网 MAC 帧的构造与捕获姓名:学号:专业班级:实验截图:思考题1. MAC 帧中 DA 在最前面有什么好处?答:每次适配器收到一个MAC帧就先检查帧中的MAC地址,如果不是发往本站就丢弃该帧2. MAC 帧的“长度/类型”字段的值=0800 或=0806 的差别。

答:“长度/类型”字段占16位,值=0800即表示IP协议帧,值=0806代表是ARP协议帧。

3. MAC 帧的“长度/类型”字段的值>1500 或≤1500 的作用。

计算机网络课设__封装Ethernet帧

计算机网络课设__封装Ethernet帧

成绩评定表课程设计任务书摘要本设计题目是封装Ethernet帧,要实现的功能是通过封装Ethernet 帧,了解Ethernet帧中各个字段的含义与用途。

首先介绍本题目的相关知识,有帧的结构及和CRC冗余校验算法。

其次是程序设计分析,主要包括填充帧头部字段、填充数据字段和CRC 校验,并根据算法给出了程序流程图。

最后,是程序运行结果及实现代码,运行结果符合设计要求。

本程序主要关键词有:帧,CRC冗余校验,封装,填充等。

目录1.课程设计目的. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 2.课程设计要求. . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 3.相关知识. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 4.课程设计分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 5.相关扩展. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 6.程序代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 7.运行结果与分析. . . . . . . . . . . . . . . . . . . . . . . . . . . .16 8.参考文献. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171课程设计目的帧是在数据链路层中进行数据传输的基本单位。

CSMACD的c语言仿真

CSMACD的c语言仿真

模拟Etherner帧的发送过程摘要近年来,局域网技术发展十分迅速,目前已在企业、机关、学校的信息管理与信息服务领域中得到了广泛的应用。

在早期,人们将局域网归为一种数据通信网络。

随着局域网体系结构和协议标准研究的进展、操作系统的发展以及光纤技术的引入,局域网技术得到了快速发展。

目前,Ethernet是应用最广泛的局域网。

本次课程设计模拟Ethernet帧的发送过程,熟悉Ethernet帧的数据发送流程,即CSMA/CD运作流程。

关键字CSMA/CD 数据通信协议标准Ethernet帧截止二进制指数后退算法模拟发送1 设计题目与要求1.1 设计题目:模拟Ethernet帧的发送过程1.2 设计要求:本课程设计的目的是模拟Ethernet帧的发送过程,使读者熟悉Ethernet帧的数据发送流程,即CSMA/CD32运作流程:1)、用两个线程a和b来模拟Ethernet上的两台主机。

2)、用一个双字类型变量Bus来模拟总线(将其初始化为”\0”,并且总线等于”\0”时表示总线空闲)。

3)、两个子线程向总线发送自己的数据。

数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。

4)、每台主机必须将总线上发送成功10次数据,如果其中某次数据发送失败,则该线程结束。

5)、发送流程必须遵循CSMA/CD。

随机延迟算法中的冲突窗口取0.005。

在数据发送成功(即Bus==ID)后,报告“ID send success”,产生冲突(即Bus!=ID)后报告“ID send conllision”,发送失败(即冲突计数器值为0)后报告“ID send failure”。

随着主机发送次数增加,报告其已经发送成功的次数,如“主机A发送成功数=3”。

2 开发平台、语言、工具2.1 系统平台:Windows系统2.2 编程语言:C/C++语言2.3 编程工具:Visual C++ 6.03.设计思想与算法结构3.1 设计思想3.1.1 Ethernet帧的发送流程1)载波侦听过程。

计算机网络课程设计报告--模拟Enthernet帧的发送过程

计算机网络课程设计报告--模拟Enthernet帧的发送过程

计算机网络课程设计报告题目:模拟Enthernet帧的发送过程一、问题描述(把你所选的题目及要求说一下)本次课程设计的目的是模拟Enthernet帧的发送过程,我们采用线程代替计算机,利用带有冲突检测的CSMA/CD协议进行信道侦听,采用截断的二进制指数退避算法解决信道冲突问题。

二、概要设计(抽象数据类型定义)程序开始发送帧时,首先要检测信道是否空闲,如果不空闲就继续检测,如果空闲就看信道上是否发生冲突,如果发生冲突,数据帧就结束发送,冲突加强,冲突次数加一,如果冲突次数大于16就丢弃这个帧,不大于16就推迟一定时间继续检测信道的忙闲,准备发送。

intbus()函数,用于随机模拟实际信道是否空闲;返回1表示空闲;intCo1IiSion()函数,用于模拟信道冲突是否发生;返回1表示发生冲突;重写线程的run()函数,用于实现功能逻辑;intcount用于累计发生冲突的次数,以便应用CSMA/CD规则一一连续16冲突则发送失败。

三、详细设计(主要算法和函数间的调用关系)分析Enthernet帧的发送过程:(1)载波侦听过程。

Enthernet利用信道发送数据,信道是每个帧共享的公共传输介质.所以每个帧在发送数据之前,总是先侦听信道是否空闲。

若信道空闲,就可以启动发送,否则继续侦听。

(2)冲突检测。

当侦听到信道空闲时,可能有多个线程同时发送数据。

所以在发送数据的过程中,也应该进行冲突检测,一旦发现冲突,就立即停止发送数据。

(3)随后延迟重发。

在检测到冲突后,立即停止发送帧,然后等待一段随机时间(随机时间的取值为在2倍的争用期乘以rand%(2Ck-1),其中k=min(重传次数,10))再重新发送。

若发送16次还没有成功,则说明帧发送失败。

主要函数:intco11ision();intbus();voidrun();函数调用:在VOidrun()函数中调用intbus()函数和intco11ision()函数。

(完整word版)网络数据帧的解析,封装和发送文档

(完整word版)网络数据帧的解析,封装和发送文档

帧的解析、封装与模拟发送说明文档姓名:李健学号:2120100330专业:计算机软件与理论班级:2010级1班1一、背景知识1.1 帧结构帧是网络通信的基本传输单元,熟悉帧结构对于理解网络协议的概念、协议执行过程以及网络层次结构具有重要的意义。

本次作业的目的是应用数据链路层与介质访问控制子层的知识,根据数据链路层的基本原理,通过封装和解析Ethernet 帧,了解Ethernet 帧结构中各个字段的含义,从而深入理解Internet 协议族中的最底层协议—-数据链路层协议。

网络节点间发送数据都要将它放在帧的有效部分,分为一个或多个帧进行传送。

节点之间可靠的帧传输不仅是通信的保障,而且还可以实现网络控制等各种功能.1980年,Xerox、DEC与Intel等三家公司合作,第一次公布了Ethernet的物理层、数据链路层规范;1981年Ethernet V2。

0规范公布;IEEE 802.3 标准是在Ethernet V2。

0规范的基础上制定的,IEEE 802。

3针对整个CSMA/CD网络,它的制定推动了Ethernet技术的发展和广泛应用。

Ethernet V2.0规范和IEEE802。

3标准中的Ethernet帧结构有一些差别,这里我们按Ethernet V2.0的帧结构进行讨论。

图1给出了Ethernet帧结构图。

图1。

1 IEEE802.3标准Ethernet帧结构如图1。

1所示,802.3标准中Ethernet帧结构由以下几个部分组成:(1)前导码和帧前定界符前导码由56位(7Byte)的10101010…1010比特序列组成,帧前定界符由一个8位的字节组成,其比特序列位10101011。

前导码用于使接收端同步,不计入帧头长度。

帧前定界符也不计入帧头长度。

(2)目的地址和源地址目的地址与源地址均分别表示帧的接收结点与发送结点的硬件地址。

硬件地址一般称作MAC 地址或物理地址。

在Ethernet 帧中,目的地址和源地址字段长度可以是2B 或6B。

计算机网络课程设计内容及要求

计算机网络课程设计内容及要求

《计算机网络课程设计》一、课程设计的目的计算机网络课程设计是专业实践环节之一,是学习完《计算机网络》课程后进行的一次全面的综合练习。

本课程设计的目的是引导学生将书本上抽象的概念与具体的实现技术相结合,使学生体会网络协议的设计与实现过程,以及专业技术人员所使用的基本方法和技巧,培养学生解决计算机网络问题的实际能力,掌握组建计算机网络的基本技术,提高学生的综合应用能力。

二、课程设计要求和内容课程设计要求:1、正确理解题意;2、具有良好的编程规范和适当的注释;3、有详细的文档,文档中应包括设计题目涉及的基础知识、设计思路、程序流程图、程序清单、开发中遇到的问题及解决方法、设计中待解决的问题及改进方向。

4、有一定的自学能力和独立分析问题、解决问题的能力。

包括学会自己分析解决问题的方法,对设计中遇到的问题,能通过独立思考、查阅工具书、参考文献,寻找解决方案。

评分标准:1.是否有正确的运行结果;2.是否有良好的编程规范和适当的注释;3.文档是否完备。

课程设计内容即参考题目:(任选下列一题或自行另选设计题目):XX高校校园网网络规划与设计一、需求分析(1)用户规模500台计算机。

(2)用户大致平均分散在4栋楼房内,4栋楼房排成前后两排,楼房之间各相距200米,楼房高4层。

每栋楼的4楼用户构成两个VLAN。

(3)中心机房设在其中1栋楼房的1楼靠近另一栋楼房的一端。

(4)安装对外WWW、业务WWW、邮件、、DNS、数据库七个服务器。

提供匿名服务,但FTP仅对内部开放。

(5)提供LAN、WLAN接入。

(6)在业务WWW服务器上配备基于Web的业务应用系统,所有用户使用业务系统实现网上办公。

(7)要求出口带宽为1Gbps。

二、设计要求(1)写出简要的可行性分析报告。

(2)设计网络结构,并给出解释。

(3)除用户计算机已购置外,其余全部设备和通信线路需要重新购买、安装。

试具体给出全部主要设备的配置、型号或技术指标及其测算依据。

模拟以太帧的发送过程

模拟以太帧的发送过程

基于Linux的Ethernet桢的发送过程模拟2007-09-13 15:20/*基于Linux的Ethernet桢的发送过程模拟网络四班彭华*/#include <unistd.h> /*包含类型pid_t的定义*/#include <stdio.h>#include <sys/wait.h>#include <sys/ipc.h>#include <sys/shm.h>#include <sys/types.h>#include <error.h>#define ERROR_SHMGET -1#define ERROR_SHMAT -2#define ERROR_WAIT -3#define ERROR_FORK -4#define SLOT_TIME 51.2/*截止二进制指数后退算法的实现随机延迟重发.最典型的CSMA/CD后退延迟算法是截止二进制指数后退延迟算法,该算法可以表示为:τ=2k•R•a .τ为结点重新发送需要的后退延迟时间,a为冲突窗口值,R为随机数;限定k的范围,k=min(n,10);如果重发次数n<10,则取k=n;如果重发次数n≥10时,则k取值为10;第n次重发延迟是分布在0与[2min(n,10)-1]个时间片之间,最大可能延迟时间为1023 个时间片;在到后退延迟时间之后,重新判断总线忙、闲状态,重复发送流程;当冲突次数超过16时,表示发送失败,放弃该帧发送。

*/static unsigned long get_backoff(const int n){double exp_rand_slot;unsigned long backoff;int k = n;k = 16 - k;if(k > 10){k = 10;}exp_rand_slot = (1<<k)*random()*SLOT_TIME;/*slot time有的书译为“碰撞槽时间”是在局域网中传输一个帧的最小时间。

封装Ethernet帧课程设计CSDN

封装Ethernet帧课程设计CSDN

封装Ethernet帧课程设计CSDN一、课程目标知识目标:1. 学生理解以太网帧的结构和封装过程,掌握相关概念,如MAC地址、帧类型、校验等。

2. 学生能够描述不同类型的以太网帧,并了解其在计算机网络中的应用和作用。

3. 学生掌握以太网帧的传输过程,了解数据在局域网中的传输机制。

技能目标:1. 学生能够利用相关工具或软件手动封装以太网帧,实践帧的构造和解析过程。

2. 学生通过实际操作,学会使用网络抓包工具分析以太网帧,培养实际网络问题排查能力。

情感态度价值观目标:1. 学生培养对计算机网络知识的好奇心和探究精神,提高对网络技术学习的兴趣。

2. 学生通过学习,认识到网络技术在现代社会中的重要性,增强信息安全意识。

3. 学生在学习过程中,培养团队合作精神,提高沟通与协作能力。

课程性质分析:本课程为计算机网络基础知识课程,旨在帮助学生建立扎实的网络基础,为后续学习更高级的网络知识奠定基础。

学生特点分析:本课程针对的对象为高中信息技术课程的学生,他们对计算机和网络有一定的了解,但可能对具体的技术细节掌握不足。

教学要求:1. 理论与实践相结合,注重培养学生的实际操作能力。

2. 采用案例教学,使学生能够更好地理解以太网帧在实际应用中的作用。

3. 鼓励学生提问和分享,激发学生的学习兴趣和思考。

二、教学内容1. 以太网帧基本概念:介绍以太网帧的定义、结构和组成,包括MAC地址、帧类型、帧校验序列等。

- 教材章节:第二章第二节“以太网帧结构”2. 以太网帧类型:讲解不同类型的以太网帧,如IPv4帧、ARP帧、VLAN帧等。

- 教材章节:第二章第三节“以太网帧类型”3. 封装与解封过程:阐述以太网帧的封装过程,包括帧头、帧尾的添加,以及数据封装;解封过程则相反。

- 教材章节:第二章第四节“以太网帧的封装与解封”4. 数据传输机制:介绍以太网帧在局域网中的传输过程,如CSMA/CD协议、全双工和半双工模式等。

- 教材章节:第三章第一节“局域网技术基础”5. 实践操作:利用网络抓包工具(如Wireshark)进行以太网帧的抓取、分析和封装实践。

ethernet工作原理

ethernet工作原理

ethernet工作原理Ethernet是一种局域网传输技术,它使用电缆或光纤连接网络设备,以实现数据的传输和通信。

以下是Ethernet的工作原理:1. 使用CSMA/CD协议:Ethernet采用载波侦听多路访问/冲突检测(CSMA/CD)协议,即在发送数据之前会先监听媒介上是否有其他设备发送数据。

如果检测到冲突,则会暂停发送并随机等待一段时间,然后再次发送。

2. 数据帧的传输:数据在Ethernet网络中以数据帧的形式传输。

一个数据帧通常包括源和目标设备的物理地址(MAC地址),以及数据的实际内容。

数据帧会沿着网络传输,并在接收端被解析和处理。

3. 分组交换:当两台设备之间进行通信时,数据被分割为较小的数据包,称为分组。

这些分组通过Ethernet网络中的交换机进行路由,以最高效和快速地到达目标设备。

交换机会根据目标设备的MAC地址将数据包转发到相应的端口。

4. 信号传输和解析:Ethernet使用Baseband信号传输,即以数字形式表示数据。

发送设备将数字数据转换为电信号,并通过电缆或光纤传输。

接收设备接收信号,并将其重新转换为数字数据。

这种数字到模拟的转换过程在发送设备和接收设备之间实现。

5. 网络拓扑:Ethernet可以以多种拓扑结构部署,如总线型、星型、环形或混合型拓扑。

拓扑结构定义了网络中设备之间的连接方式,并影响数据的传输效率和可靠性。

总的来说,Ethernet通过使用CSMA/CD协议、数据帧传输、分组交换、信号传输和解析等机制实现数据的高效传输和通信。

这种技术广泛应用于现代计算机网络中,提供了可靠和快速的数据传输方式。

Ethernet帧结构解析程序

Ethernet帧结构解析程序

Ethernet帧的解析、封装和模拟发送说明文档姓名:***学号:**********一、背景知识TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如Ethernet,令牌环网,FDDI(Fiber Distributed Data Interface,光纤分布式数据接口)等。

基于不同的硬件的网络使用不同形式的帧结构,Ethernet是当今应用最广泛的局域网技术。

Ethernet V2.0的帧结构:1.前导码和帧前定界符。

字段前导码由56位(7B)的101010...1010比特序列组成,帧前定界符由一个8位的字节组成,其比特序列为10101011。

如果将前导码与帧前定界符一起看,那么在62位101010...1010比特序列之后出现11。

在这个11之后便是Ethernet帧的目的地址字段。

从Ethernet物理层角度看,接收电路从开始接收比特到进入稳定状态,需要一定的时间。

设计前62位1和0的交替比特序列的目的是保证接收电路在帧的目的地址到来之前到达正常状态。

接收端在收到最后两位11时,标志在他之后应该是帧的目的地址。

前导码与帧前定界符主要起到接收同步的作用,这8个字节接收后不需要保留,也不计入帧头长度。

2.目的地址和源地址。

目的地址与源地址分别表示帧的接收节点与发送节点的硬件地址。

硬件地址一般称作MAC地址,物理地址或Ethernet地址。

地址长度为6B(即48位)。

为了方便起见,通常使用十六进制数字书写。

Ethernet帧的目的地址可分为3种:单播地址(unicast address):目的地址的第一位为0表示单播地址。

目的地址是单播地址,则表示该帧只被与目的地址相同的节点所接收● 多播地址(multicast address ):目的地址第一位为1表示多播地址。

目的地址是多播地址,则表示该帧被一组节点所接收。

● 广播地址(broadcast address ):目的地址全为1表示广播地址。

A1网桥的模拟:帧转发和站表维护

A1网桥的模拟:帧转发和站表维护

《计算机网络原理》课程设计指导书
网桥的帧转发和站表维护过程的模拟和演示湖南工业大学计算机与通信学院执笔金可音 2012年5月1日修改
【功能】
模拟透明网桥中,帧的转发和过滤、转发表的维护(自学习)
程序设计语言不限,可以用c,c++,java 编写
【预习】
1.熟悉网桥的帧转发过程;
2.熟悉网桥的站表维护过程;
3.熟悉开发环境与程序调试环境。

【问题的简化】
1.用N个(如2个)文件存储来自N个端口(网段)的一系列帧(主要关心帧的首部)。

如:
网段1发来的文件中的帧是(A->B,A->Z,B->X,C->Y)
网段2发来的文件中的帧是(Z->A,Y->X,X->B)
2.接收:从一个文件读入一帧。

3.处理:
(1)判断是否转发:
如果接收端和发送端在同一网段,显示“丢弃”;
如果接收端和发送端在不同网段,显示“定点转发”;
如果不知道是否在同一段,显示“除入口外的广播”
(2)自学习过程(维护转发表)
开始,转发表为空,网桥读网段发来的一帧,完成添加或更新。

(3)每处理一帧,
显示从哪个端口(网段)读入了一帧,并显示其源站地址;
显示站表维护类型:增加记录、更新记录
显示一次转发表的当前值,便于检查。

【提示】
1.定义站表;
2.设计一个函数/方法f,读入一帧信息,实现:
a)转发表的维护
b)帧的处理:转发、广播或丢弃(过滤)
3.设计一个程序,多次调用f
【站表的格式】
【调试数据】N个(如2个)文件存储的来自N个端口(网段)的一系列帧的首部。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.课 程 设 计2014——2015学年 第2学期课程名称 计算机网络 学 院 计算机科学与技术学院 专 业 软件工程专业 班 级*** 姓 名 *** 指导教师 ***课程实践设计任务书学生姓名: *** 专业班级: *** 指导教师:刘东飞工作单位:计算机学院题目二: 模拟Ethernet帧的发送过程初始条件:(1)学习相关知识(2)C/C++/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)编写程序模拟Ethernet节点的数据发送流程。

具体要求:1)用两个线程a和b来模拟Ethernet上的两台主机。

2)用一个双字类型变量Bus来模拟总线(将其初始化为“\0”,并且总线等于“\0”时表示总线空闲)。

3)两个子线程向总线发送自己的数据。

数据用该线程的线程号进行模拟,发送数据用线程号和Bus的“或”操作进行模拟(即Bus=Bus|ID,ID为该线程的线程号)。

4)每台主机需向总线上成功发送10次数据,如果其中某次数据发送失败,则该线程结束。

5)发送流程必须遵循CSMA/CD。

随即延迟算法中的冲突窗口取0.005。

在数据发送成功(即Bus==ID)后,报告“ID send success”,产生冲突(即Bus!=ID)后报告“ID send conllision”,发送失败(即冲突计数值为0)后报告“ID send failure”。

随着主机发送成功次数增加,报告其已发送成功的次数,如“主机A发送成功数=3”。

时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录一、知识背景 (5)1.网络协议 (5)2.以太网 (5)3.CSMA/CD协议 (5)4.截断二进制指数退避算法 (6)二、程序设计分析 (7)1.程序框架 (8)2.环境介绍 (8)3.数据结构 (9)4.子线程 (9)5.获得子线程ID (9)6.发送数据 (10)三、实验截图 (11)四、课设总结 (13)五、程序清单 (13)一、知识背景1. 网络协议开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。

它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram)。

这是一个与硬件无关的虚拟包,由首部和数据两部分组成,其格式如图所示。

首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。

在首部的固定部分的后面是一些可选字段,其长度是可变的。

首部中的源地址和目的地址都是IP协议地址。

2. 以太网以太网(Ethernet)指的是由Xerox公司创建并由Xerox、Intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议标准。

以太网络使用CSMA/CD (载波监听多路访问及冲突检测)技术,并以10M/S的速率运行在多种类型的电缆上。

以太网与IEEE802.3系列标准相类似。

包括标准的以太网(10Mbit/s)、快速以太网(100Mbit/s)和10G(10Gbit/s)以太网。

它们都符合IEEE802.33. CSMA/CD协议CSMA/CD(Carrier Sense Multiple Access with Collision Detection)即带冲突检测的载波监听多路访问技术。

在传统的共享以太网中,所有的节点共享传输介质。

如何保证传输介质有序、高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题CSMA/CD是一种争用型的介质访问控制协议。

它起源于美国夏威夷大学开发的ALOHA网所采用的争用型协议,并进行了改进,使之具有比ALOHA协议更高的介质利用率。

主要应用于现场总线Ethernet中。

另一个改进是,对于每一个站而言,一旦它检测到有冲突,它就放弃它当前的传送任务。

换句话说,如果两个站都检测到信道是空闲的,并且同时开始传送数据,则它们几乎立刻就会检测到有冲突发生。

它们不应该再继续传送它们的帧,因为这样只会产生垃圾而已;相反一旦检测到冲突之后,它们应该立即停止传送数据。

快速地终止被损坏的帧可以节省时间和带宽。

CSMA/CD控制方式的优点是:原理比较简单,技术上易实现,网络中各工作站处于平等地位,不需集中控制,不提供优先级控制。

但在网络负载增大时,发送时间增长,发送效率急剧下降。

CSMA/CD应用在 OSI 的第二层数据链路层它的工作原理是: 发送数据前先侦听信道是否空闲 ,若空闲,则立即发送数据。

若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。

若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。

其原理简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发4. 截断二进制指数退避算法截断二指数指数退避算法并不复杂。

具体的退避算法如下:1.确定基本退避时间,它就是争用期。

以太网把争用期定为51.2us。

对于10Mb/s以太网,在争用期内可发送512bit,即64字节。

也可以说争用期是512比特时间。

1比特时间就是发送1比特所需要的时间。

所以这种时间单位与数据率密切相关。

2.从离散的整数集合[0,1,…,]中随机取出一个数,记为r。

重传应推后的时间就是r倍的争用期。

上面的参数k按下面的公式计算:k=Min[重传次数,10]可见当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,k就不在增大而一直等于10。

3.当重传达16次仍不能成功时(这表明同时打算发送的数据站太多,以致连续发生冲突),则丢弃该,并向高层报告。

例如,在第1次重传时,k=1,随机数r从整数{0,1}中选一个数。

因此重传推迟的时间是0或争用期,在这两个时间中随机选择一个。

若再发生碰撞,则重传时,k=2,随机数r就从整数{0,1,2,3}中选一个数。

因此重传推迟的时间是在0,2,4和6这4个时间中随机抽取一个。

同样,若在发生碰撞,则重传时k=3,随机数r就从整数{0,1,2,3,4,5,6,7}中选一个数。

以此类推。

若连续多次发生冲突,就表明可能有较多的站参与争用信道。

但使用退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。

我们还注意到,适配器每发送一个新的帧,就要执行一次CMSA/CD算法。

适配器对过去发生过的碰撞并无记忆功能。

因此,当好几个适配器正在执行指数退避算法时,很可能有某一个适配器发送的新帧能够碰巧立即成功插入到信道中,得到了发送权。

我们可以看出,以太网在发送数据时,如果帧的前64字节之内没有发生冲突,那么后续的数据就不会发生冲突。

换句话说,如果发生冲突就立即中止发送,这时已经发送出去的数据一定小于64字节,因此以太网规定了最短有效的帧长为64字节,凡长度小于64字节的帧都是由于冲突而异常中止的无效帧。

收到了这种无效帧就应当立即丢弃。

二、程序设计分析1.2. 环境介绍操作系统Ubuntu 14.04G++ 4.4.33. 数据结构使用wchar_t 来表示双字节。

而在C++中推荐使用const来代替define4. 子线程C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件<thread>、<mutex>、<atomic>、<future>等用于支持多线程。

在主函数中使用thread的构造函数可以调用子线程并且传参数。

主线程调用thread 对象t1、t2的join函数等待线程执行结束。

5. 获得子线程ID在C++11中的获取线程ID方式与pthread中的略微不同,我们使用的方法是在子线程中,使用std::this_thread::get_id()来获取子线程ID。

但此时获取到的ID是一个hashmap。

我们可以将其转化为字符串,再由字符串转化为ID值6. 发送数据在此函数中如果BuS=0 的时候才能执行,否则一直循环。

使用位运算BUS|=Pid模拟线路上的电压变化。

使用uniform_int_distribution需要引入<random>头文件,这个是C++11中新的随机数方式,在之前都是使用C语言中的方式。

而是用这种方式,出现的rand数是“真随机数”,而非C语言中的假随机数。

使用randnum(0,pow(2,min(RepeatCounter,10)-1))来实现截断二进制指数退避算法。

如果RepeatCounter>=16,则放弃发送此包。

注意,此处使用printf而非cout,因为cout不是线程安全的,易出现字符串打断现象。

而printf是线程安全的。

可以直接使用。

在编译这个程序的时候,需要使用其中std=c++0x是指使用的是C++11的标准。

–pthread 是指需要引入pthread 头文件。

然后在同文件夹下会生成a.out的程序。

使用./a.out即可运行程序。

三、实验截图四、课设总结这个课设的题目我非常喜欢,看似简单的题目实际包含了很多东西:多线程、CSMA/CD 协议、以及对截断二进制指数退避算法的理解。

在我做这个的时候,实际上之前很少使用多线程技术,尤其是C++11这种网上资料还比较少的多线程库。

在做这个的时候,我分别参考了《C++标准库-自学教程与参考手册》中对thread库的说明,以及《深入理解计算机系统》中并发编程部分对pthread的讲解。

感觉收获很大。

在做这个课设的时候,我专门把开发环境搬到了Linux上面去做。

之前一直很少使用Ubuntu,但这次却从搭建环境,编译程序各部分,对Linux有了一个初步的认识。

以后也会将开发环境越来越多的向Linux下迁移。

在学习理论知识的时候,虽然对这部分很熟悉。

但总感觉缺少了些什么,做了这个题目之后才有了更深的体会和理解。

明白了这些协议的重要性。

受益匪浅!五、程序清单#include <iostream>#include <thread>#include <random>#include <cmath>#include <unistd.h>#include <sstream>#include <cstdio>using namespace std;wchar_t BUS='\0'; //双字类型变量Bus来模拟总线const int conflictmax=16;const int conflictwindow=0.005;void call_thread(char name){//auto Pid=this_thread::get_id();int RepeatCounter=1;//记录目前是第几次发送int SuccessCounter=1;//记录成功发送的个数,最大为1//cout<<Pid.hash()<<"\n"<<endl;std::stringstream ss;ss << std::this_thread::get_id();wchar_t Pid = std::stoull(ss.str());while(true){if(BUS=='\0')//当总线为空的时候,可以发送数据{BUS|=Pid;sleep(2);if(BUS==Pid){printf("ID %s send success\n",ss.str().c_str()); printf("主机%c发送成功数%d\n",name,SuccessCounter); BUS=0;RepeatCounter=1;SuccessCounter++;if(SuccessCounter>10)return;}else{RepeatCounter++; //重发次数加一if(RepeatCounter>=16){printf("ID %s send failed\n",ss.str().c_str()); return;}else{//使用截断二进制退避算法uniform_int_distribution<unsigned>randnum(0,pow(2,min(RepeatCounter,10)-1));default_random_engine e;printf("ID %s send conllision\n",ss.str().c_str()); auto sleeptime=randnum(e);sleep(sleeptime);continue;}}}}}int main(){std::thread t1(call_thread,'A');std::thread t2(call_thread,'B');t2.join();t1.join();return 0;}。

相关文档
最新文档