以太网数据帧的监听与分析_第1页
以太网数据帧的监听与分析_第2页
以太网数据帧的监听与分析_第3页
以太网数据帧的监听与分析_第4页
以太网数据帧的监听与分析_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、以太网数据包结构以太网包(帧)格式在以太网的发展过程中,出现了很多的帧格式,目前,应用最多的是以太网格式,也就是以太网版本,是由、和在年制定的,现在几乎是以太网的标准,它是由所定义的,其帧格式如下图所示:目的地址(字节)源地址(字节)协议类型(字节)以太网帧数据负载(字节到字节)协议类型说明:协议数据包协议数据包协议数据包协议数据包结构如下页表是一个无连接的协议,主要就是负责在主机间寻址并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递,另一方面,数据在被收到时,不需要收到确认,所以它是不可靠的。版本号():长度比特。标识目前米用的协议的版本号。一般的值为(),的值(1包头长

2、度():长度比特。这个字段的作用是为了描述包头的长度,因为在包头中有变长的可选部分。包头最小长度为字节,由于变长的可选部分最大长度可能会变成字节。服务类型(分:优先级(而):长度比特。这个子段可以拆分成两个部)和服务条款()。(前三位)目前不太使用。则用于应用。(字段的详细描述)S。8个BIT的含义是:000前三位不用表示最小时延,如Telnet服务使用该位表示吞吐量,如FTP服务使用该位表示可靠性,如SNMP服务使用该位表示最小代价不用包总长(L:长度比特。包最大长度字3节5。标识符(字段联合使用,ti)对大的上层数据包进行分段(长度比特。该字段和和)操作。标记():长度比特。该字段第一位不

3、使用。第二位是位,位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的包的包头中将位设为。分段序号():长度比特。该字段对包含分段的上层数生存时间(个特定的值。当包的值减少。如果防止由于故障而导致据包的包赋予序号。由于包在网络上传送的时候不一定能按顺序到达,这个字段保证了目标路由器在接受到包之后能够还原分段的上层数据包。到某个包含分段的上层数据包的包在传送是丢失,则整个一系列包含分段的上层数据包的包都会被要求重传。):长度比特。当包进行传

4、送时,先会对该字段赋予某包经过每一个沿途的路由器的时候,每个沿途的路由器会将减少为,则该包会被丢弃。这个字段可以包在网络中不停被转发。协议():长度比特。协议,此处的协议代码应为。如果是标识了上层所使用的协议。如果协议,则此处的协议代码应为6如果曰.协议,则此处的协议代码应为头部校验():长度位,由于包头是变长的,所以提供一个头部校验来保证包头中信息的正确性。n)起源和目标地址(IP选项(options)主要用于控制和测试两大目的。作为选项用户可以使用也可以不使用选项但作为协议的组成部分,所有实现协议的设备能处理选项。在使用选项的过程中,有可能造成数据包头部不是的整数倍,那么则需要填充域来凑齐

5、。数据报选项有选项玛、长度、和选项数据部分组成,其中,选项玛用于确定该选项的具体内容,选项数据部分长度有选项字段决定。1.源路由。所谓源路由是指数据包穿越互联网所经过的路径是有源主机指定的,他区别于有主机或路由器的互联层软件自行选择路由后得出的路径。源路由选项是非常有用的一个选项,可用于测试某个特定网络的吞吐量,也可以是数据包绕开出错网络。源路由选项可以分为两类,一类是严格源路由选项,一类是松散源路由选项。2.记录路由所谓记录路由是指记录下数据报从源主机到目的主机所经过的路径上的各个路由器的地址,记录路由功能可以通过数据报的记录路由选项完成。利用记录路由选项,可以判断数据报传输过程中的所经过的

6、路径,通常还可以测试互联网中路由配置是否正确。3时.间戳所谓时间戳()就是记录下数据报经过的每一个路由器时的当地时间,记录时间戳可以使用数据报的时间戳选项。时间戳中的时间采用格林尼治时间。时间戳选项提供了数据报传输中的时域参数,用于分析网路吞吐率,拥塞情况,负载情况等报文结构如下internet控制消息协议ICMP是用于报告错误并代表IP对消息进行控制。类型(8位)代码(8位)校验和(16位)标示符(16位)序号(16位)当前时间(32位)类型和代码字段:一起决定了报文的类型如下表类SSR码档述Q030目飾不可达:网络不可达1主机不可达23端口不可达4需墓进行竹片但设晉了不分片比特56目的网絡

7、不认识目的主机不认识S西王机战隔岂辭布用)9目的网络被耳制集止10目的主机被强制禁止n由干眼务类吧T03网錯不可达12由干眼务类!1TTOW.主机不可达13曲干过法,诡信褲峥制禁止14主机越校15优先挖中止生故40痕端镀尖用基橄捽秤50对网络1&定穴1对主机申応向2对眼寻类比和网培用宦:=3对眼务宾址和主和雨宦辽E0请求虚界厲h諒求90弗由驾诡告100賭由晋请琳110超时生存时:|为diTiaceroute1在散据很吉恢期怔生存时闻为0120坏開口冃缶:包牯洛戸苣钻|1缺少愿歸的选氐130吋冋就请求140时截应率芒0信息谓求(作财用160信息应嘗:作廈不用1170址址掩码谄求0地址掩沔应吾校验

8、和字段:包括数据在内的整个数据包的校验和,其计算方法和头部校验和的计算方法是一样的。标识符字段:用于标识本进程序列号字段:用于判断回射应答数据报。时间戳:时间戳请求报文()和时间戳应答报文()用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。报文结构如下表:(摘自)传输控制协议()向上与用户应用程序进程接口,向下与网络层协议接口。用户应用程序采用首先调用(或),然后将应用程序数据递交给这一方式,在网络上传送数据。将这些数据打包分段并调用模块向目的主机传送每个数据段。接收方的将

9、段中的数据放入接收缓冲器,然后将段重装为应用程序数据,再将这些数据发送到目的的应用程序进程。尽管和U都使用相同的网络层(),却向应用层提供与U完全不同的服务。提供一种面向连接的、可靠的字节流服务。0001020304050607080910111213141516171819202122232425262728293031Bit源端口号16位日标端口号16位2字节顺序号32位序列編号雌雕俺妙一号处确认编号头矗长度保留点位桂种订窗口大小16位狡验和15位紧总抬针16位可选项8的倍数位数据源端口号(16位),标识主机上发起传送的应用程序;目的端口(16位)标识主机上传送要到达的应用程序。源端和目的

10、端的端口号,用于寻找发端和收端应用进程。这两个值加上首部中的源端地址和目的端地址唯一确定一个连接。一个地址和一个端口号有时也称为一个插口(),插口对()包含客户地址、客户端口号、服务器地址和服务器端口号的四元组可唯一确定互联网络中每个连接的双方。端口唯一确定一个连接。协议通过使用端口来标识源端和目标端的应用进程。端口号可以使用0到655之3间5的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在众所周知的端口()为用户提供服务。顺序号字段:占比特。用来标识从源端向目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。确认号字段:占比特。只有标

11、志为时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字段的头部长度为字节;最多可以有字节的头部。预留:由跟在数据偏移字段后的6位构成,预留位通常为0.标志位字段(U、R、):占比特。各比特的含义如下:URG:紧急指针()有效。ACK:确认序号有效。PSH:立即发送(默认要等到发送缓冲区存满再发送数据)RST:重建连接。SYN:发起一个连接。FIN:释放一个连接。窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。TCP校验和字段:占比特。对整个TCP报文段,即TCP头部

12、和TCP数据进行校验和计算,并由目标端进行验证。紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。选项字段:占32比特。可能包括窗口扩大因子、时间戳等选项。TCP三次握手:创建TCP连接、A端SYN=1,ACK=0Seque、端SYN=1,ACK=1SequenceNumber=YYY、A端3SYN=0,ACK=1SequenceNumbe这个TCP负载中已经可以包含业务数据了。NumbeAckA上机E2nd上机ATCP链接撤销:、A端1FIN=1,ACK=1SequenceNumb、端AFIN=1,ACK=1SequenceNumber=YYYAc

13、k2nd3rd5011歿送序4ih嵌迭暨密222主机p主机屢00)确认卄ackr送竺号=叭定义报头发送端端口号位接收端端口号位位,标示消息端的数据位于全体数据块的某一字节的数字位,确认号标示接收端对于发送端接收到数据块数值数据偏移位,预留位,控制位为窗口位校验码位位,紧急数据指针选祥和填充位本文来自博客:协议简单分析首先和是两种不同的协议,它们来七层网络模型中分别在不同的层次,协议是网络层的协议,是更高一层的传输层的协议,是建立在协议之上的,所以一般把和连在一起说协议。系统的协议栈的数据包默认是字节大小,如果一次传输的数据大于这个长度,会把分割成几个长度都不大于字节的数据包,每个数据包都会被赋

14、予一个(相当于每个数据包的顺序号,凭这个接收端可以知道数据包的前后顺序)之后的数据包再被包裹上一层的数据的头,形成数据包在网上传输(其实最后还要包一层以太网数据包,网络上最终传输的都是以太网数据包)。数据包到了目的地后,接收端首先把数据包的包头去掉,取出的包。接收端每收到一个的数据包都需要返回给发送端一个的数据包告诉发送端已接到此数据包,如果接收端在一定的时间内没有收到某个数据包的响应,会再次发送这个数据包,这样就保证了数据都能被接收端接收到(因特网上丢数据包是很正常的事,如果没有数据包重发机制,很难保证发送的数据都能被接收端完整的收到)。每个数据包也是由包头和实际数据组成,包头包含如下主要内

15、容:e字节)发送端的端口号(字节)接收端的端口号包头中只包含双方的端口号,双方的地址在包的包头所以在数据包的包头中没有地址。(字节)数据的顺序号,表示当前数据包中的数据起始顺序号,比如前一个数据包的为十六进制的:,数据包的实际数据长度为字节,那么下一个数据包的就要在前一个数据包的基础上加上,为:(字节)接收到对方的某个数据包后的回应顺序号。如果接收到了对方主动发送来的某个数据包,必须要返回对方一个回应数据包,数据包的头部的部分根据对方发送数据的和实际数据长度,返回实际数据长度,表示已经接收到这个数据包。对方收到这个回应,根据数值计算后知道这个数据包已经被对方接收。如果接收不到的回应,就意味着这

