ip协议和ip地址分类(精选7篇)
篇1:ip协议和ip地址分类
什么是TCP/IP协议
TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网络协议)协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。在Internet没有形成之前,各个地方已经建立了很多小型的网络,称为局域网。Internet的中文意义是“网际网”,它实际上就是将全球各地的局域网连接起来而形成的一个“网之间的网(即网际网)”。然而,在连接之前的各式各样的局域网却存在不同的网络结构和数据传输规则,将这些小网连接起来后各网之间要通过什么样的规则来传输数据呢?这就象世界上有很多个国家,各个国家的人说各自的语言,世界上任意两个人要怎样才能互相沟通呢?如果全世界的人都能够说同一种语言(即世界语),这个问题不就解决了吗?TCP/IP协议正是Internet上的“世界语”。
TCP/IP的参考模型
要理解Internet,并不是一件非常容易的事,TCP/IP协议的开发研制人员将Internet分为五个层次,以便于理解,它也称为互联网分层模型或互联网分层参考模型,如下表:
应用层(第五层)
传输层(第四层)
互联网层(第三层)
网络接口层(第二层)
物理层(第一层)
下面对这五个层次作一些讲解,初学者对这些概念有一个感性的认识就可以了,如果想深入学习这些内容,可以参考有关计算机网络底层知识方面的书籍。
·物理层:对应于网络的基本硬件,这也是Internet物理构成,即我们可以看得见的硬件设备,如PC机、互连网服务器、网络设备等,必须对这些硬件设备的电气特性作一个规范,使这些设备都能够互相连接并兼容使用。
·网络接口层:它定义了将数据组成正确帧的规程和在网络中传输帧的规程,帧是指一串数据,它是数据在网络中传输的单位。
·互联网层:本层定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标的“信息包”转发机制。
·传输层:为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。·应用层:它定义了应用程序使用互联网的规程。
TCP/IP 通信协议1--网际协议IP
Internet 上使用的一个关键的低层协议是网际协议,通常称IP协议。我们利用一个共同遵守的通信协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信,必须使两台计算机使用同一种“语言”。通信协议正像两台计算机交换信息所使用的共同语言,它规定了通信双方在通信中所应共同遵守的约定。计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如,每台计算机发送的信息格式和含义,在什么情况下应发送规定的特殊信息,以及接收方的计算机应做出哪些应答等等。网际协议IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入 Internet 了。
如果希望能在 Internet 上进行交流和通信,则每台连上 Internet 的计算机都必须遵守IP协议。为此使用 Internet 的每台计算机都必须运行IP软件,以便时刻准备发送或接收信息。IP协议对于网络通信有着重要的意义:网络中的计算机通过安装IP软件,使许许多多的局域网络构成了一个庞大而又严密的通信系统。从而使 Internet 看起来好像是真实存在的,但实际上它是一种并不存在的虚拟网络,只不过是利用IP协议把全世界上所有愿意接入 Internet 的计算机局域网络连接起来,使得它们彼此之间都能够通信。
TCP/IP通信协议2--传输控制协议TCP
尽管计算机通过安装IP软件,从而保证了计算机之间可以发送和接收数据,但IP协议还不能解决数据分组在传输过程中可能出现的问题。因此,若要解决可能出现的问题,连上 Internet 的计算机还需要安装TCP协议来提供可靠的并且无差错的通信服务。
TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收数据以及终止连接。传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。即使在 Internet 暂时出现堵塞的情况下,TCP也能够保证通信的可靠。
众所周知,Internet 是一个庞大的国际性网络,网路上的拥挤和空闲时间总是交替不定的,加上传送的距离也远近不同,所以传输数据所用时间也会变化不定。TCP协议具有自动调整“超时值”的功能,能很好地适应 Internet 上各种各样的变化,确保传输数值的正确。因此,从上面我们可以了解到:IP协议只保证计算机能发送和接收分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。
综上所述,虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的。只有两者的结合,才能保证 Internet 在复杂的环境下正常运行。凡是要连接到 Internet 的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称作TCP/IP协议。
IP地址
在Internet上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机。为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样,才不至于在传输数据时出现混乱。
Internet的网络地址是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。
我们都已经知道,Internet是由几千万台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。
目前,在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1,这种书写方法叫做点数表示法。
IP地址可确认网络中的任何一个网络和计算机,而要识别其他网络或其中的计算机,则是根据这些IP地址的分类来确定的。一般将IP地址按节点计算机所在网络规模的大小分为A,B,C三类,默认的网络掩码是根据IP地址中的第一个字段确定的。
1.A类地址
A类地址的表示范围为:0.0.0.0~126.255.255.255,默认网络掩码为:255.0.0.0;A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址,后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机(直接个人用户)而局域网络个数较少的大型网络。例如IBM公司的网络。
2.B类地址
B类地址的表示范围为:128.0.0.0~191.255.255.255,默认网络掩码为:255.255.0.0;B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址,后面两组数字代表网络上的主机地址。
3.C类地址
C类地址的表示范围为:192.0.0.0~223.255.255.255,默认网络掩码为:255.255.255.0;C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址,最后一组数字作为网络上的主机地址。
实际上,还存在着D类地址和E类地址。但这两类地址用途比较特殊,在这里只是简单介绍一下:D类地址称为广播地址,供特殊协议向选定的节点发送信息时用。E类地址保留给将来使用。
从上两节的知识可以知道,连接到Internet上的每台计算机,不论其IP地址属于哪类都与网络中的其他计算机处于平等地位,因为只有IP地址才是区别计算机的唯一标识。所以,以上IP地址的分类只适用于网络分类。
在Internet中,一台计算机可以有一个或多个IP地址,就像一个人可以有多个通信地址一样,但两台或多台计算机却不能共用一个IP地址。如果有两台计算机的IP地址相同,则会引起异常现象,无论哪台计算机都将无法正常工作。
篇2:ip协议和ip地址分类
IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。这是后话,暂且不提
1.1.IP协议头
如图所示
挨个解释它是教科书的活计,我感兴趣的只是那八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。
现在的ip版本号是4,所以也称作IPv4。现在还有IPv6,而且运用也越来越广泛了。
1.2.IP路由选择
当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来“送货”的呢?
最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。
稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包
如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助,
如果找到路由器,则将该包发向路由器。
搜索路由表,如果匹配同子网路由器失败,则匹配同网号(第一章有讲解)路由器,如果找到路由器,则将该包发向路由器。
搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
如果都失败了,就丢掉这个包。
这再一次证明了,ip包是不可靠的。因为它不保证送达。
1.3.子网寻址
IP地址的定义是网络号+主机号。但是现在所有的主机都要求子网编址,也就是说,把主机号在细分成子网号+主机号。最终一个IP地址就成为 网络号码+子网号+主机号。例如一个B类地址:210.30.109.134。一般情况下,这个IP地址的红色部分就是网络号,而蓝色部分就是子网号,绿色部分就是主机号。至于有多少位代表子网号这个问题上,这没有一个硬性的规定,取而代之的则是子网掩码,校园网相信大多数人都用过,在校园网的设定里面有一个255.255.255.0的东西,这就是子网掩码。子网掩码是由32bit的二进制数字序列,形式为是一连串的1和一连串的0,例如:255.255.255.0(二进制就是11111111.11111111.11111111.00000000)对于刚才的那个B类地址,因为210.30是网络号,那么后面的109.134就是子网号和主机号的组合,又因为子网掩码只有后八bit为0,所以主机号就是IP地址的后八个bit,就是134,而剩下的就是子网号码--109。
2. ARP协议
还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡都有一个MAC地址,这个地址是唯一的,那么IP包是如何知道这个MAC地址的?这就是ARP协议的工作。
ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。
一个典型的arp缓存信息如下,在任意一个系统里面用“arp -a”命令:
Interface: 192.168.11.3 --- 0x2
Internet Address Physical Address Type
篇3:ip协议和ip地址分类
1 通信软件的总体设计与实现
通信软件的服务器与客户端都是在Visual Studio 2005开发平台上进行编译实现的, 并通过TCP/IP协议和多线程技术实现客户机和服务器结构 (C/S结构) 的通信, 将大型企业版的ORACLE9i数据库作为服务器的数据库, 因为嵌入式数据库不会占据太多的资源, 符合客户端软件的容量下等特点, 因此该客户端的数据库是嵌入式数据库Sqlite。利用TCP/IP协议来实现网络通信的主要环节就是建立客户端和服务器之间的联系, 服务器需要通过怎样的方式对已连接的客户端列表进行维护, 以及当通信故障出现或服务器发生重启等现象又该怎样及时快速的让系统恢复运行, 其中建立客户端和服务器之间联系的具体活动应该是服务器可以对一个由合法客户端传达的请求链表进行维护, 当客户端长时间不接收数据或者发现客户端出现网络连接错误, 那么就会对这类客户端进行定期清理, 并只接受合法客户端传达的连接请求, 对其进行数据发送。当服务器和客户端进行交互时, 从中可以看出客户端向服务器发出连接请求的时候, 服务器首先会对config.txt文件进行读取操作, 用以检查客户端IP地址的合法性, 当检查合法就进行接受操作, 反之拒绝。当完成连接后客户端会发出读取数据的请求, 服务器则接受请求并进行数据的发送, 这时客户端进行多线程处理。将阻塞类的CSocket作为Socket的基类, 它能在非阻塞socket的基础上进行阻塞操作, 进而在此期间进行消息循环。
而服务器端的运行应该是从AISSender向Transfer Center发送AIS data, 通过确定AIS data再向Parser View发送AIS binary file, 然后再由Manager执行socket port has data, 锁定Msg Queue。也就是当服务器端与通信运营商进行SIA数据中心的首次转发, 就进行TCP/IP连接的建立, 并将接受数据线程启动, 负责进行二进制数据文件的接受;处理数据线程, 负责进行二进制数据的解析, 将解析结果显示在界面上的同时向服务器数据库进行存储;而对客户端连接线程的监听则主要是实现监听Socket和用户Socket之间关系的建立。客户端运行在运行的时候, 客户端启动连接程序主要是负责在某些情况下进行与服务器的重新连接操作, 例如客户端与服务器端连接错误, 服务器重启或者网络错误等现象。当连接成功后则会将读数据线程启动, 此时能够对网卡缓冲区中的数据进行直接读取, 并将数据写入到Msg Queue的变长链表中, 储存数据, 避免丢失。而On Initial Upadate则会将数据处理进程启动, 读取消息链表中的数据, 逐条解析, 并在数据库中插入数据, 或者更新数据, 将其在界面上显示出来, 同时删除全部处理完的数据。
为了避免客户端出现死机现象, 就要保持客户端和服务器端程序中Reservered for Regional Application同为byte类型, 这样才不会让m_buf数组长度较81920大, 让网卡缓冲区持续进行新数据的读入, 进而让程序一直判断m_nlen长度, 从而陷入死循环中。
2 结束语
总而言之, 通信软件通过采用客户端/服务器模式进行数据的传输和采集, 在Visual Studio 2005的开发平台上利用多线程技术和Socket实现编程, 并利用面向对象方法进行系统的分析设计过程, 不断加强系统的扩展性和可重用性, 进一步提升通信软件的实效性。
摘要:为了实现可靠的数据传输, 通信软件的服务器端通常通过多线程技术的利用达到与通信运营商转发中心和客户端进行网络通信, 并完成数据的采集和解析。通信软件客户端能够与其服务器建立连接, 并接收服务器传输的实时二进制数据, 通过解析将数据以数据表格的形式展示出来。本文就对TCP/IP协议和多线程通信软件的设计与实现进行了研究。
关键词:TCP/IP协议,多线程,通信软件,客户端,服务器
参考文献
[1]刘爽, 史国友, 张远强.基于TCP/IP协议和多线程的通信软件的设计与实现[J].计算机工程与设计, 2010 (07) :1417-1420+1522.
[2]陈张荣.计算机多线程TCP/IP协议还原技术概述[J].电子技术与软件工程, 2014 (21) :19.
[3]孙桂斌.基于TCP/IP协议多客户连接的服务端程序实现[J].电脑编程技巧与维护, 2009 (20) :83-85.
篇4:不够用的IP地址
不够用的地址
你很可能见过譬如192.168.1.1这样的数字串,这样的数字就是所谓的“IP地址”。这是你平常访问的那些网站的“真实地址”,例如,当你输入www.guokr.com(域名)时,网络会把它转换成真正的地址111.13.57.142,然后才能找到这个网站在哪里。如果这个转换系统(也就是所谓的“DNS”)出了问题,那网络就要出现问题。
常见的IP地址里的数字是有规定的:四个数字,每个可以从0到255,这被称为“IPv4”(互联网协议第四版)。那么一共就会有2^32次方个不同的地址,也就是将近43亿。而且这43亿地址还有不少是保留的,比如所有以9开头的原则上都是IBM的,12开头的都是AT&T的,17开头的是苹果的,18开头的则归麻省理工……有些厚道的组织,比如斯坦福,本来占据了所有36开头的,现在正把多余的地址拿出来回馈社会,但人并不都这么好心。
所以,那帮技术人员实在太目光短浅了?这还真不是,IPv4协议诞生于1981年,早在20世纪80年代末他们就预料到了这个不够用的问题,可是新一代协议IPv6——可以提供3.4×10^38个地址——直到1998年才出台。现在,IPv6已经走过整整十六个年头。互联网上使用IPv6的人数大概为4%(该数值基于访问google的人统计,真实数字应为更低,见图1)。
耍花招的后果
为了推迟IPv4挤爆的同时又不用去辛辛苦苦换新协议,各方在抓紧时间利用每一点残存的IP空间碎片。以前大手大脚一整块几万地址分给一个组织的好日子一去不复返,现在就连一小撮256个地址都要寸土必争。但是,这对路由器来说就辛苦了。路由器依靠一个名为“路由表”的东西来快速找到方向,每一个机构拿到一段IP之后都会希望在路由表里加一句规则来加快自己的访问速度。但是每一条规则都要占据同样大小的空间,所以网上的地址越碎,需要的路由表就越大。
路由表是个很重要的东西,所以路由器会专门留出一块高速存储器来存它。譬如某款路由器足够存一百万个条目,想来应该是足够了,而且眼看IPv6必将征服市场,我留一半(512k)给v4,另一半给v6,事实上大部分路由器生产商都想当然认为给v4留了512k足够用,这算是行业标准。不幸的是,对于互联网碎片化的程度,他们显然又低估了。
多年的增长已经让路由表突破了50万大关,而在2014年8月12日,美国通信公司Verizon又一口气往v4路由表里加了15000个条目,使总数抵达了约515000个,超过了上限(相比之下,v6还只有可怜的2万个条目)。這些多出来的信息必须存在更慢的普通存储器里,导致了速度变慢甚至局部网络不稳定。Verizon很快发现了这个问题并把多出来的条目削了回去,但是余波至少持续了数小时。这个事件就是所谓的“512k”事件,也许就是你那天觉得网络慢了的元凶。但这不是问题的结束,只是开始。路由表里的条目数字肯定要自然增长的,早晚会自己超过这个数字。而这些问题都出在路由器上,换路由器可是要花钱的。
诚然,我们可以继续拆东墙补西墙,来一次广泛的固件升级,把更多的快速存储器留给v4。而代价可想而知,就是进一步削减了留给v6的空间。要是早用v6取代v4,IP地址够用的话,现在就不会出现地址碎片化、路由表过大的问题了。
事实上,想想之前人们还以为内存640k就足够,两位数字存储年份就足够,32位储存秒数就足够,现在又一个想当然的上限被突破带来了麻烦,就是理所应当的事情了。
篇5:IP地址追踪
关键词:WinPcap,捕获,数据包,分析,首部,IP地址
1 引言
实现IP地址追踪,首先要得到网络数据包的首部,接下来通过WinPcap进行数据包捕获,然后进行分析。
WinPcap是一个基于Win32平台的,用于捕获网络数据包并进行分析的开源库。它是为Libpcap在Windows平台下实现数据包的捕获而设计的,WinPcap有3个模块构成:
第一个模块NPF (Netgroup Packet Filter) ,是一个虚拟设备驱动程序文件。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。
第二个模块packet.dll是一组用户级的函数库,为win32平台提供了一个公共的接口。不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同。调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。
第三个模块数据包高级驱动程序库 (wpcap.dll) 与操作系统无关,它提供了更加高层、抽象的函数,含有诸如产生过滤器,用户级缓冲等高级功能[1]。
它可以提供了以下的各项功能:
(1)捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报。
(2)在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉。
(3)在网络上发送原始的数据报。
(4)收集网络通信过程中的统计信息。
2 搭建WinPcap编程环境
2.1 下载Winpcap及开发包
Winpcap开发包下载地址:http://www.winpcap.org/
当前版本为4.0.2
在Get Winpcap和Development选项下载文件
WinPcap_4_0_2.exe和WinPcap_4_0_2.zip
2.2 运行WinPcap_4_0_2.exe安装Winpcap
2.3 解压WinPcap_4_0_2.zip
将得到一个WpdPack目录,该目录中包含了5个子目录:docs、Examples-pcap、Include、Examples-remote和Lib。
(1) docs中是Winpcap的帮助文档,比较通俗易懂。
(2) Examples-pcap、Examples-remote是一些例子。
(3) include和lib则分别为C++项目的头文件和链接库。
2.4 创建Winpcap项目
(1)在每一个使用了Winpcap的源程序中,将pcap.h头文件包含 (include) 进来。
(2)如果在程序中使用了WinPcap中提供给Win32平台的特有的函数,需要在预处理中加入WPCAP的定义。
(3)如果程序使用了WinPcap的远程捕获功能,则需要预处理定义中加入HAVE_REMOTE。不要直接把remote-ext.h直接加入到源文件中。
(4)设置VC++的链接器 (Linker) ,添加wpcap.lib库(开发包lib目录中提供)和ws2_32.lib库(系统库)。(本系统以vc.net为开发环境)
3 数据包的捕获
3.1 获得本机网卡信息
其中要用到pcap_findalldevs函数,它是这样定义的int pcap_findalldevs (pcap_if_t**alldevsp, char*errbuf)
功能:
列举系统所有网络设备的信息。
参数:alldevsp:是一个pcap_if_t结构体的指针,如果函数pcap_findalldevs函数执行成功,将获得一个可用网卡的列表,而里面存储的就是第一个元素的指针。每个这样的结构都包含了一个适配器的详细信息。值得注意的是,数据域name和description表示一个适配器名称和一个可以让人们理解的描述。
Errbuf:存储错误信息的字符串
返回值:int:如果返回0则执行成功,错误返回-1。
利用这个函数来获得网卡信息的完整代码如下:
3.2 打开设备并设置为混杂模式
打开设备的函数是pcap_open_live(),定义如下:pcap_t*pcap_open_live (char*device, int snaplen, int promisc, int to_ms, char*ebuf)
主要参数的解释说明:
Snaplen::从每个数据包里取得数据的长度,比如设置为50,则每次只是获得每个数据包50个长度的数据,没有什么特殊需求的话就把它设置为65535最大值就可以了。
promisc:最最重要的promisc是用来指示适配器是否要被设置成混杂模式。一般情况下,适配器只接收发给它自己的数据包,而那些在其他机器之间通信的数据包,将会被丢弃。相反,如果适配器是混杂模式,那么不管这个数据包是不是发给我的,我都会去捕获。也就是说,我会去捕获所有的数据包。
to_ms:指定读取数据的超时时间,以毫秒计 (1s=1000ms) 。在适配器上进行读取操作 (比如用pcap_dispatch () 或pcap_next_ex () ) 都会在to_ms毫秒时间内响应,即使在网络上没有可用的数据包。在统计模式下,to_ms还可以用来定义统计的时间间隔。将to_ms设置为0意味着没有超时,那么如果没有数据包到达的话,读操作将永远不会返回。如果设置成-1,则情况恰好相反,无论有没有数据包到达,读操作都会立即返回。
用法介绍:
3.3 非回调方法捕获数据包
打开设备之后,就可以利用adhandle句柄来正式抓包了。可以用pcap_next_ex () 函数打开适配器并捕获数据包。只有当编程人员使用了pcap_next_ex () 函数才能收到数据包。该函数的参数包含一个网络适配器的描述符和两个可以初始化和返回给用户的指针 (一个指向pcap_pkthdr结构体,另一个指向数据报数据的缓冲) 函数说明如下:
3.4 数据的存储与再读出
存储数据到文件:
3.5 捕获数据过滤
通过WinPcap还可以对捕获的数据进行过滤条件设置:编辑过滤字符串,设置过滤器,制定要捕获的主机、协议等,可以有效地捕获指定类型的数据。通过函数pcap_compile将过滤字符串编译为二进制。常用的过滤字符串有“host124.238.12.230”表示捕获主机124.238.12.230收发的数据帧,“tcp”表示捕获协议类型为TCP的数据帧,“port80”表示捕获目的或源端口是80的数据帧等等,很多过滤字符串还能进行组合。图1给出了部分程序运行界面。
4 数据包分析
数据在网络上传送,要经过如图2的逐次封装,需要传送的用户数据首先经过第一次封装,加入“APPL首部”成为应用数据。该应用数据会被网络进程向下传输,进入传输层。传输层中有UDP和TCP两种协议,不管是选择哪一个,都会被加入另一个首部(TCP首部或者UDP首部)。加入传输层首部封装后,这些数据又会被下传到网络层。网络层中的IP协议对这些数据加入IP首部后再次往下传输,进入链路层!这里需要特别说明一下,TCP/IP链路层由链路层协议、设备驱动程序、网络接口卡、物理线路组成。然而,在平时的应用中,存在多种物理类型的网络,例如:以太网、令牌环网、点对点、光纤分布式数据网络(FDDI)。这些不同的物理网络有不同的设备驱动程序、网络接口卡、物理线路。因此链路层首部存在不统一性。目前最常用的网络类型是以太网,因此它是主要的研究对象,图2就是以太网的数据帧。
4.1 数据帧首部
上文中已经通过函数pcap_next_ex (adhandle, &header, &data) 从网卡或者文件中读取数据帧信息。实际上那是一个如图2最下一行格式的一个比特流,要想看清数据本身必须逐层解包。下面先看一下逐层封装的首部。
4.1.1 以太网首部
以太网首部较为简单其长度为14个字节,分别为前6个字节为目的MAC地址,其次6个字节为源MAC地址,后2个字节为协议类型。
4.1.2IP首部
IP首部字段说明
版本:4位,指定IP协议的版本号。
首部长度 (IHL) :4位,IP协议首部的长度,指明IPv4协议首部长度的字节数包含多少个32位。由于IPv4的首部可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4首部的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5 (5x4=20字节) 。就是说,它表示的是首部的总字节数是4字节的倍数。
服务类型:定义IP协议包的处理方法,它包含如下子字段。
过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~7(网络控制)。
延迟字段:1位,取值:0(正常)、1(期特低的延迟)。流量字段:1位,取值:0(正常)、1(期特高的流量)。可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)。
成本字段:1位,取值:0(正常)、1(期特最小成本)未使用:1位。
总长度:IP包的总长。
16位标识:
标志:是一个3位的控制字段,包含:
保留位:1位。
不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)。
更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)。
13位片移量:当数据分组时,它和更多段位(MF, More fragments)进行连接,帮助目的主机将分段的包组合。
TTL:8位,表示数据包在网络上生存多久,每通过一个路由器该值减1,为0时将被路由器丢弃。
协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议及其十进制数值包括ICMP (1) 、TCP
(6) 、UDP (17) 。
校验和:16位,是IPv4数据报首部的校验和。
源IP地址:32位。
目的IP地址:32位。
4.1.3TCP首部
(1) TCP首部字段说明
源端口号:16位,发出数据的应用程序使用的端口号。
目的端口号:16位,数据所访问的应用使用的端口号。
序号:32位,当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。
确认号:32位,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
头部长度:4位,指示TCP段中数据起始位置。
保留:6位,这些位必须是0。
控制位:6位;开始终止会话使用的控制。
窗口:16位;滑动窗口的大小。
校验位:16位;用于数据校验。
紧急指针:16位,指向后面是紧急数据的字节。
选项:长度不定;但长度必须以字节记;选项的具体内容结合具体命令来看。
填充:不定长,填充的内容必须为0,它是为了保证包头的结合和数据的开始处偏移量能够被32整除。
每一个TCP段都包含一个固定的20字节的段头。TCP段头由20字节固定头和一些可选项组成。实际数据部分最多可以有65495 (65535-20-20=65495)字节。
(2) APPL首部
应用层协议较多,没有统一的格式,常见如http、ftp、pop3、smtp等。这里不做重点讨论。
4.2 程序实现
本段程序实现比较简单,关键是定义好数据帧的首部。
有了这些协议首部指针, 就可以很方便地操作定义的结构体了。例如:通过ntohs (TCPHead->th_sport) 获得TCP包的源端口号。必须说明一下从网络中捕获的数据和主机的数据存在着一个网络序与主机序的转换 (简单说就是高字节和低字节换一下位置, 例如:网络序5A3B对应主机序3B5A) 。VC.net中有函数ntohs, ntohl可以实现此功能。
4.3 抓包实例
实际上当把以太网数据帧的格式弄清处了,那些二进制的比特流就变得不那么神秘了。下面结合程序截图把捕捉到的数据帧分析一下。
图5部分原始捕获数据(TCP协议首部)00 00 01 00 0000 4A BC 20 00 01 00 08 00 45 00 00 5A 75 8C 40 00 36 06 3D10 DB 85 31 08 7C EE 08 86 00 50 0E B1 CD 94 54 9B 0C D106 ED 50 18 02 1E F4 0F 00 00
图6部分原始捕获数据(UDP协议首部)00 00 01 00 0000 4A BC 20 00 01 00 08 00 45 00 00 A6 F3 81 40 00 FB 11 5CA7 DE DE CA CA 7C EE 08 86 00 35 FE 8E 00 92 61 EF 95 A081 80 00 01 00 02 00 02 00 02。
数据分析段代码:
5 数据包的IP地址追踪
根据上文分析,可以从数据包的首部中分析出该包的IP地址。现在需要知道IP地址的所在地位置,效果如图7。实现此功能最简单的方法是利用纯真IP归属地数据库。纯真IP归属地数据库被广泛应用于网络,很多网站推出的专业IP归属地查询程序都对纯真IP库做了格式修改再投入使用,其实,完全可以保留该库的文本格式,直接使用。
5.1 文件格式[7]
纯真IP库只用一个文件QQWry.dat包含了所有记录,既方便嵌入到其他程序,也方便升级。
QQWry.dat文件在结构上分为3块:文件首部(8字节),记录区(不定长)、索引区(7字节的整数倍)。
5.1.1 文件首部
QQWry.dat的文件首部只有8个字节,其结构非常简单,前四个字节是第一条索引的绝对偏移地址,后四个字节是最后一条索引的绝对偏移地址。要注意的是,QQWry.dat里面全部采用了little-endian字节序。如看到的文件首部75 41 51 00C5 EF 78 00实际地址应为00 51 41 75(第一条索引地址),00 78 EF C5(最后一条索引地址)。可以通过两个地址的差值除7后加1可以计算出总的记录数。图8是用UltraEdit看到的QQWry.dat的内容。
5.1.2 索引区
每条索引格式为7个字节,前4个字节是起始IP地址(结束IP地址在记录的前4个字节给出,起始IP地址--结束IP地址是指局域网申请到的IP段),后3个字节就指向了IP记录(记录区),格式见图9。索引区的起始地址已在文件首部前4个字节给出,此时给出一个IP地址就可以开始在索引区搜索IP了。当然,为提高效率一般用二分查找法搜索索引区。看最后一条索引(地址为00 78 EF C5) 00 FF FF FF 54 41 51前4个字节为最后一条记录的起始IP地址FF FF FF 00即255.255.255.0(注意是little-endian字节序)后3个字节54 41 51为记录区的地址00 51 41 54,此地址记录的是版本信息(前4个字节是结束IP地址)255.255.255.0--255.255.255.255纯真网络2009年8月05日IP数据。
5.1.3 记录区
记录区的数据需要通过索引区的数据来获得各个数据的起始位置;本区数据记录了IP地址的结束地址和解释字符串;所有解释字符串都以0x00为结束。
记录的格式应该是:<起始IP><结束IP><国家记录 (通常为国别/省市) ><地区记录 (具体其他说明, 可以为空) >,很显然,国家记录和地区记录会有很多的重复,为节省空间需要使用重定向,其原则是相同的地址描述只记录一次。最简单记录见图10,直接的字符串表示的国家记录和地区记录。
引入一个4字节的结构,第一个字节表明了重定向的模式(模式1, 0X01和模式2, 0X02),后面3个字节是国家名或者地区名的实际偏移位置(如果偏移位置为0,代表区域未知)。
(1)国家记录和地区记录都重复于同一记录
0x01模式,即在IP数据的第5个字节是0x01,则在后面的3个字节是重复数据的偏移地址,包括国家记录和地区记录,描述见图11。
(2)国家记录重复于一记录地区记录不重复
0x02模式,即在IP数据的第5个字节是0x02,则在后面的3个字节是重复数据的偏移地址,只有国家记录,地区记录在偏移地址之后,描述见图12。
(3)国家记录重复于一记录地区记录重复于另一记录
对于0x01模式所得到的国家地区数据中,它又可带有一个重定向结构,描述见图13。这是最复杂的情况当然第二次的重定向可以是图11格式,也可以是只重定向地区名。
5.2 程序代码[8]
本部分详细代码请参阅参考文献。
6 结语
首先介绍了利用WinPcap捕获数据包的基本方法。给出了相关函数的介绍。WinPcap提供了简单的编程接口和高效数据包捕获及过滤机制,且它具有平台无关性特点,使之易于编写高性能的通用网络监听程序。这是抓包程序的基础,也正是本系统采用WinPcap进行捕获数据包的原因。其次分析了以太网数据帧首部的格式,在程序中定义了帧首部的数据结构,实现了对网络数据的初步分析,解开了网络数据传输的一层面纱,最后重点分析了IP纯真库的文件格式,实现了IP地址归属地的查询。
参考文献
[1]CSDN博客.http://blog.csdn.net/gofishing/archive/2006/05/11/725334.aspx.
[2]WinPcap教程.循序渐进教您使用WinPcap:WinPcap中文技术文档.
[3]WinPcap开发文档示例.
[4]蔡超, 李祥.基于数据链路层的网络监听的应用研究.
[5]蔡超, 李祥.基于数据链路层的网络监听的应用研究.
[6]TCP/IP协议逐步解析 (一) .http://bbs.chinaunix.net/viewthread.php?tid=1312327.
[7]纯真IP数据库格式详解Luma.清华大学.
篇6:分散IP地址算法一例
近日笔者设计某个应用程序时需要处理一个IP地址数组, 原始的数 组元素可 能含有一 些排列紧 密的IP地址 , 比如22.33.44.44, 22.33.44.45, 诸如此类 , 现在要求对这个原始数组进行处理, 最后得到一个尽量分散的数组, 其中任意两个相邻数组元素的IP地址间能最大程度地保持大于某个门限距离, 比如至少第三个8位组是不同的。
2 算法设计
经典算法似乎只有对数组的排序, 不过可以利用排序功能来设计分散算法, 然而在此之前, 还必须对IP地址本身进行一些预处理, 由于IP地址本身可能以字符串为形式存在, 所以首先可以先把IP地址转换为整数, 假设IP地址以以下4个8位组形式表示:
8bit[A].8bit[B].8bit[C].8bit[D]
那么其对 应的整数 就是256*256*256*A +256*256*B + 256*C+D, 这样转换后, IP地址就可以象整数一样进行排序和比较了。当然在完成分散后, 可以再次将整数转换回IP地址, 转换方法很多, 笔者使用了参考文献1中的算法。
下面以对一个整数数组如何分散来做说明, 假设数组Long是需要分散的数组, 具体分散步骤如下:
(1) 对Long按从小到大排序。
(2) 建立两个临时数组Long1, Long2。
(3) 将Long的第一个元素放入Long1。
(4) 依次测试Long从第2个元素开始的后续元素 , 如果当前测试的元素与Long1数组当前最后一个元素之间距离小于门限 (即接近), 那么将这个元素放入Long2, 否则就将元素放入Long1。
(5) 遍历完毕Long数组后 , 测试Long2数组元素个数 , 如果大于2个, 则按 (1) - (4) 递归处理Long2数组, 否则直接转 (6)。
(6) 清空Long数组后, 将Long1数组, Long2数组元素依次放回Long数组。
(7) 如果Long2数组个数是2, 且两者接近的话 , 交换Long数组的最后第三个元素和最后第2个元素。
以上就是笔者设计的算法, 注意第 (7) 步骤是一种特殊处理, 原因是在某种极端情况下, 由于Long2数组只含2个元素, 虽然可能他们是接近的, 但没有机会分散, 所以用第 (7) 步来进行微调。
3 示例代码
下面给出用C# 实现该算法的示例代码, 供各位读者参考:
大部分代码很直观, 无须更多解释, 这里只做两个说明, (1) Near函数是定义两个数组元素间是否接近的函数, 这取决于用户自己, 比如这里笔者设计了256为门限, 实际上对数组来说就是满足至少第三个8位组不同, 读者可自己修改。 (2) 请注意GetLongFromIP函数, 虽然每个8位组的数值用int型变量足以表达, 但是当乘以256三次后, 这个数组可能超过了32位, 因此为了不溢出, 这里必须使用Long类型来Parse8位组。
4 结语
篇7:IP地址冲突及解决策略
1.1 配置静态IP地址重复
IP地址对于一个网络用户来说,是配置的必选项。当用户在配置静态TCP/IP选项时,没有使用网络管理员为其分配的IP地址,随意修改或故意盗用,就会形成IP地址的冲突。由于IP地址是一个用户在计算机上可以随意设置和修改的逻辑地址,网络管理员无法限制用户对IP地址的这种静态配置和修改,从而就会造成IP地址冲突。
1.2 IP地址和MAC地址同时被修改
MAC地址是由IEEE委员会分配、固化在网卡上的网络设备的硬件地址,在以太网来中,就是我们常说的网卡地址。每个网卡上的地址我们叫做MAC地址,在所有以太网设备中MAC必须是惟一的,一般是不得随意改动的。然而,在一些兼容计算机的网卡上的MAC地址是可以通过程序的配置来实现修改的。如果在配置修改程序时将某个兼容计算机的IP地址和MAC地址都修改为其它某台合法计算机的IP地址和MAC地址,那么,还是会出现IP地址冲突的现象。
1.3 通过编程进行IP的电子欺骗
非法用户通过使用SOCKET编程,想网络管理层发送数据包,这个数据包中带有假冒源的IP地址,并使其绕过上层网络管理软件,以达到动态配置和修改IP地址目的。修改后的这个IP地址是伪造某台合法用户的IP地址,这样就会出现IP冲突的情况。
2、IP冲突的解决方法
IP地址冲突,使得网络不能正常运行,给网络用户带来了及其不便。要想解决这个问题目前比较常用的方法是定期扫描网络各路由器的ARP表,在ARP表中获得当前正在使用的IP地址以及IP-MAC对照关系,用合法的IP地址表和ARP中IP-MAC表进行比对,当比对的结果不一致时,就说明当前有IP地址冲突行为发生,管理员采用适当的方法和技术给予解决。当前,常用的解决方法有IP地址和MAC地址捆绑技术、交换机端口和计算机MAC地址绑定与端口定位相结合技术、动态分配用户端计算机IP地址技术和使用代理服务器或使用防火墙技术等。
2.1 IP地址和MAC地址捆绑技术
对于静态修改IP地址的问题,网络管理员可以采用静态路由技术,即IP地址—MAC地址绑定的方式来给予解决。
对接入网络的计算机的IP地址的管理是通过IP地址分配和路由器的配置来实现的,我们可以为路由器设置静态ARP表,使每个IP地址对应一个MAC地址,这样就可以实现IP地址和MAC地址的绑定,合法计算机的IP地址对应所分配的MAC地址。只有对应的才能正常在网络上登陆。
一个网段内的网络寻址是依靠MAC地址而不是依靠IP地址来完成的。IP地址只是在网段之间寻址使用的。位于每个网段的路由器中都有一张称为ARP的表,用来支持在IP地址和MAC地址之间的一一对应关系,它提供两者的相互转换,具体地说就是将IP地址解析为MAC地址,同时,这张ARP表是由ARP协议生成并维护的。所以,在配置路由器时,可以指定静态的ARP表,路由器会根据静态的ARP表检查数据包,当IP地址与为其配置的MAC地址相匹配,网络进行数据传递,如果IP地址与MAC地址不能对应,则不进行数据包的处理。
通过在路由器上建立一个静态的ARP表,使合法的IP地址和MAC建立起一一对应的关系,网络运行正常,而未经授权的l P地址无法通过路由器转发数据,非法用户受到限制。这样经过IP地址和MAC地址的绑定,解决了局域网IP地址的冲突问题。
2.2 采用交换机端口H—MAC地址绑定技术
我们都知道在Windows操作系统中可以通过修改注册表来实现改变MAC地址。如果将一台计算机的IP地址和MAC地址都改为另外一台合法主机的IP地址和MAC地址,尽管采取了IP地址与MAC地址的绑定措施,也是解决不了冲突问题的。这时,单靠静态路由技术是解决不了的。其实,正是由于MAC地址的可以修改,才会出现IP地址和MAC地址成对冲突的现象。这时我们可以借助交换机端口H—MAC地址绑定与端口定位相结合技术来避免IP冲突。把每个合法计算机用户的IP地址和交换机端口对应,通过远程控制实现对网络的管理。
2.3 为特殊计算机用户动态分配IP地址
在设置DHCP服务时可以根据需要借助于绑定用户网卡MAC地址和IP地址的方式,为某些特殊用户或服务器保留IP地址,并根据不同IP设定权限为其动态分配IP地址。这样,既简便了IP地址的设置,避免了IP地址冲突,又保证了特殊用户对固定IP地址的需求。但是,如果网络中只有一台DHCP服务器,当它发生故障时,所有DHCP用户都将既无法获得IP地址,也无法释放已有的IP地址,从而导致网络通讯瘫痪。因此,为特殊计算机用户动态分配IP地址需要在每个网络中都分别设置并分别配置一台DHCP服务器。
2.4 在网络中使用防火墙与代理服务器
在网络中使用防火墙与代理服务器相结合,也能较好地解决IP地址冲突问题。防火墙用来隔离内部网络和外部网络。用户访问外部网络时要通过代理服务器进行。需要访问外部网络(如internet)的用户,IP地址的使用可以是无偿的,但是要提前到网络管理部门申请帐号和口令。合法用户可以选择任意一台主机通过代理服务器访问外部网络资源,而无帐户的用户即使盗用IP地址,也没有帐户和密码,因此,不能使用外部网络。
3、结语
【ip协议和ip地址分类】相关文章:
TCP/IP详解之IP协议ARP协议和RARP协议07-30
最新ip代理协议地址04-20
MAC地址和IP地址06-09
IP地址管理05-12
ip地址总结范文05-23
如何查看外网IP地址?查看外网IP地址方法电脑新手办公/数码05-15
ip地址冲突解决办法09-27
网络规划ip地址分配09-28