计算机网络实验(一)
计算机网络实验目录
- eth协议实现
- ARP协议实现
- RIP路由配置和协议分析
- IP协议实现
- ICMP协议实现
- UDP协议实现
- NAT组网
- 邮件客户端的设计与实现
文章目录
- 计算机网络实验目录
- 前言
- 基础知识
- 一、数据链路层基本工作
- 二、数据链路层协议
- 二、MAC地址
- 三、以太网MAC帧格式
- 实验实现
- 一、分析
- 字节序分析
- 二、代码:
前言
HITSZ 2022春计算机网络实验记录,并结合计网理论课程内容进行复习总结
实验网址
基础知识
一、数据链路层基本工作
数据链路层的基本工作:
- 封装成帧:添加首部(SOH)和尾部(EOT)进行帧界定,划分IP数据报内容,首部和尾部还包含必要的控制信息。各种链路层协议都对首部和尾部有明确的规定,同时规定数据部分的长度上限(MTU)
- 透明传输:在数据部分中可能出现的SOH和EOT前加ESC转义字符
- 差错检测:如循环冗余检测CRC(FCS帧检验序列,属于数据后面添加的冗余码)
二、数据链路层协议
- PPP协议(点对点协议,可靠传输协议):用户计算机与ISP进行通信时所用的协议
- 广播信道(一对多通信):以太网使用
- CSMA/CD协议:不可靠传输协议,使用载波监听和碰撞检测,是总线型以太网采用的协议。
二、MAC地址
MAC地址实际上是局域网适配器的标识地址,又叫物理地址或者硬件地址,MAC的6字节地址被固化在适配器的ROM中。世界上的每一个适配器都有唯一的地址。
三、以太网MAC帧格式
总线型和星型网络结构均使用以太网帧
- 以太网帧不需要EOT:使用曼彻斯特编码,但接受的电平不发生转变时,只需前移4个字节即可找到数据的结束位置
去除报头和FCS得到链路层的数据帧:
- MAC目标地址:接收帧的网络适配器的物理地址(MAC地址),6个字节。
- 当网卡接收到一个数据帧时,首先会检查该帧的目的地址,如果与当前适配器的物理地址相同,进一步处理
- 帧的目的地址为广播地址(FF-FF-FF-FF-FF-FF),进一步处理;
- 否,则直接丢弃。
- MAC源地址:发送帧的网络适配器的物理地址,6个字节。
- 类型,2个字节:
- 当该值在0x05DC(10进制数为1500)以下,表示该以太网数据帧长度;
- 在0x0600以上时,则表示上层协议的类型,标识数据交付哪个协议处理。
实验实现
一、分析
实际上就是对接收到的以太网MAC帧进行处理,由于封装好了很多包,所以只需要进行基础函数编写,需要注意:
- memcpy使用的时候最好指定清楚拷贝的大小
- 注意大小端字节序
字节序分析
原文链接
网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节
。小端模式的多字节数据在存放时,低地址存放的是低字节,而被发送方网络协议函数发送时会首先去低地址取数据(想要取高字节,真正取得是低字节),接收方网络协议函数接收时会将接收到的第一个字节存放到低地址(想要接收高字节,真正接收的是低字节),所以最后双方都正确的收发了数据。而相同平台进行通信时,如果双方都进行转换最后虽然能够正确收发数据,但是所做的转换是没有意义的,造成资源的浪费。而不同平台进行通信时必须进行转换,不转换会造成错误的收发数据,字节序转换函数会根据当前平台的存储模式做出相应正确的转换,如果当前平台是大端,则直接返回不进行转换,如果当前平台是小端,会将接收到得网络字节序进行转换。
二、代码:
void ethernet_in(buf_t *buf)
{// TO-DO//首先判断数据长度,如果数据长度小于以太网头部长度,则认为数据包不完整,丢弃不处理。if(buf->len < sizeof(ether_hdr_t)){return;}//调用buf_remove_header()函数移除加以太网包头。ether_hdr_t header;memcpy(&header, buf->data, sizeof(ether_hdr_t));buf_remove_header(buf, sizeof(ether_hdr_t));//调用net_in()函数向上层传递数据包, protocol需要反转大小端,其它不要(源地址和目的地址反转后也是唯一)net_in(buf, swap16(header.protocol16), header.src);
}
/*** @brief 处理一个要发送的数据包* * @param buf 要处理的数据包* @param mac 目标MAC地址* @param protocol 上层协议*/
void ethernet_out(buf_t *buf, const uint8_t *mac, net_protocol_t protocol)
{// TO-DO//Step1 :首先判断数据长度,如果不足46则显式填充0,填充可以调用buf_add_padding()函数来实现。if(buf->len < 46){buf_add_padding(buf, (size_t)(46 - buf->len));}//Step2 :调用buf_add_header()函数添加以太网包头。buf_add_header(buf, sizeof(ether_hdr_t));ether_hdr_t *hdr = (ether_hdr_t *)buf->data;//Step3 :填写目的MAC地址。memcpy(hdr->dst, mac, NET_MAC_LEN * sizeof(uint8_t)); //Step4 :填写源MAC地址,即本机的MAC地址。memcpy(hdr->src, net_if_mac, NET_MAC_LEN * sizeof(uint8_t));//Step5 :填写协议类型 protocol。需要反转uint16_t protocol16 = swap16(protocol);memcpy(&(hdr->protocol16), &protocol16, sizeof(uint16_t));//Step6 :调用驱动层封装好的driver_send()发送函数,将添加了以太网包头的数据帧发送到驱动层。driver_send(buf);
}
计算机网络实验(一)相关推荐
- 计算机网络实验五,计算机网络(实验五).docx
计算机网络(实验五).docx 实验五一.实验内容在这个实验室里,我们将探讨ICMP 协议得几个方面由 Ping 项目产生得P 信息Tracer ute程序生成得C消息关于 CM 信息得格式与内容.在 ...
- 计算机网络实验ip数据报转发,计算机网络实验报告三网际协议IP.doc
计算机网络实验报告三网际协议IP 计算机网络实验报告 实验题目:网际协议IP学号:201200301106日期:2014/11/20班级:2012级软工3班姓名: 李凯峰实验目的: 1.掌握IP数据报 ...
- 计算机虚拟网络毕业论文,计算机毕业论文——基于WEB的虚拟计算机网络实验平台.doc...
PAGE Tianjin University of Technology and Education 毕 业 设 计 专 业: 计算机科学与技术 班级学号: 计0203班 – 11 学生姓名: 指导 ...
- 计算机网络协议教案,计算机网络实验教案(6)网络协议分析-IP协议3.pdf
计算机网络实验教案(6)网络协议分析-IP协议3.pdf (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机网络实验> ...
- 配置实验室计算机步骤,计算机网络实验指导书(new)
计算机网络实验指导书 实验一 以太网的组建(2学时) 实验名称:以太网的组建 实验目的: 1.了解实验室布局:认识交换机与路由器的结构与连接方法: 2.掌握简单的局域网组网方法: 3.掌握简单的局域网 ...
- 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...
贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...
- 宁波大学计算机网络实验五,宁波大学计算机网络实验答案.doc
宁波大学计算机网络实验答案 实验三 DNS协议分析 思考题: Q1.运行nslookup,查询并记载你的本地DNS 服务器名称及其IP 地址, 的 权威DNS 服务器名称及其IP 地址: A: 运行 ...
- 计算机网络实验设计应用题,计算机网络实验三实验报告.doc
计算机网络实验三实验报告 实验综合成绩 (百分制) 实验评阅教师签名其中实验态度优良中及格不及格实验报告优良中及格不及格 实 验 报 告 实验时间: 2015年 12 月 24日 实验运行环境 win ...
- 计算机网络技术教法改革方案,计算机网络实验论文,关于“计算机网络”教学改革相关参考文献资料-免费论文范文...
导读:本文是一篇计算机网络实验论文范文,可作为选题参考. (西南科技大学国防科技学院) 摘 要:"计算机网络"是一门理论与实践性都很强的课程,针对该课程存在教学模式与教学方法陈旧. ...
- 计算机网络平台实验,计算机网络实验
课程简介 "计算机网络实验"课程是计算机学院三年级本科生实践类必修课.本课程主要配合计算机网络课程,通过实验帮助学生学习和理解网络原理与协议,培养学生的动手能力.工程实践能力和综合 ...
最新文章
- 二元关系在计算机中的应用(数据库为主),数据库技术复习题答案 选择题
- Asp.net Mvc问题索引
- C# 索引器(Indexer)
- 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing
- java标签居住对齐_java期末复习(八)
- JVM学习手册(X):查看堆内存使用情况以及排错
- JAVA接口继承、抽象类等
- php java memcached_php-memcached详解
- 给next添加彩色标签
- Visual Studio 2015 官方下载及密钥
- html鼠标爱心特效代码,鼠标点击爱心特效代码分享
- 常见游戏限制多开原理、与解决游戏多开方法
- mysql 2037年_Correct way to store MySQL date after year 2037
- 计算机快捷方式图标没显示不出来,程序快捷方式不显示图标怎么办?Win10快捷方式图标变白纸解决方法...
- 美国交通信号配时实践经验
- 软件测试员工作经验分享
- 项目技术管理经验总结
- CSDN:2020 年度 CSDN 博客之星评选——28 号【沉默王二】,感谢你投上的宝贵一票,感谢!
- iOS 手机记录登录账号密码列表
- 武警摔擒、擒敌拳1-16动连贯动作 分解动作