16、个数据包已经在网上被丢失,需要重新发送此数据包。(字节)表示数据包的包头长度,整个数据包的长度减包头长度就能得到数据包的实际传送的数据长度。(字节)标志字节,每一位都是一个标志,以下是几个主要标志:-表示数据包是个回应数据包,表示接收到了对方的某个数据包,具体哪个包由包头的部分指示。-表示这是个有实际数据的包。-表示这是个建立连接的数据包,通讯双方要通讯,总是由客户端先发送数据包到服务端以建立的连接。-表示通讯结束,拆除连接的数据包。下面描述一次传送数据的完整过程以一个客户端向服务端发送一些数据为例。客户端(IP:Purt)服务端(IP:Pcirt)JL1.1SYN客户端初贻SEQ11111.

17、2SYNACK服务端初始EEQQ1.3ACK1111-JL-21客户喘发送服务喘数据包-112卫服务端发往客户端ACKHr12.N+1客户端发送服务端的ACK1客户喘发送FINT11I3卫服务端发送MKFIN、站客户端发送碎J11r一次完整的通讯的过程、建立连接是面向连接的协议,客户端和服务端要通讯就必须先建立一个连接。首先通讯双方都有地址,就是地址加端口号()标识通讯的每一端,客户端的跟服务器之间就构成一个套接字。所谓建立连接就是在客户端的跟服务器之间建立一个通道,初始化一些通讯的基础设置,以便以后的数据通讯的正常进行。客户端发送总是客户端发起连接,首先客户端发送数据包到服务端以建立连接。数

