IP地址和IP协议

IP地址和IP协议



一、认识IP地址

1.概念

IP地址是指互联网协议地址,又翻译为网际协议地址

2.作用

IP地址是IP协议提供的一种统一的地址格式,它为每一台参与通信的主机分配一个逻辑地址,从而屏蔽物理地址的差异
在这里插入图片描述

实际上,IP地址并非根据主机台数来配置,而是每一台主机上的每一块网卡都可以设置IP地址,通常情况下,一个网卡只能设置一个地址,但是其实可以配置多个IP地址。此外。一台路由器通常会配置两个以上的网卡,因此可以设置两个以上的IP地址

3.格式

IP地址(IPv4地址)是由32位正整数来表示的,IP地址在计算机内部以二进制方式被处理,但是在实际标记中,不使用二进制方式,而是采用点分十进制的方式来表示,将32位的IP地址以每8位为一组。分成4组,以下图为例:

在这里插入图片描述

注:IP协议有两个版本,IPV4和IPV6,本文所讲的是IPV4

4.组成

IP地址由"网络标识(网络地址)"和"主机标识(主机地址)"两部分组成

名称作用
网络标识标识网段, 保证相互连接的每个网段的地址不相重复,但是相同网段内相连的主机必须有相同网络地址
主机标识标识主机,同一网段内,主机之间具有相同的网络号,但是必须要有不同的主机号

如下图所示:
在这里插入图片描述

5.IP地址分类

IP地址分为五个类别,分别为A类,B类,C类,D类,E类。它是根据IP地址中从第一位到第四位的比特列对其网络标识和主机标识进行区分。

1.A类地址

A类地址的网络号字段占1个字节(8位),首位以"0"开头的地址,后面7位可供使用。使用十进制表示:0.0.0.0~127.0.0.0是A类的网络地址,这里需要注意的是:

1.网络号为全0(0.0.0.0)的IP地址有特殊用途,它表示"本网络"
2.网络号为127,保留为本地软件环回测试本主机的进程之间的通信用,通常为127.0.0.1
3.主机号全0表示该IP为"本主机"
4.主机号全1表示"所有的",为广播地址

2.B类地址

B类地址的网络号有2个字节(16位),是前两位“10”的地址,后面14位可供使用,使用十进制表示:128.0.0.1~191.255.0.0是B类的网络地址

在这里插入图片描述

3.C类地址

C类地址网络号有3个字节(24位),是前三位“110”的地址,后面21位可供使用,使用十进制表示:192.168.0.0~239.255.255.0是C类的网络地址

4.D类地址

C类地址网络号有4个字节(32位),是前四位“1110”的地址,后面28位可供使用,使用十进制表示:224.0.0.0~239.255.255.255是D类的网络地址,D类地址没有主机标识,常被用于多播

5.E类地址

为保留地址

二、IP协议(IPv4)

IP协议的首部格式

在这里插入图片描述

1.版本(Version)

由4个比特构成,此处只有两个取值,分别为4(IPv4)和6(IPv6)

在上面的IP地址中,我们知道一个IP地址32位,只能表示42亿9千万个数字,而地址的期望就是每个设备的地址均不相同,所以42亿是远远不够的

针对IP地址不够用的问题,想了很多办法,以下是典型的两种
1.动态分配IP地址,可以省下一批IP地址,但是没有从根本上增加IP地址,只提高了利用率
2.NAT网络地址转换,本质上使用一个IP代表一批设备,大大提高IP地址的利用率,使用端口号进行区分

NAT网络地址转换:

将IP地址分为两类:
1.内网IP(私有IP) 10.* (172.16.* - 172.31.*) 192.168. *
2.外网IP(公网IP) 除上面三个其他都为公网IP
NAT要求:公网IP必须是唯一,私网IP可以在不同的局域网中重复,如果某个私网里的设备想访问公网的设备,就需要对应的 NAT 设备(路由器),把 IP 地址进映射,从而完成网络访问,反之,公网的设备,无法直接访问私网的设备,不同局域网的私网的设备无法直接相互访问。

