发送Ethernet+ARP数据包
精简版实验四:Ethereal Lab — Ethernet and ARP
实验四:Ethereal Lab —Ethernet and ARP一、实验目的(1)研究Ethernet的帧格式(2)ARP协议的请求应答机制(3)ARP缓存的管理二、实验原理以太网技术在当前局域网领域占据主流的地位,是最近三十年来最成功的网络技术之一。
不同格式的以太网帧各字段定义各不相同,彼此也不兼容。
Ethernet II以太网标准帧格式是以太网的事实标准,其各字段的定义如下图.ARP协议是一种用于将各种协议地址解析为物理地址的协议. ARP报文分为两种,一种为ARP请求报文,另一种是ARP响应报文.为了提高ARP的效率,在主机内开辟一块内存,存放最近获得的IP地址到以太网地址的映射.主机在发送IP 报文时,首先检查缓存,若找不到匹配的映射,再利用ARP请求地址解析.三、实验步骤与实验问题探讨【注:实验步骤应用(x),问题用[x]】1. 捕获并分析Ethernet帧执行下列操作以捕获一组以太网帧进行研究:(1)首先确保你的浏览器缓存为空(对于Internet Explorer,选Tools->Internet Options->Delete Files)(2)启动Ethereal分组嗅探器(3)输入下列URL到浏览器:/ethereal-labs/ HTTP-ethereal-lab-file3.html,浏览器将显示相当长的美国的权利法案.(4)停止Ethereal分组捕获。
首先,找到从你主机发往 的HTTP GET报文的分组序号和从发向你主机的HTTP响应报文开始的分组序号(在Ethereal上部窗口的最左列),你可以看到一个类似于下图的屏幕(其中10号分组包含HTTP GET消息)。
(注:可从/ethereal-labs/ethereal-traces.zip 中解压出ethernet-ethereal-trace-1文件来回答下列问题)为了回答下列问题,你需要研究一下分组细节窗口和分组内容窗口(在Ethereal中间和靠下的显示窗口)。
常用局域网协议
常用局域网协议在当今数字化的时代,局域网(Local Area Network,简称 LAN)在企业、学校、家庭等各种场景中发挥着至关重要的作用。
而要使局域网能够高效、稳定地运行,离不开一系列协议的支持。
这些协议就像是局域网中的“交通规则”,规范着数据的传输和交换。
接下来,让我们一起了解一些常用的局域网协议。
一、以太网协议(Ethernet)以太网是应用最为广泛的局域网技术之一。
它采用了一种称为“载波监听多路访问/冲突检测”(Carrier Sense Multiple Access with Collision Detection,简称 CSMA/CD)的访问控制方法。
简单来说,当一台计算机想要发送数据时,它会先监听网络线路,看看是否有其他计算机正在传输数据。
如果线路空闲,它就会开始发送数据。
但由于网络中的计算机可能会同时尝试发送数据,从而导致冲突。
当发生冲突时,发送数据的计算机都会检测到,并各自等待一段随机的时间后重新尝试发送。
以太网协议支持多种传输速率,从早期的 10Mbps 到如今常见的100Mbps、1000Mbps 甚至更高。
它具有简单、易于实现和成本低等优点,这也是其广泛应用的重要原因之一。
二、令牌环网协议(Token Ring)令牌环网是另一种早期的局域网技术。
在令牌环网中,数据传输是通过一个称为“令牌”的特殊帧来控制的。
令牌在网络中的各个节点之间依次传递。
只有拥有令牌的节点才有权利发送数据。
当一个节点完成数据发送后,令牌会被传递给下一个节点。
这种方式可以避免数据冲突的发生,但相对来说,其实现较为复杂,且在网络负载较大时,可能会出现令牌传递延迟等问题。
三、无线局域网协议(WiFi)随着无线技术的发展,无线局域网(Wireless Local Area Network,简称 WLAN)越来越普及,而 WiFi 则是其中最常见的协议之一。
WiFi 协议包括多个版本,如 80211a、80211b、80211g、80211n 和80211ac 等。
ARP请求详解
ARP请求详解/thread-520007-1.htmlIP地址是不能直接用来进行通信的。
这是因为IP地址只是主机在抽象的网络层中的地址。
若要将网络层中传送的数据报交给目的主机,还要传到链路层转变成MAC帧后才能发送到实际的网络上。
因此,不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
由于IP地址有32 bit,而局域网的硬件地址是48bit,因此它们之间不存在简单的映射关系。
此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。
更换网卡也会使主机的硬件地址改变。
可见在主机中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还必须能够经常动态更新。
地址解析协议ARP很好地解决了这些问题。
每一个主机都设有一个ARP高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。
如果不使用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就使网络上的通信量大大增加。
ARP将已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的硬件地址而不必再用广播方式发送ARP请求分组。
(详解过程请参考第2页)ARP将保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10~20分钟)。
凡超过生存时间的项目就从高速缓存中删除掉。
设置这种地址映射项目的生存时间是很重要的。
设想有一种情况。
主机A和B通信。
A的ARP高速缓存里保存有B的物理地址。
但B的网卡突然坏了,B立即更换了一块,因此B的硬件地址就改变了。
A还要和B继续通信。
A 在其ARP高速缓存中查找到B原先的硬件地址,并使用该地址向B发送数据帧。
但B原先的硬件地址已经失效了,因此A无法找到主机B。
但是过了一段时间,A的ARP高速缓存中已经删除了B原先的硬件地址(因为它的存在时间到了),于是A重新广播发送ARP请求分组,又找到了B。
ETHERNET数据包格式
ETHERNET数据包格式( IP & UDP & ICMP & ARP )2010-06-21 08:28一、ETHERNET 数据包的协议类型 TYPE 的值为 0x0800:IP协议,即:ETHERTYPE_IP,该值在 /usr/include/net/ethernet.h中有定义。
ETHERNET 数据包的格式又细分为如下几种情况:(1) IP 报头中的协议号码为 IPPROTO_TCP,其值为 6 。
ETHERNET 数据包的格式如下:|<------------ Ethernet Header ---------->|-------------------------------------------------------------------------|DST MAC ADDR |SRC MAC ADDR | TYPE | IP PACKET | TCP PACKET | -------------------------------------------------------------------------|<- 6 bytes ->|<- 6 bytes ->|<- 2 bytes ->|<- 20 bytes ->|<- 20 bytes ->|如下例所示:00 00 21 cd a8 48 00 0a 98 1f 0a 8a 08 00 45 00-- -- -- -- -- -- -- -- -- -- -- -- -- --00 28 38 13 40 00 7e 06 85 48 a6 6f e5 87 a6 6f-- -- -- -- -- -- --e5 0d 04 3a 01 95 bc 5d 5a 8b 25 69 20 82 50 11-- -- -- -- -- --41 87 cc 34 00 00 00 00 00 00 00 00 00 00 00 00-- --其中作如下说明:00 00 --- 08 00 : ETHERNET PACKET,共 14 个字节00 00 21 cd a8 48 : 接收方的 MAC 地址,6 个字节00 0a 98 1f 0a 8a : 发送方的 MAC 地址,6 个字节08 00 : 协议类型,2 个字节,0x0800:IP协议,该值在/usr/include/net/ethernet.h中有定义,其值为:ETHERTYPE_IP45 00 --- e5 0d : IP PACKET ,共 20 个字节06 : 协议类型,1 是 ICMP,6 是 TCP,17 是 UDPa6 6f e5 87 : 发送方 IP 地址,4 个字节,十进制:166.111.229.135 a6 6f e5 0d : 接收方 IP 地址,4 个字节,十进制:166.111.229.1304 3a --- 00 00 : TCP PACKET,共 20 个字节04 3a : 发送方的端口号,2 个字节,其十进制表示为:1082 01 95 : 接收方的端口号,2 个字节,其十进制表示为:405 41 87 : TCP PACKET 的窗口大小(2) IP 报头中的协议号码为 IPPROTO_UDP,其值为 17 。
ARP报文格式
8比特
OP
16比特
含义
目的以太网地址。发送ARP请求时,为广播的MAC地址,0xFF.FF.FF.FF.FF.FF。 源以太网地址。 表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。 表示硬件地址的类型。对于以太网,该类型的值为“1”。 表示发送方要映射的协议地址类型。对于IP地址,该值为0x0800。 表示硬件地址的长度,单位是字节。对于ARP请求或应答来说,该值为6。 表示协议地址的长度,单位是字节。对于ARP请求或应答来说,该值为4。 操作类型:
1 ARP请求 2 ARP应答 3 RARP请求 4 RARP应答
Ethernet Address of sender 48比特
IP Address of sender
32比特
Ethernet Addresf destination
32比特
发送方以太网地址。这个字段和ARP报文首部的源以太网地址字段是重复信息。 发送方的IP地址。 接收方的以太网地址。发送ARP请求时,该处填充值为0x00.00.00.00.00.00。 接收方的IP地址。
报文示例
图1 免费ARP报文格式
图2 ARP请求报文格式 图3 ARP应答报文格式
字段
长度
(bit)
Ethernet Address of destination 48比特
Ethernet Address of sender 48比特
Frame Type
16比特
Hardware Type
16比特
Protocol Type
16比特
Hardware Length
8比特
Protocol Length
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
发送ARP数据包
封皮成绩评定表课程设计任务书摘要计算机网络是多个计算机的集合,在网络中的计算机若想互相通信就需要用到Ethernet 设备。
Ethernet 设备有自己全球唯一的MAC地址,它们以MAC地址来传输Ethernet数据包,但他们却不能识别IP包的IP地址。
所以,在Ethernet中进行IP通信时就需要一个协议来建立IP地址和MAC地址的对应关系。
在ARP协议中对于这种情况会发送Arp数据包用来寻找目的主机并建立对应关系用于下次传输。
关键字:物理帧 ARP帧 ip地址 mac地址目录一课程设计目的 (1)二课程设计要求 (1)三系统开发语言及环境的选择 (1)四相关知识………………………………………… 1-3 1.ARP协议的工作原理……………………1-22.ARP的包格式 (2)3.ARP包的填充………………………………2-3五课程设计过程……………………………………3-111.流程图………………………………… 3-42.源程序代码…………………………… 4-103.程序运行结果分析……………………10-11六课程设计小结 (11)七参考文献………………………………………11-12一课程设计目的1) ARP协议用于完成IP地址与MAC地址间的转换。
2) 熟悉ARP协议对于IP数据包的传输过程具有重要意义。
3) 本课程设计的主要目的是通过封装与发送ARP帧,了解ARP协议的工作原理与ARP帧的结构。
二课程设计要求根据后面介绍的ARP包结构,编写程序封装并发送ARP包。
1)以命令行形式运行:arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作为程序名。
各参数意义:src_ip: 源IP地址。
src_mac: 源MAC地址。
dst_ip: 目的IP地址。
dst_mac: 目的MAC地址。
Flag:0表示ARP请求;1表示ARP应答。
例如: Arpsend 192.168.1.1 FA:01:02:03:04:05192.168.1.2 0D:E1:02:03:B4:06 12)输出内容:ARP帧的各字数值,包括源IP地址,源MAC地址,目的IP地址,目的MAC地址等。
ARP协议解析与应用
ARP协议解析与应用ARP(Address Resolution Protocol),地址解析协议,是一种用于在局域网中将IP地址解析为对应MAC地址的协议。
在计算机网络中,IP地址用于标识网络中的设备,而MAC地址则是用于标识设备的物理地址。
ARP协议的作用是通过IP地址查询对应的MAC地址,以实现数据的传输。
在本文中,我们将对ARP协议进行解析,并探讨其在实际应用中的作用与功能。
一、ARP协议概述1. ARP协议的定义ARP协议是一种地址解析协议,其作用是根据IP地址查询对应的MAC地址。
它通过广播的方式发送ARP请求,在局域网中寻找目标设备的MAC地址,以便进行数据传输。
一旦获取到目标设备的MAC地址,就可以通过以太网(Ethernet)传输层实现数据的传输。
2. ARP协议的工作原理ARP协议的工作原理可以分为以下四个步骤:a) 发送ARP请求:源设备向网络中的所有设备发送ARP请求,请求目标设备的MAC地址。
b) 目标设备响应ARP请求:目标设备接收到ARP请求后,将其MAC地址作为ARP响应发送给源设备。
c) 源设备收到ARP响应:源设备接收到目标设备的ARP响应后,将其存储在本地的ARP缓存中,以便将来的数据传输。
d) 数据传输:源设备通过目标设备的MAC地址将数据进行传输。
二、ARP协议的应用1. IP地址与MAC地址转换ARP协议的主要应用是实现IP地址与MAC地址之间的转换。
当一个设备需要与网络中的另一个设备进行通信时,首先需要知道目标设备的MAC地址,而通过ARP协议,可以通过目标设备的IP地址查询到其对应的MAC地址,从而实现数据的传输。
2. ARP缓存管理每次进行ARP请求响应之后,源设备会将目标设备的IP地址与MAC地址存储在本地的ARP缓存中,以便将来的数据传输。
ARP缓存管理是对这些缓存条目进行管理和维护的过程。
当ARP缓存中的某条目过期或者失效时,源设备会重新发送ARP请求以更新对应的MAC地址。
描述arp欺骗的原理及过程 -回复
描述arp欺骗的原理及过程-回复ARP欺骗(Address Resolution Protocol spoofing)是一种网络攻击技术,攻击者通过伪造或欺骗目标网络设备的ARP信息,实现对通信进行窃听、篡改和伪装等恶意操作。
本文将详细介绍ARP欺骗的原理及过程。
一、ARP协议的基本原理在深入了解ARP欺骗之前,我们先来了解一下ARP协议的基本原理。
ARP (地址解析协议)是一种用于解析IP地址与MAC地址之间关系的协议。
在TCP/IP网络中,数据在发送时使用的是IP地址,而以太网(Ethernet)则使用MAC地址进行寻址。
ARP协议的作用就是通过查询网络上的其他设备,获取指定IP地址对应的MAC地址,从而实现数据包的转发。
ARP协议的工作方式如下:1. 当源主机要发送数据包给目标主机时,首先检查本地的ARP缓存表(ARP cache),看目标主机的MAC地址是否已经缓存。
2. 如果ARP缓存表中不存在目标主机的MAC地址,源主机会发送一个ARP请求广播,询问其他主机谁知道目标主机的MAC地址。
3. 目标主机收到ARP请求后,会发送一个ARP响应,包含自己的MAC 地址。
4. 源主机收到ARP响应后,将目标主机的IP地址和对应的MAC地址存入ARP缓存表,并将数据包发送给目标主机。
二、ARP欺骗原理ARP欺骗就是攻击者利用ARP协议的工作原理,欺骗目标主机获取其MAC地址,从而干扰或中断正常的通信。
实现ARP欺骗的关键是通过伪造ARP响应,将攻击者自己的MAC地址告诉目标主机,使其将数据包发送给攻击者。
这样,攻击者就可以窃听、篡改或伪装网络通信。
ARP欺骗的主要类型包括:1. ARP请求响应欺骗:攻击者伪造一个含有目标主机IP地址和另一个MAC地址的ARP响应,发送给本地网络中的其他主机,使其错误地认为目标主机的MAC地址是伪造的MAC地址。
这样,其他主机发送的数据包将会被错误地发送给攻击者。
arp协议格式
arp协议格式ARP(Address Resolution Protocol)是一种用于在局域网中解析网络层地址(如IP地址)与物理地址(如MAC地址)的协议。
它的主要功能是将网络层地址映射到物理地址,以便在数据包在网络中传输时能够正确地发送到目标设备。
ARP协议的格式如下:1. 硬件类型(2字节):指示网络中使用的硬件类型,如以太网(Ethernet)。
2. 协议类型(2字节):指示网络层使用的协议类型,如IPv4或IPv6。
3. 硬件地址长度(1字节):表示硬件地址的长度,通常是6字节(对应MAC地址的长度)。
4. 协议地址长度(1字节):表示协议地址的长度,通常是4字节(对应IPv4地址的长度)。
5. 操作码(2字节):指示ARP请求或应答的类型,常见的操作码有ARP请求(1)和ARP应答(2)。
6. 发送方硬件地址(6字节):发送ARP请求或应答的设备的物理地址(MAC地址)。
7. 发送方协议地址(4字节):发送ARP请求或应答的设备的网络层地址(如IPv4地址)。
8. 目标硬件地址(6字节):ARP请求中为空,ARP应答中为请求设备的物理地址(MAC地址)。
9. 目标协议地址(4字节):ARP请求中为要解析的目标设备的网络层地址(如IPv4地址),ARP应答中为发送设备的网络层地址(如IPv4地址)。
ARP协议的工作原理是,当一个设备需要发送数据包到一个目标设备时,首先查询本地ARP缓存以查找目标设备的物理地址。
如果缓存中没有目标设备的条目,则发送一个ARP请求广播到局域网中的所有设备,请求目标设备的物理地址。
收到请求的设备会检查请求中的网络层地址,如果匹配则返回一个ARP应答,其中包含自己的物理地址。
发送方设备会将目标设备的物理地址存储在ARP缓存中,以便以后发送数据包时可以直接使用。
总结起来,ARP协议是通过发送ARP请求和接收ARP应答来解析网络层地址与物理地址之间的映射关系,从而实现数据包的正确传输。
arp协议的解析过程
arp协议的解析过程ARPA(地址解析协议)是一种局域网(LAN)协议,它用于将IP 地址转换为物理地址,即MAC地址。
它还可以识别本地网络中的主机,并检查网络上其他主机的存在。
许多网络协议都使用ARP来完成地址解析功能,包括TCP/IP、IPX和AppleTalk。
ARP协议的解析过程非常简单,但很有效。
当一台计算机想要发送一个数据包到另一台计算机时,它会发送一个广播ARP请求。
此广播ARP请求是一个使用广播通信机制的数据包,其中包含了发送方和接收方的IP地址。
每个网络上的主机都会收到此ARP请求,但只有接收方才会回复一个ARP应答,以及它的MAC地址。
发送方收到ARP 应答后,就可以用它的MAC地址继续发送数据包。
ARP协议建立在其他协议的基础上运行,并有效地解析IP地址到MAC地址。
ARP使用什么样的协议取决于本地网络的连接类型。
如果本地网络是基于以太网的,它会使用以太网ARP(Ethernet ARP)协议。
而如果本地网络是基于令牌环的,它会使用令牌环ARP(Token Ring ARP)协议。
无论使用哪种协议,ARP协议解析这样的步骤都是一样的:发送ARP请求,接收ARP应答,然后用收到的MAC地址发送数据包。
为了更有效地使用ARP协议,大多数系统都支持ARP缓存(也称为ARP表)。
一旦计算机接收到ARP应答,它就会把接收方的IP地址和MAC地址保存到ARP缓存中。
以后,它就会检查ARP缓存,而不是发送新的ARP请求,以节省网络带宽。
在局域网内,每个主机的ARP缓存列表大致相同,但是当此主机发送数据包到Internet时,它的ARP缓存列表就完全不同了,因为Internet上的每个主机都有一个不同的IP地址。
ARP协议也被用于防止ARP欺骗,也称为ARP伪造。
ARP伪造是一种攻击方法,允许攻击者伪造网络中其他主机的IP地址,以便解除网络上数据的传输权限。
比如,当攻击者伪装成另一台连接到网络的计算机时,就可以收集他人的网络数据包。
数据包从源到目的地的传输过程
数据包从源到目的地的传输过程步骤1:PC1 需要向PC2 发送一个数据包PC1 将IP 数据包封装成以太网帧,并将其目的MAC 地址设为R1 FastEthernet 0/0 接口的MAC 地址。
PC1 是如何确定应该将数据包转发至R1 而不是直接发往PC2?这是因为PC1 发现源IP 地址和目的IP 地址位于不同的网络上。
PC1 通过对自己的IP 地址和子网掩码执行AND 运算,从而了解自身所在的网络。
同样,PC1 也对数据包的目的IP 地址和自己的子网掩码执行AND 运算。
如果两次运算结果一致,则PC1 知道目的IP 地址处于本地网络中,无需将数据包转发到默认网关(路由器)。
如果AND 运算的结果是不同的网络地址,则PC1 知道目的IP 地址不在本地网络中,因而需要将数据包转发到默认网关(路由器)。
注:如果数据包目的IP 地址与PC1 子网掩码进行AND 运算后,所得到的结果并非PC1 计算得出的自己所在的网络地址,该结果也未必就是实际的远程网络地址。
在PC1 看来,只有当掩码和网络地址相同时,目的IP 地址才属于本地网络。
远程网络可能使用不同的掩码。
如果目的IP 地址经过运算后得到的网络地址不同于本地网络地址,则PC1 无法知道实际的远程网络地址,它只知道该地址不在本地网络上。
PC1 如何确定默认网关(路由器R1)的MAC 地址?PC1 会在其ARP 表中查找默认网关的IP 地址及其关联的MAC 地址。
如果该条目不存在于ARP 表中会发生什么情况?PC1 会发出一个ARP 请求,然后路由器R1 作出ARP 回复。
步骤2:路由器R1 收到以太网帧1. 路由器R1 检查目的MAC 地址,在本例中它是接收接口FastEthernet 0/0 的MAC 地址。
因此,R1 将该帧复制到缓冲区中。
2. R1 看到“以太网类型”字段的值为0x800,这表示该以太网帧的数据部分包含IP 数据包。
3. R1 解封以太网帧。
Ethernet协议局域网通信的基本协议
Ethernet协议局域网通信的基本协议Ethernet协议是一种常见的局域网通信协议,它定义了计算机在局域网内进行数据传输的规则和标准。
本文将详细介绍Ethernet协议的基本原理和通信过程。
一、Ethernet协议简介Ethernet协议是一种基于共享介质的局域网协议,它使用CSMA/CD (Carrier Sense Multiple Access with Collision Detection)技术来解决多个计算机同时发送数据时的冲突问题。
通过物理介质上的共享通信线路,计算机可以实现高效的数据交换和共享资源。
二、数据帧的格式在Ethernet协议中,数据被分割成帧(Frame)进行传输。
每个数据帧包括三个主要部分:帧起始定界符、目标地址和源地址、数据部分和帧尾。
1. 帧起始定界符(Preamble):用于同步发送方和接收方的时钟节拍。
2. 目标地址和源地址:目标地址指明帧的接收方,源地址指明帧的发送方。
这两个地址通常以6个字节的MAC地址表示。
3. 类型字段:用于指定数据包的类型,例如IP数据包、ARP数据包等。
4. 数据部分:包含待传输的数据。
5. 帧尾部(FCS):用于检测并纠正数据传输中的错误。
它采用循环冗余校验方法进行错误检测。
三、通信过程Ethernet协议的通信过程可以分为发送端和接收端两个主要步骤。
1. 发送端步骤:(1)发送端准备待发送的数据帧,并将数据封装成以太网帧。
(2)发送端首先进行信道空闲检测,即检测是否有其他计算机正在发送数据。
(3)如果信道空闲,发送端开始发送数据帧。
(4)如果信道忙碌,发送端延迟一段时间后重新进行信道空闲检测,直到信道空闲为止。
2. 接收端步骤:(1)接收端监听信道,以检测是否有数据帧到达。
(2)如果接收端接收到数据帧,会检查帧的目标地址是否和自身MAC地址匹配。
(3)如果匹配,则接收端接收数据,并进行处理。
(4)如果不匹配,则接受端丢弃数据帧。
以太网协议封装格式
字号:大中小一、以太网链路层协议封装格式以太网数据在网络介质上传输需要遵循一定的机制,其中CSMA/CD介质访问控制机制约定了以太网在传输数据时,两帧之间需要等待一个帧间隙时间(IFG或IPG),为以太网接口提供了帧接收之间的恢复时间,该恢复时间最小值为传输96bit所花费的时间,对于10M线路,该时间为9.6uS,100M线路为960nS,1G的线路为96nS。
同时以太网数据帧在传输时还需要有7byte的前导字段和1byte的定界符。
因此以太网数据在传输过程中是由以下部分组成的:7byte(前导)+1byte(定界符)+以太网数据帧+12byte(IPG)。
在全双工工作模式下,如果CSMA/CD介质访问控制机制发现传输冲突时,则会放弃当前帧发送,改为发送一个48比特的噪声帧。
其中以太网数据帧限制为最小长度为64byte,最大长度为1518byte,其格式为:6byte(目的MAC地址)+6byte(源MAC地址)+2byte(类型字段)+数据字段+4byte(FCS校验字段)。
其中帧类型字段标识其后的数据类型。
这里值得注意的是区分Ethernet II帧格式和802.3帧格式的不同,我们有时可能会混用了这两个术语。
Ethernet II帧是最常见的一种以太网帧格式,也是今天以太网的事实标准,由DEC,Intel和Xerox在1982年公布标准,Ethernet II可以支持TCP/IP,Novell IPX/SPX,Apple Talk Phase I等协议,其比较常见的类型字段为:0X0800(IP 帧),0X0806(ARP请求/应答帧),0X8035(PARP请求/应答帧),0X8137(Novell IPX),0X809b(Apple Talk)。
RFC 894定义了IP报文在Ethernet II上的封装格式。
802.3帧将Ethernet II帧头中的类型字段替换为帧长度字段(取值范围为0X0000-0X05dc,不包括CRC检验码),因此对于接收到的帧,如果类型字段取值范围为0X0000-0X05dc,则可以判断其为802.3帧,而非Ethernet II帧。
以太网帧格式EthernetⅡ和ETHERNET8023IEEE8022SAP和SNAP的区别
EthernetⅡ/ETHERNET 802.3 IEEE802.2.SAP/SNAP的区别1.Ethernet V1:这是最原始的一种格式,是由Xerox PARC提出的3Mbps CSMA/CD 以太网标准的封装格式,后来在1980年由DEC,Intel和Xerox标准化形成Ethernet V1标准;2.Ethernet V2(ARPA):这是最常见的一种以太网帧格式,也是今天以太网的事实标准,由DEC,Intel 和Xerox在1982年公布其标准,主要更改了Ethernet V1的电气特性和物理接口,在帧格式上并无变化;Ethernet V2出现后迅速取代Ethernet V1成为以太网事实标准;Ethernet V2帧头结构为6bytes的源地址+6bytes的目标地址+2Bytes的协议类型字段+数据。
常见协议类型如下:0800 IP0806 ARP8137 Novell IPX809b Apple Talk如果协议类型字段取值为0000-05dc(十进制的0-1500),则该帧就不是Ethernet V2(ARPA)类型了,而是下面讲到的三种802.3帧类型之一;Ethernet可以支持TCP/IP,Novell IPX/SPX,Apple Talk Phase I等协议;RFC 894定义了IP报文在Ethernet V2上的封装格式;Ethernet_II中所包含的字段:在每种格式的以太网帧的开始处都有64比特(8字节)的前导字符,如图所示。
其中,前7个字节称为前同步码(Preamble),内容是16进制数0xAA,最后1字节为帧起始标志符0xAB,它标识着以太网帧的开始。
前导字符的作用是使接收节点进行同步并做好接收数据帧的准备。
——PR:同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010.....——SD: 分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位的10101011,跟同步位不同的是最后2位是11而不是10.——DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡.如果为FFFFFFFFFFFF,则是广播地址,广播地址的数据可以被任何网卡接收到.——SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字节.----TYPE:类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。
以太网协议封装格式
字号:大中小一、以太网链路层协议封装格式以太网数据在网络介质上传输需要遵循一定的机制,其中CSMA/CD介质访问控制机制约定了以太网在传输数据时,两帧之间需要等待一个帧间隙时间(IFG或IPG),为以太网接口提供了帧接收之间的恢复时间,该恢复时间最小值为传输96bit所花费的时间,对于10M线路,该时间为9.6uS,100M线路为960nS,1G的线路为96nS。
同时以太网数据帧在传输时还需要有7byte的前导字段和1byte的定界符。
因此以太网数据在传输过程中是由以下部分组成的:7byte(前导)+1byte(定界符)+以太网数据帧+12byte(IPG)。
在全双工工作模式下,如果CSMA/CD介质访问控制机制发现传输冲突时,则会放弃当前帧发送,改为发送一个48比特的噪声帧。
其中以太网数据帧限制为最小长度为64byte,最大长度为1518byte,其格式为:6byte(目的MAC地址)+6byte(源MAC地址)+2byte(类型字段)+数据字段+4byte(FCS校验字段)。
其中帧类型字段标识其后的数据类型。
这里值得注意的是区分Ethernet II帧格式和802.3帧格式的不同,我们有时可能会混用了这两个术语。
Ethernet II帧是最常见的一种以太网帧格式,也是今天以太网的事实标准,由DEC,Intel和Xerox在1982年公布标准,Ethernet II可以支持TCP/IP,Novell IPX/SPX,Apple Talk Phase I等协议,其比较常见的类型字段为:0X0800(IP 帧),0X0806(ARP请求/应答帧),0X8035(PARP请求/应答帧),0X8137(Novell IPX),0X809b(Apple Talk)。
RFC 894定义了IP报文在Ethernet II上的封装格式。
802.3帧将Ethernet II帧头中的类型字段替换为帧长度字段(取值范围为0X0000-0X05dc,不包括CRC检验码),因此对于接收到的帧,如果类型字段取值范围为0X0000-0X05dc,则可以判断其为802.3帧,而非Ethernet II帧。
报文格式以ping arp数据包转发过程.概要
STP 数据流分析过程一: 以太网帧格式( Ethernet II )数据长度64-1518(前导码不属于数据部分)←—————————以太网帧首部—————————→ ↑ ↑ IP 报文 ARP 报文插入Vlan 标签后 Ethernet II 帧变成 Ethernet 802.1q 帧二:IP 数据报格式 (IP Datagram) 位数7字节 1字节6字节6字节2字节46-1500字 节4字节前导码 帧首定界符 目的MAC 地址 源MAC 地址 类型:3种 数据(可变长度) CRC (帧校验序列 :0x0) 0800:IP 数据报0806:ARP 请求/应答8035:RARP 请求/应答0 4 8 16 19 24 314版 本4首部长度 6区分服务 16总 长 度16标 识3标 志13片 偏 移 8生 存 时 间8协 议:200多种 如 PRO :0 x 1 (ICMP 报文) PRO :0 x 118(STP 协议)16首 部 检 验 和32源地址(IP ) 32目的地址(IP )可 选 字 段,可 变 长 度(如果有)填 充注释:前5行固定字节20 前6行组合成(IP首部)协议:200种最底页IP数据报完整结构IP帧首部(前6行)数据部分↑↑↑↑ICMP报文格式STPOSPF ARP请求三:ARP/RARP格式 (地址解析协议/逆地址解析协议)单位:字节14 2 2 1 1 2 6 4 6 4以太网帧首部硬件类型协议类型硬件地址长度协议地址长度OP (选项字段)0x1:ARP请求0x2:ARP应答源MAC 源IP目的MAC目的IP ←———————————28位字节ARP请求/应答———————————————→数据部分四:ICMP报文 (互联网控制消息协议)单位: 位IP头部20字节(4)类型(4)代码(8)校验和(4)标示符(8)序列号(16)选项(有很多种格式)可不选←—IP部分—→←———————————ICMP格式—————————————→ICMP定义了五种常用差错报文和八种询问报文类型,差错报告报文的类型有一下几个:类型3:目的站不可达格式表达→类型:0x3类型4:源站抑制类型5:改变路由类型11:时间超过类型12:参数问题查询报文的类型有一下几个:类型8或0:回送请求或回答类型13或14:时间戳请求或回答类型17或18:地址掩码请求或回答类型10或9:路由器询问或通告协议数据单元PDU(Protocol Data Unit)是指对等层次之间传递的数据单位。
arp
网络上的每台主机或设备都有一个或多个IP地址。
IP地址是网络层的地址,在网络层,数据被组装成IP包。
但是发送IP包需要物理设备的支持(通常是Ethernet设备,在本课程设计中我们指定为Ethernet设备),即发送端必须知道目的物理地址才能将IP包发送出去,所以需要一种将IP地址映射为物理地址的机制。
ARP协议就是用来完成这个任务的。
ARP协议能够在同一个物理网络中,在给定目的主机或设备的IP地址的条件下,得到目的主机或设备的物理地址。
ARP协议的数据包格式如图所示:0 8 16 24 31(位)ARP数据包的消息格式下面对数据包的各个部分进行说明●硬件类型:指定硬件接口类型。
例如,值为1表示Ethernet ●协议类型:指定发送方支持的上层协议的类型●物理地址长度:指定物理(硬件)地址的长度●协议地址长度:网络层协议的地址长度。
若为IP协议,其值为4●操作:指定ARP的操作类型,例如,1表示ARP请求,2表示ARP应答●源物理地址:指定发送方的IP地址●目的物理地址:指定目的物理地址。
●目的IP地址:指定目的IP地址ARP分组必须在数据链路层中被封装成侦,才能发送出去封装形式如图所示ARP协议的工作流程。
1)在发送一个ARP分组之前,源主机首先根据目的IP地址,在本地ARP高速缓存表中查找与之对应的目的物理地址。
如果找到对应的物理地址,就不用进行地址解析,否则需要进行地址解析。
2)实现地址解析的第一步是产生ARP请求分组。
在相应的字段写入本地主机的源物理地址、源IP地址,在目的物理地址字段写入0,并在操作字段写入1。
3)将ARP分组发送到本地的数据链路层,并封装成帧。
以源物理地址作为源地址,以物理广播地址(FF-FF-FF-FF-FF-FF)作为目的地址,通过物理层发送出去。
4)由于采用了广播地址,因此网段内所有的主机或设备都能接受到该帧。
除了目的主机外,所有接受到该分组的主机和设备都会丢弃该分组,因为目的主机能够识别ARP消息中的目的IP地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机网络》课程设计实验报告题目发送Ethernet ARP包学院数理与信息工程学院专业计算机科学与技术班级计科101学号************学生姓名王立娟同组成员潘明越、曾兵、田胜杰、宋炼杰、陈坦、韦国挺指导教师郭步编写日期2012-6-30目录一、程设计的目的和意义 (2)二、设计的内容和要求 (2)三、设计的相关技术 (3)3.1 ARP协议及工作原理 (3)3.2 ARP的分组格式 (3)3.3工作原理 (4)3.4 ARP包的填充 (6)四、程设计过程 (6)4.1流程图 (7)4.2源程序 (8)4.3运行结果 (18)五、课程设计小结 (19)六、参考文献 (19)一、程设计的目的和意义IP地址将不同的物理地址统一起来,从而将物理地址隐藏起来,上层软件使用IP地址标识结点。
但是。
两台计算机只有在知道彼此的物理地址时才能进行通信。
IP数据包常通过Ethernet发送。
Ethernet设备并不识别32位IP地址,它们是以48位MAC地址传输Ethernet数据包的。
因此,IP驱动器必须把IP目的地址转换成Ethernet网络目的地址。
这两种地址之间存在着某种静态的或动态的映射,通常需要查看一张表来进行这种映射。
这种地址协议(ARP)就是用来确定这些映象的协议。
ARP工作时,送出一个所希望的IP地址的Ethernet广播数据包。
目的地主机以一个含有IP和Ethernet地址对的数据包作为应答。
发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。
本课程设计的目的是进一步熟悉ARP协议的帧结构以及它的运行过程。
二、设计的内容和要求2.1 基本要求本次课程设计的基本要求是在熟悉ARP协议并了解Winpcap编程,或者下载JAVA类:jpcap包构造ARP包,选择并打开网卡,将ARP包发送。
1)命令行格式:arpsend src_ip src_mac dst_ip dst_mac flag其中arpsend作为程序名。
各参数意义:src_ip: 源IP地址。
src_mac: 源MAC地址。
dst_ip: 目的IP地址。
dst_mac: 目的MAC地址。
Flag:0表示ARP请求;1表示ARP应答。
例如:arpsend 192.168.1.1 FA:01:02:03:04:05 192.168.1.2 0D:E1:02:03:B4:06 12)输出:Send OK。
3)程序的正确性的检验。
可以安装一个截包软件,如Iris,运行该软件以查看能否收到程序发出的ARP包,并检查包中个字段填充的内容(如各地址,协议类型)是否正确。
错误!未指定书签。
2. 2系统开发语言及环境的选择操作系统:Windows XP Professional运行环境:Microsoft Visual C++ 6.0开发语言:C语言,C++等三、设计的相关技术3.1 ARP协议及工作原理ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。
在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC 地址。
但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。
所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
ARP的基本运行过程是:1)主机A希望发送数据分组给主机B,但不知道B的物理地址。
2)A发送广播报文,要求B主机用它的物理地址来响应。
3)网站上所有主机都接收到这个分组。
4)B识别出自己的IP地址,发送应答报文,告诉A自己的物理地址。
3.2 ARP的分组格式图一 ARP分组格式图2 物理帧头0 8 16 24 31(位)图3 ARP帧结构3.3工作原理:源主机在传输数据前,首先要对初始数据进行封装,在该过程中会把目的主机的IP地址和MAC地址封装进去。
在通信的最初阶段,我们能够知道目的主机的IP地址,而MAC地址却是未知的。
这时如果目的主机和源主机在同一个网段内,源主机会以第二层广播的方式发送ARP请求报文。
ARP请求报文中含有源主机的IP地址和MAC地址,以及目的主机的IP地址。
当该报文通过广播方式到达目的主机时,目的主机会响应该请求,并返回ARP响应报文,从而源主机可以获取目的主机的MAC地址,同样目的主机也能够获得源主机的MAC地址。
如果目的主机和源主机地址不在同一个网段内,源主机发出的IP数据包会送到交换机的默认网关,而默认网关的MAC地址同样可以通过ARP协议获取。
经过ARP协议解析IP地址之后,主机会在缓存中保存IP地址和MAC地址的映射条目,此后再进行数据交换时只要从缓存中读取映射条目即可。
ARP协议工作原理详见图4.图4 网段内ARP工作原理关于ARP的功能,仅限于在没有安全防护的网络里。
1) 如果有多个用户都在同一个网关上网,那么若要禁止机器A上网,应该怎么做呢?就是让A得不到正确的网关的ARP映射。
可以采取如下措施:伪装成网关,给机器A发送ARP包,该ARP的发送方为网关的IP,而MAC部分随便填一个地址;接收方正确填写A的相关信息。
2)基于ARP欺骗的监听。
如果某台计算机C和计算机A、B位于同一个局域网内,那么如何监听A和B间的通信呢?很简单,对A说“我是B”,在对B说“我是A”。
具体的操作如下:给A发送一个伪造的ARP回应包,告诉A,B的IP 对应的MAC为C的MAC地址,于是A就会相应地刷新自己的ARP缓存,将发给B 的数据都发送到主机C上来。
当然,因为ARP缓存是动态的,有超时时间,所以必须每隔一段时间就给A发送一个ARP回应包。
为了不让B发现,我们还要对每次接受到的数据包进行转发。
这样就监听了A发送给B的信息。
如果想监听B发送给A的信息,方法类似。
3.4 ARP包的填充将命令行的参数作适当的转换后填到ARP分组结构的各字段中即可。
要注意的是,填充请求包时。
因为包要在Ethernet上广播,所以,物理帧头的“目的MAC”字段要填充为FFFFFFFFFFFF;而ARP帧结构中的目的MAC可填充为任意值,因为它此时不起作用。
“填充数据”字段要填充为0。
四、程设计过程4.1 流程图图5 程序流程图4.2源程序#include <iostream.h>#include <fstream.h>#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <Packet32.h>#include <Ntddndis.h>#pragma comment(lib,"ws2_32.lib")// DLC头typedef struct DLCHeader{unsigned char DesMAC[6];unsigned char SrcMAC[6];unsigned short Ethertype;} DLCHEADER;// ARP桢typedef struct ARPFrame{unsigned short HW_Type;unsigned short Prot_Type;unsigned char HW_Addr_Len;unsigned char Prot_Addr_Len;unsigned short Flag;unsigned char Send_HW_Addr[6];unsigned char Send_Prot_Addr[4];unsigned char Targ_HW_Addr[6];unsigned char Targ_Prot_Addr[4]; unsigned char padding[18];} ARPFRAME;// ARP包=DLC头+ARP桢typedef struct ARPPacket{DLCHeader dlcHeader;ARPFrame arpFrame;}*PARPPACKET;ARPPacket ARPPACKET;//源文件.cpp#include <iostream.h>#include <string.h>//#include "h.h"int transIP(char *,unsigned char *);int transMAC(char *,unsigned char *); LPADAPTER lpAdapter;LPPACKET lpPacket;bool Send();void main(int argc,char *argv[]){if(argc!=6){cout<<"输入格式错误"<<endl;return;}int i=0;memset(&ARPPACKET, 0, sizeof(ARPPACKET));if(*argv[5]=='0'){for(i=0;i<6;i++)ARPPACKET.dlcHeader.DesMAC[i]=0xff;ARPPACKET.arpFrame.Flag=(unsigned short)1;}else{if(*argv[5]=='1'){//填充DLC头中目的MAC地址if(!transMAC(argv[4],ARPPACKET.dlcHeader.DesMAC))return;//ARP桢中flag位置2ARPPACKET.arpFrame.Flag=(unsigned short)0x0200;}elsecout<<"flag位输入错误"<<endl;}if(!transMAC(argv[2],ARPPACKET.dlcHeader.SrcMAC))return;//填充DLC头中桢类型ARPPACKET.dlcHeader.Ethertype=htons((unsigned short)0x0608); ARPPACKET.arpFrame.HW_Type=(unsigned short)0x0100;//(Ethernet类型)ARPPACKET.arpFrame.Prot_Type=(unsigned short)0x0008; ARPPACKET.arpFrame.HW_Addr_Len=(unsigned char)6; ARPPACKET.arpFrame.Prot_Addr_Len=(unsigned char)4;if(!transMAC(argv[2],ARPPACKET.arpFrame.Send_HW_Addr)) return;if(!transIP(argv[1],ARPPACKET.arpFrame.Send_Prot_Addr)) return;if(!transMAC(argv[4],ARPPACKET.arpFrame.Targ_HW_Addr)) return;if(!transIP(argv[3],ARPPACKET.arpFrame.Targ_Prot_Addr)) return;for(i=0;i<18;i++)ARPPACKET.arpFrame.padding[i]=0;if(!Send())cout<<"发送arp包失败"<<endl;}int transIP(char *argv,unsigned char *a){char ip[16];int i=0,j=0,k=0;strcpy(ip,argv);int m=strlen(argv);for(i=0;i<m;i++) //判断命令行输入的IP格式是否正确 {if((ip[i]<'0'||ip[i]>'9')&&ip[i]!='.'){cout<<"输入ip:"<<argv<<"格式错误"<<endl;return 0;}else{if(ip[i]!='.')j++;else{k++;if(j>3){cout<<"输入ip:"<<argv<<"格式错误"<<endl; return 0;}else{j=0;}if(k>3){cout<<"输入ip:"<<argv<<"格式错误"<<endl; return 0;}}}}j=0;for(i=0;i<4;i++) //填充IP地址 {while(*(ip+j)<'0'||*(ip+j)>'9')j++;a[i]=(unsigned char)atoi(ip+j);while(*(ip+j)>='0'&&*(ip+j)<='9')j++;}return 1;}int transMAC(char *argv,unsigned char *b){char mac[18];int i=0,j=0,k=0;strcpy(mac,argv);int m=strlen(argv);for(i=0;i<m;i++) //判断命令行输入的MAC地址是否正确{if(mac[i]<'0'||(mac[i]>':'&&mac[i]<'A')||(mac[i]>'Z'&&mac[i]<'a')||mac[i]>'Z') {cout<<"输入mac:"<<argv<<"格式错误"<<endl;return 0;}else{if(mac[i]!=':')j++;else{k++;if(j>2){cout<<"输入mac"<<argv<<"格式错误"<<endl;return 0;}else{j=0;}if(k>5){cout<<"输入mac"<<argv<<"格式错误"<<endl;return 0;}}}}for(i=0;i<6;i++) //填充MAC地址{while(*(mac+j)==':'||*(mac+j)=='-')j++;if(*(mac+j)>='0'&&*(mac+j)<='9')b[i]=(unsigned char)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')b[i]=(unsigned char)(*(mac+j)-'a'+10);if(*(mac+j)>='A'&&*(mac+j)<='z')b[i]=(unsigned char)(*(mac+j)-'A'+10);j++;b[i]*=16;if(*(mac+j)>='0'&&*(mac+j)<='9')b[i]+=(unsigned char)(*(mac+j)-'0');if(*(mac+j)>='a'&&*(mac+j)<='z')b[i]+=(unsigned char)(*(mac+j)-'a'+10); if(*(mac+j)>='A'&&*(mac+j)<='z')b[i]+=(unsigned char)(*(mac+j)-'A'+10); j++;}return 1;}bool Send(){char AdapterNameA[8192];char AdapterNameU[2*sizeof(AdapterNameA)];unsigned long AdapterAlength=sizeof(AdapterNameA);unsigned long AdapterUlength=2*sizeof(AdapterNameA);DWORD dwVersion=GetVersion ();DWORD dwWindowsMajorVersion=(DWORD)(LOBYTE(LOWORD(dwVersion)));if(!(dwVersion >= 0x80000000 && dwWindowsMajorVersion >=4)){//Windows NT//获取UNICODE码网卡名列表if(PacketGetAdapterNames(AdapterNameU,&AdapterUlength)==FALSE) {cout<<"无法得到网卡列表!"<<endl;return FALSE;}//将第一个网卡名转为ASCII码unsigned short *pAdapterName=(unsigned short *)AdapterNameU; for(unsigned i=0;i<AdapterAlength;i++)if((AdapterNameA[i]=(char)pAdapterName[i])=='\0')break;}else{//Windows 9x//获取ASCII码网卡名列表if(PacketGetAdapterNames(AdapterNameA,&AdapterAlength)==FALSE) {cout<<"无法得到网卡列表!"<<endl;return FALSE;}}lpAdapter=PacketOpenAdapter(AdapterNameA);if(!lpAdapter||lpAdapter->hFile==INVALID_HANDLE_VALUE){cout<<"无法打开网卡,错误码:"<<GetLastError()<<endl;return FALSE;}//发送帧LPPACKET lpPacket; //分配发送包结构if((lpPacket=PacketAllocatePacket())!=NULL){//初始化发送包结构PacketInitPacket(lpPacket,&ARPPACKET,sizeof(ARPPACKET)); // 每次只发送一个包PacketSetNumWrites(lpAdapter,1);//发送包if(PacketSendPacket(lpAdapter,lpPacket,true)==1){cout<<"send ok"<<endl;}else{cout<<"发送包失败"<<endl;PacketFreePacket(lpPacket); //释放发送包结构}}else{cout<<"分配发送包LPPACKET结构失败!"<<endl;}PacketCloseAdapter(lpAdapter);return TRUE;}4.3运行结果1.应该在预编译代码区加上预编译指令:#pragma comment(lib, "ws2_32.lib");否则,链接时会出现符号无法解析的错误。