18、据包只有包头,没有实际数据。标志字节的位置位,表示是数据包。由客户端随机生成一个字节的数据,作为本次连接通讯客户端数据的起始顺序号,以后客户端发往服务端的数据包的都在此基础上加上每次传送的实际数据长度依次相加递增,这样根据每个数据包的就能判断出数据包的前后顺序,以便接收方根据数据包的顺序拼接数据包。服务端回应、服务端收到客户端的后,首先要发送一个数据包给客户端表示收到了这个数据包。数据包的标志字节的置位,表示是回应数据包。设置为接收到的数据包的数据包实际长度,因为接收到的的实际数据长度为0但是协议认为实际长度为的主动发送的数据长度为1是客户端主动发送的数据包,所以服务端把设置为接收到的数据包的

19、。通讯可以是双向的,一旦建立了连接,服务端也可以向客户端发送数据。所以服务端也会向客户端发送一个包,数据包的标志字节的置位,表示是数据包,同时随机生成一个字节的数据,作为本次连接通讯服务端数据的起始顺序号。实际中,服务端把这两个数据包合并为一个数据包,和都是置位,和也同时设置,作为一个数据包发送回客户端。客户端回应客户端收到服务端的数据包后,需要回应一个数据包,表示接收到此数据包。同样数据包的设置为接收到的数据包的(、数据包的实际数据长度也是)。2相互收发数据通讯双方建立了连接后,就可以相互进行数据包的传送。发送数据的一端,把数据包的标准字节的置位,表示是有实际数据的数据包。置为前一次的数据包