但都未从实际上增加IP地址,所以6的出现,根本目的是为了解决版本4不够用的问题,IPv6使用16个字节表示IP地址即128位,是4个版本4相乘,即42亿 * 42亿 * 42亿 * 42亿,这样世界上的每一粒沙子都可以分配到单独的地址,从而解决了IP地址不够用的问题,但是实际上并没有投入使用。

2.首部长度

由4个比特构成,表示IP首部的大小,单位为4个字节。报头中有一个选项部分,是变长的,可有可无。当没有可选项的IP包,首部长度设置为5,因为没有可选项的IP首部长度为20字节(4X5=20)

3.区分服务

由8比特构成,用来表明服务质量

在这里插入图片描述

上图虽说有8位,但实际上只有4位有效,并且这4位只有1位可以是1,其他都是0,4位就表示IP协议的四种形态/工作状态,分别为最小延时,最大吞吐量,最高可靠性,最小成本这里的状态就像相当于游戏中的走路状态,跑步状态,可以进行切换,但是在实际开发中很少使用。

4.总长度

由16比特构成,描述了一个IP数据包的长度( 头+载荷 ),将这个长度减去前面的IP报头长度,剩下的就为载荷长度

思考一个问题:16位总长度,是否意味着一个IP数据报最大只能支持64KB,确实是由这个限制,但是IP自身就支持对包的拆分和组装,举个例子,相当于我在某宝上买一个双人床,商家怎么给我寄过来的,难道是一整个床寄过来吗?显然不是,商家把床拆开,以散件的形式一件一件发过来,到家之后,商家派师傅上门安装

拆分过程:

1.发送方:把100KB的数据,交给传输层封装,传输层交给网络层封装,网络层就将这100KB的数据拆包(比如拆成两份)为64K+36K,再将这两份数据交给数据链路层,由以太网分装成两个数据帧
2.接收方:数据链路层,针对这两个数据帧进行分用,获得两个IP数据报,并将这两个数据报交给网络层,网络层针对这两个IP数据报进行解析,将里面的载荷拼成一个交给传输层,传输层再交给接收方

还需要注意的一个点是:虽然上面说的是64KB,但是实际上IP协议不一定按照64KB为单位进行拆分,实际上会更小,取决于数据链路层的情况

5.标识

由16比特构成,同一个数据拆成的多个包标识是一样的,例如上面的拆分过程

6.标志

由3比特构成,为结束标志

7.片偏移

由13比特构成,标识了多个包的先后顺序,用来标识被分片的每一个分段相对于原始数据的位置

标识,标志,片偏移,这三个字段都是辅助拆分/组包的

8.生存时间

由8比特构成,表示一个数据报在网络上能够传输的最大时间,这个时间的单位不是"秒",而是次数。每一个数据报在构造出来的时候,会有一个初始的TTL的数值(比如32/64/128),每当这个数据报经过一个路由器的时候,TTL就会减一,直至减为0,还没有到达目标,则认为永远无法到达,就丢弃该包,仍以发快递为举例,如果该收件地址不存在,那么这个快递永远无法到达。

9.协议

由8比特构成,描述了载荷部分内容属于哪个协议(TCP/UDP或其他)

10.首部校验格式

由16比特构成,只需要针对首部数据进行校验,载荷部分已经校验,如果校验和不一致,直接丢弃,IP不负责重传,如果上层使用的是TCP,那么在TCP未收到ack之后就重传

11.源地址

由32比特构成,表示发送端IP地址

12.目的地址

由32比特构成,表示接收端IP地址

13.可选字段

长度可变

14.填充

在有可选项的情况下,首部长度可能不是32比特的整数,通过字段填充0,调整为32比特的整数倍

15.数据

