基于Jpcap的TCP/IP数据包分析2001赵新辉目录第一章以太网的结构和TCP/IP1.1以太网的结构1.1.1基于网络架构的以太网1.1.2以太网的数据交换1.1.3以太网帧的结构1.2IP数据报的构成1.2.1IP地址1.2.2路由1.2.3IP数据报的构成1.2.4其他报文结构1.3TCP/UDP1.3.1TCP/UDP的作用1.3.2TCP和UDP报文的结构第二章Jpcap类库2.1Jpcap的使用2.1.1Jpcap的运行环境的安装2.1.2Jpcap的开发环境的安装2.2Jpcap介绍2.2.1Packet基类及其子类2.2.2Jpcap的主要功能第三章数据包监听程序的设计3.1数据包监听原理3.2以太网帧的解析3.2.1获取MAC地址3.2.2数据包类型的判断13.3IP数据报的监听3.3.1IP数据报的解析3.3.2ARP和ICMP数据报解析3.4TCP和UDP监听3.4.1TCP数据报的解析3.4.2UDP数据报的解析第四章数据包分析4.1流量分析4.1.1数据包大小的表示4.1.2数据包流量观测4.2数据包分类分析4.2.1数据包过滤4.2.2利用数据包分析解决网络问题第五章数据包发送5.1构造发送IP数据包5.1.1IP数据包构造与发送5.1.2发送结果分析5.2构造发送TCP数据包5.2.1TCP数据包构造与发送5.2.2发送结果分析2第一章以太网的结构和TCP/IP1.1以太网的结构以太网是当今现有局域网采用的最通用的通信协议标准。该标准定义了在局域网(LAN)中采用的电缆类型和信号处理方法。以太网在互联设备之间以10~100Mbps的速率传送信息包,双绞线电缆10BaseT以太网由于其低成本、高可靠性以及10Mbps的速率而成为应用最为广泛的以太网技术。许多制造商提供的产品都能采用通用的软件协议进行通信,开放性最好。以太网,属网络低层协议,通常在OSI(opensysteminterconnectreferencemodel)模型的物理层和数据链路层操作。它是总线型协议中最常见的,数据速率为10Mbps(兆比特/秒)的同轴电缆系统。1.1.1基于网络架构的以太网在计算机网络构成中,一般都实行使用协议进行层与层之间得通信。通常的OSI中,把协议等级分为七层。第一层是物理层,处理关于硬件上的网络协议。第七层为应用层,处理关于应用程序的协议。第二层到第六层按照其间的顺序被依次设置。层名称规定的内容高层第七层应用层关于邮件、新闻等应用程序的协议第六层表示层数据语法协议第五层会话层基于网络的管理对话协议低层第四层传输层补充第三层的功能,可靠地在两台计算机间传输数据第三层网络层从网络上多台计算机中选择作为通讯对象地计算机第二层数据链路层在两台计算机上进行一对一数据通信第一层物理层电气信号、连接器规格等关于硬件地协议OSI参考模型以太网是20世纪70年代,施乐(Xerox)公司地PaloAlto研究所设计的,其后在80年代由施乐、英特尔、DEC(后被康柏收购)三家公司总结了面向局域网(LAN)的协议3集合。而以太网的规格是由美国电气和电子工程师协会(InstituteofElectricalandElectronicsEngineers)中专门讨论规格的802委员会,从1980年开始标准化讨论的。并把IEEE802.3作为标准规格,其后ISO(InternationalStandardOrganization)把它作为ISO802.3标准。旧的以太网设备是用同轴电缆作为传送媒体的。使用同轴电缆的以太网,设备之间的连接不需要网络集线器,但必须在同轴电缆上讲设备连接起来,是同轴电缆成为多台设备间共享信号的总线(bus),这种网络连接形式被称为总线型。现在,广为使用的传送媒体为双绞线。通常使用的是被称为第五类的双绞线,拥有100Mbit/s的通信速度。在用双绞线连接时要使用被称为网络集线器的设备。它是为实现多台计算机的连接,把多根双绞线相互连接起来的设备。在使用网络集线器的网络重,计算机以网络集线器为中心呈放射状连接,这样的网络被称为星型网络。由于以太网中集线器的转发功能,也就使得进行数据包监听可以在局域网内进行。本文中的数据包监听程序都是在局域网内进行的。当然,数据包监听也可以在网关等数据包的进出口进行。1.1.2以太网的数据交换在以太网中,数据是以被称为帧的数据结构体为单位进行交换的。通常在计算机网络上交换的数据结构体的单位是数据包,而在以太网中把使用的数据包称为帧。数据包包含着发送给对方所必需信息的报头部分和记录着传送给接收端信息内容的报文部分组成的。报头包含接收端的地址、发送端的地址、数据错误检查和改正所必需的错误检验和修正码。数据包被传送到网络上,通过网络中继装置传送到接收端。帧是被称为带碰撞检测的载波侦听多址访问(CSMA/CD:CarrierSenseMultipleAccesswithCollisionDetection)发送的。在CSMA/CD技术中,如果网络上没有数据,则任何时候都可以将数据传送出去。因此,传送数据的网络设备,首先要确认网络上是否有数据在传送。如果没有数据则可以将数据发送到网络上。如果网络被使用,那就要等到网络空闲后发送。上面的工作相当于CSMA/CD的CSMA部分。在这种方法中,同时发送数据的网络设备会同时认为网络是空闲的,这样就会产生发送冲突。因此,在CSMA/CD技术中会经常一边检测数据冲突,一边发送数据。如果检测出冲突,为强调冲突的发生,要等待发送出32位数据所必需的时间之后,在等待一个随机决定的时间,而后重新发送。这样同时开始发送的两台网络设备中,随机数小的网络设备先进行发送,随机数大的网络设备要等到网络空闲下来才能发送。这种等到时间被称为补偿时间。网络拥挤和多次反复发生冲突,就可能造成数据无法发送。因此,为有效利用网络资源,4在网络空闲和拥挤时,对等待的最大值进行调整。空闲时即冲突次数少的情况下,把等待时间的最大值缩小;拥挤和冲突频繁发生时,把等待时间的最大值扩大。等待时间的最大值可以用下面的公式表示:T=Ts×2k式中Ts为发送512位数据所必需的时间(被称为Slot时间),k为冲突次数和数字10中最小的数字。这样,在CSMA/CD技术中,网络空间的情况下,任何时候都可以将数据发送出去,万一发生冲突造成发送失败时,可以重新发送帧。所以CSMA/CD在网络比较空闲的情况下是一种高效的通信协议。但是在网络拥挤的情况下恰好相反。CSMA/CD发生冲突时,在等待和再次发送等方面花费过多的时间,会造成网络反复发送无用的数据,网络设备和传送线路等网络资源被白白占用,结果导致通信效率降低。在冲突频繁发生的以太网上,CSMA/CD的通信效率非常低,因为无法预测什么时候会发生冲突,因此不能保证对方在一定的限制时间内能接收到数据。这样,在进行声音和图像等对时间依赖性很强的多媒体数据的实时通信的情况下,存在着致命缺陷。所以采用CSMA/CD的以太网不能进行面向多媒体数据的通信。帧在网络上传输,由网卡接收。一般而言,网卡有几种接收数据帧的状态,如unicast,broadcast,multicast,promiscuous等,unicast是指网卡在工作时接收目的地址是本机硬件地址的数据帧。Broadcast是指接收所有类型为广播报文的数据帧。Multicast是指接收特定的组播报文。Promiscuous则是通常说的混杂模式,是指对报文中的目的硬件地址不加任何检查,全部接收的工作模式。当局域网内的主机都通过HUB等方式连接时,一般都称为共享式的连接,这种共享式的连接有一个很明显的特点:就是HUB会将接收到的所有数据向HUB上的每个端口转发,也就是说当主机根据mac地址进行数据包发送时,尽管发送端主机告知了目标主机的地址,但这并不意味着在一个网络内的其他主机听不到发送端和接收端之间的通讯,只是在正常状况下其他主机会忽略这些通讯报文而已!如果这些主机不愿意忽略这些报文,网卡被设置为promiscuous状态的话,那么,对于这台主机的网络接口而言,任何在这个局域网内传输的信息都是可以被侦听到的。1.1.3以太网帧的结构以太网帧的结构是这样。开始的64位是前同步码(preamble)和帧首定界符(startframe5delimiter)。前同步码是使发送端和接收端在数据的交接上步调一致的信号。发送端以56位(10101010…10)反复发送1和0信号。接收端接收到这种信号后,准备读取发送来的信号。前同步码结束后使表示帧的真正开始的8位(10101011)位列。帧首定界符之后是地址等报头信息。帧首定界符后面是接收端及及发送端的MAC地址。只有在接收端的MAC地址是自己的MAC地址的情况下,才能进行帧的接收;MAC地址为其他机器的情况下,将不接收改帧。但当接收端地址全部都为1时,在同一以太网内连接的所有设备,都要接收该帧。地址全部为1的MAC地址称为广播地址。接收端和发送端的MAC地址后面是16位的类型字段(typefield)。类型字段中存放的是以太网帧中传送数据的上层协议的种类代码。以太网帧的报文部最大能存放12000位,即1500字节。以太网是物理层及数据链路层的协议。以太网帧所传送的数据是网络层规定的数据包。如果要使用IP网络协议,则IP数据包就将存储在以太网帧的报文处。帧的尾部是检查数据错误的错误校验及修正码。一般错误的检验方法有奇偶校验等方法,但以太网中常使用循环冗余校验(CRC:CyclicRedundancyCheck)检查错误。CRC中,将表示帧的位列作为多项式。把多项式与准备好的特定多项式相除,得出的结果与数据一同发送。在接收端重新进行一次除法运算,用其结果确认传送来的数据正确与否。使用CRC不但能检查出是否有错误,而且还能在接收端修正错误。但是,以太网在检查出错误时,该帧将被删除重新发送。转发网络集线器是不能识别MAC地址的,它将以太网帧向全部端口中继。开关网络集线器也被称为二层开关。这是因为开关网络集线器是按照数据链路层协议即第二层协议来解释以太网帧的。使用开关网络集线器与计算机一对一连接起来后,通信线路也完全变成一对一。即发生不了CSMA/CD所预想的冲突。这时接收和发送是并行的,这样的通信称为全双工通信。而普通的以太网通信线路称为半双工通信。因为在全双工通信中,接收和发送能并列进行,所以通信速度是半双工的2倍。1.2IP数据报的构成以太网帧中的数据段通常IP数据报或与IP有关的其他协议,包括ARP(AddressResolutionProtocol)、ICMP(InternetControlMessageProtocol)等。1.2.1IP地址通常所说IP地址是指现在所使用的第四版本的Ipv4地址协议。其中的IP是以32位的二进制数来表示的。通常按8位分成4段,用十进制的数值表示,中间用点号分开。因此IP地址的数值可以从0.0.0.0到255.255.255.255。6计算机地址除了0和全部为1得数值外都可以使用。计算机地址为0时,在网路地址中指定为指向网络本身。计算机地址全部为1时,网络地址指定为向全体网络进行通信广播。网络地址使用多少位取决于一个局域网能容纳的计算机台数。因此,网络地址的位数决定了IP地址的分类。A类地址中网络地址有7位,计算机地址被分配为24位。即具有A类地址的网络在全世界只有100个左右,是能够容纳1600万台计算机的网络。B类地址使用方便,网络数量和可容纳的主机数都比较合适,造成现在B类地址资源不足,申请分配十分困难。C类地址目前还有大量剩余,但是由于一个单位中使用一个C类地址,常常不能容纳自己网络上所有的计算机,因此必须分配给相应的多个C类地址。这种情况下,需要使用把这些计算机作为一个网络的无类别域际路由选择(CIDR:ClasslessInter-DomainRouting)技术,使用不受本来类别制约的地址。进行地址空间的再分配会扩大网络地址的使用,在此种情况下分配的网络称为子网。使用子网时不能从IP地址的类别上区分IP地