20、的加上前一次数据包的长度。如果数据包还兼做包,则把置位,同时设置好把数据包发送到对方。接收方收到对方主动发送的数据数据包后,一定要回复数据包,如果同时有数据发往对方,可以把实际数据包跟数据包合在一起发送。在拆除连接之前,通讯双方可以一直相互发送接收数据,数据的顺序都建立在各自的基础上。图1中,蓝色部分的数据通讯就表示这一阶段。3拆除连接双方数据交换完毕,需要拆除连接,结束通讯。客户端发送通讯的一方向另一方发送数据包表示要结束通讯,拆除连接。客户端把数据包的标准字节的置位,表示是通讯结束数据包。服务端返回,服务端收到客户端的数据包后,先回应一个数据包,然后也发送一个数据包,还是服务端也结束通讯。

21、客户端回应客户端回应表示接收到服务端的数据,双方通讯结束。报文结构如下表:源端口号(位)目标端口号(位长度(位校验和(位数据区协议不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把协议称为不可靠的传输协议。但协议拥有协议望尘莫及的速度。主要应用于视频电话会议。ARP协议数据包:R全称,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。数据包常通过以太网发送,以太网设备并不识别位地址,它们是以位以太网地址传输以太网数据包。因此,必须把目的地址转换成以太网目的地址。在以太网中,一个主机要

22、和另一个主机进行直接通信,必须要知道目标主机的地址。但这个目标地址是如何获得的呢?它就是通过地址解析协议获得的。协议用于将网络中的地址解析为的硬件地址(地址),以保证通信的顺利进行。和报头结构和使用相同的报头结构,如图所示。硬件粪型P协谊类型J硬件地址长度J协谊长度J操作类型发迸方的硬件地址字节)卫源物理地址字节)f源IP地址(0-1字节)中源IP地址(2-3字节)Q目标硬件地址(07字节)心目标硬件地址字节)卫目标IP地址(0-3字节)(图报头结构)?硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;协议类型字段指明了发送方提供的高层协议类型,为0进制);硬件地址长度和协议长度指

23、明了硬件地址和高层协议地址的长度,这样报文就可以在任意硬件和任意协议的网络中使用;操作字段用来表示这个报文的类型,请求为,响应为,请求为,响应为4?发硬送方的硬件地址(0-字3节):源主机硬件地址的前3个字节;硬?硬发送方的硬件地址(4-字5节):源主机硬件地址的后,个字节;硬发送方(字节):源主机硬件地址的前个字节;发送方(字节):源主机硬件地址的后个字节;目的硬件地址(字节):目的主机硬件地址的前个字节;目的硬件地址(字节):目的主机硬件地址的后个字节;目的(字节):目的主机的地址。和的工作原理的工作原理如下:首先,每台主机都会在自己的缓冲区中建立一个列表,以表示地址和地址的对应关系。当源

24、主机需要将一个数据包要发送到目的主机时,会首先检查自己列表中是否存在该地址对应的地址如果有,就直接将数据包发送到这个地址;如果没有,就向本地网段发起一个请求的广播包,查询此目的主机对应的地址。此请求数据包里包括源主机的地址、硬件地址、以及目的主机的地址。网络中所有的主机收到这个请求后,会检查数据包中的目的是否和自己的地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的地址和地址添加到自己的列表中,如果表中已经存在该的信息,则将其覆盖,然后给源主机发送一个响应数据包,告诉对方自己是它需要查找的地址;源主机收到这个响应数据包后,将得到的目的主机的地址和地址添加到自己的列表中,并利用此