存入数据,将IP上层协议的首部也作为数据进行处理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用pcap编写程序,可以通过设置过滤规则来根据IP地址IP协议来过滤捕获的网络数据包。具体实现可以通过调用pcap库中的函数来设置过滤规则,例如使用pcap_compile函数编译过滤规则,使用pcap_setfilter函数设置过滤规则。通过这些函数的调用,可以实现根据IP地址IP协议过滤捕获的网络数据包。 ### 回答2: pcap是一种在Unix和Linux等操作系统上捕获、过滤和分析网路数据包的库,它能够通过API来调用网路数据包捕获的底层实现。使用pcap编写程序可以实现捕获所有流过本机网卡的数据包,并对其进行过滤和解析。 在使用pcap编写程序进行IP地址和协议过滤时,需要注意以下几点: 1. 在程序中需要调用pcap库的相关函数来捕获数据包并进行过滤。一般来说,程序需要使用pcap_open_live函数来开始捕获数据包,并使用pcap_compile函数来编译BPF(Berkeley Packet Filter)过滤器。 2. IP地址过滤可以通过BPF语言中的“host”关键字来实现。例如,要过滤源IP地址为192.168.1.1的数据包,可以使用类似于“host 192.168.1.1”的BPF过滤器。 3. IP协议过滤可以通过BPF语言中的“proto”关键字来实现。例如,要过滤ICMP协议的数据包,可以使用类似于“proto icmp”的BPF过滤器。 4. 在编写程序时,需要注意BPF过滤器的语法。特别是在使用复杂过滤条件时,可能需要使用括号进行优先级控制。 5. 编写程序时需要注意数据包的处理效率。对于高速网络,如果处理效率不够高,可能会丢包或者影响正常的应用程序。 综上所述,使用pcap编写程序并实现IP地址和协议过滤是一项比较复杂的任务。需要对pcap库和BPF过滤器有深入的了解,并且需要考虑程序效率、可扩展性等多个因素。但是,一旦完成这项任务,就可以方便地捕获网络数据包并对其进行分析和监控,为网络安全和性能优化等方面提供很大的帮助。 ### 回答3: pcap库是一个用于捕获和处理网络数据包的库,在数据包的处理过程中,经常需要按照特定的规则对数据包进行过滤,这时候就需要使用pcap库提供的过滤功能。通过设置不同的过滤规则,可以只捕获和处理特定的数据包,避免无效数据的干扰,提高程序效率。 要根据ip地址ip协议过滤捕获的网络数据包,需要先了解ip地址ip协议的基本概念和格式。IP地址网络上的唯一标识符,用于标识网络中不同主机的位置。IP协议是用于在网络上传输数据包的协议,它提供了逐跳传输的机制和数据包路由的功能。 在pcap程序中,可以使用过滤表达式来实现数据包的过滤规则,过滤表达式有两种格式:BPF(Berkeley Packet Filter)和BPF+。BPF过滤表达式是一种机器指令格式,可以直接在内核态运行,因此效率较高。BPF+过滤表达式是一种更高级的格式,支持更多的数据包属性和操作符,比BPF过滤表达式更灵活。 对于IP地址IP协议的过滤,可以使用BPF+格式的过滤表达式来实现。例如,要捕获源IP地址为192.168.1.100的TCP数据包,可以使用下面的过滤表达式: tcp src host 192.168.1.100 其中,tcp表示捕获TCP协议的数据包,src host指定了源IP地址为192.168.1.100。同理,如果要捕获目标IP地址为192.168.1.100的UDP数据包,可以使用如下过滤表达式: udp dst host 192.168.1.100 还可以根据IP协议的类型来进行过滤,例如,如果要捕获所有的ICMP数据包,可以使用如下过滤表达式: icmp 如果要同时过滤多个IP地址或协议类型,可以使用逻辑运算符AND和OR连接多个过滤条件,例如: tcp and src host 192.168.1.100 or icmp 这样就可以同时捕获源IP地址为192.168.1.100的TCP数据包和所有的ICMP数据包了。 通过使用pcap库提供的过滤功能,可以实现对捕获的网络数据包进行有效的过滤,提高程序效率和可用性。同时,还可以根据具体的需求,设置不同的过滤条件和逻辑运算符,实现更加灵活的过滤策略。因此,掌握pcap过滤的相关知识,对于进行网络安全监控和数据包分析等方面的工作都具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值