25、信息开始数据的传输。如果源主机一直没有收到响应数据包,表示查询失败。的工作原理如下:发送主机发送一个本地的广播,在此广播包中,声明自己的地址并且请求任何收到此请求的服务器分配一个地址;本地网段上的服务器收到此请求后,检查其列表,查找该地址对应的地址;如果存在,服务器就给源主机发送一个响应数据包并将此地址提供给对方主机使用;如果不存在,服务器对此不做任何的响应;源主机收到从服务器的响应信息,就利用得到的地址进行通讯;如果一直没有收到服务器的响应信息,表示初始化失败。#includepcap.htypedefstructeth_headerunsignedchareth_dst6;unsigned

26、chareth_src6;unsignedshorteth_type;eth_header;/以太网头结构/目的主机物理地址/源主机物理地址/以太网帧类型/*4字节的IP地址*/typedefstructip_addressu_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;ip_address;/*IPv4首部*/typedefstructip_headeru_charver_ihl;u_chartos;u_shorttlen;/版本(4bits)+首部长度(4bits)/服务类型(Typeofservice)总长(Totallength)u_sh

27、ortidentification;/u_shortflags_fo;u_charttl;u_charproto;u_shortcrc;ip_addresssaddr;ip_addressdaddr;u_intop_pad;ip_header;/*UDP首部*/标识(Identification)/标志位(Flags)(3bits)+段偏移量(Fragmentoffset)(13bits)/存活时间(Timetolive)/协议(Protocol)/首部校验和(Headerchecksum)/源地址(Sourceaddress)/目的地址(Destinationaddress)/选项与填充(O

28、ption+Padding)typedefstructudp_headeru_shortsport;u_shortdport;u_shortlen;u_shortcrc;/源端口(Sourceport)/目的端口(Destinationport)/UDP数据包长度(Datagramlength)/校验和(Checksum)udp_header;/*回调函数原型*/voidpacket_handler(u_char*param,conststructpcap_pkthdr*header,constu_char*pkt_data);main()pcap_if_t*alldevs;pcap_if_t

29、*d;intinum;inti=0;pcap_t*adhandle;charerrbufPCAP_ERRBUF_SIZE;u_intnetmask;charpacket_filter=ipandudp;structbpf_programfcode;/*获得设备列表*/if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,NULL,&alldevs,errbuf)=-1)fprintf(stderr,Errorinpcap_findalldevs:%sn,errbuf);exit(1);/*打印列表*/for(d=alldevs;d;d=d-next)printf(

30、%d.%s,+i,d-name);if(d-description)printf(%s)n,d-description);elseprintf(Nodescriptionavailable)n);if(i=0)printf(nNointerfacesfound!MakesureWinPcapisinstalled.n);return-1;printf(Entertheinterfacenumber(1-%d):,i);scanf(%d,&inum);if(inumi)printf(nInterfacenumberoutofrange.n);/*释放设备列表*/pcap_freealldevs(

31、alldevs);return-1;/*跳转到已选设备*/for(d=alldevs,i=0;inext,i+);/*打开适配器*/if(adhandle=pcap_open(d-name,/设备名65536,/要捕捉的数据包的部分/65535保证能捕获到不同数据链路层上的每个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS,/混杂模式1000,/读取超时时间NULL,/远程机器验证errbuf/错误缓冲池)=NULL)fprintf(stderr,nUnabletoopentheadapter.%sisnotsupportedbyWinPcapn);/*释放设备列表*/pc

32、ap_freealldevs(alldevs);return-1;/*检查数据链路层,为了简单,我们只考虑以太网*/if(pcap_datalink(adhandle)!=DLT_EN10MB)fprintf(stderr,nThisprogramworksonlyonEthernetnetworks.n);/*释放设备列表*/pcap_freealldevs(alldevs);return-1;if(d-addresses!=NULL)/*获得接口第一个地址的掩码*/netmask=(structsockaddr_in*)(d-addresses-netmask)-sin_addr.S_un

33、.S_addr;else/*如果接口没有地址,那么我们假设一个C类的掩码*/netmask=0 xffffff;/编译过滤器if(pcap_compile(adhandle,&fcode,packet_filter,1,netmask)0)fprintf(stderr,nUnabletocompilethepacketfilter.Checkthesyntax.n);/*释放设备列表*/pcap_freealldevs(alldevs);return-1;/设置过滤器if(pcap_setfilter(adhandle,&fcode)description);/*释放设备列表*/pcap_freealldevs(alldevs);/*开始捕捉*/pcap_loop(adhandle,0,packet_handler,NULL);return0;/*回调函数,当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论