【网络协议】IPV4协议介绍

article/2025/9/12 22:08:22

💪本节内容:IPV4协议介绍、IPV4地址格式、IPV4数据格式及C++项目结构体设计

😏【Qt6网络抓包工具项目实战】总导航目录(建议收藏书签~~~)

✌️ part1
😏【Qt6网络抓包工具项目实战】1.1Qt6.2.2环境搭建(免费)
😏【Qt6网络抓包工具项目实战】1.2Qt6项目工程创建(免费)
😏【Qt6网络抓包工具项目实战】1.3NMap、NPacp、WinPacp库介绍(免费)
😏【Qt6网络抓包工具项目实战】1.4Qt6引用Npacp第三方库项目目录设计(免费)
😏【Qt6网络抓包工具项目实战】1.5封装通用线程安全单例模板
😏【Qt6网络抓包工具项目实战】1.6使用Npacp获取网卡信息
😏【Qt6网络抓包工具项目实战】1.7项目测试类设计与开发
😏【Qt6网络抓包工具项目实战】1.8多线程框架设计与开发
😏【Qt6网络抓包工具项目实战】1.9主界面显示抓包的16进制数据功能开发

✌️ part2
😙【Qt6网络抓包工具项目实战】2.1以太网帧结构介绍
😙【Qt6网络抓包工具项目实战】2.2ARP协议介绍(免费)
😙【Qt6网络抓包工具项目实战】2.3IPV4协议介绍(免费)
😙【Qt6网络抓包工具项目实战】2.4ICMP协议介绍
😙【Qt6网络抓包工具项目实战】2.5TCP协议介绍
😙【Qt6网络抓包工具项目实战】2.6UDP协议介绍
😙【Qt6网络抓包工具项目实战】2.7IPV6协议介绍
😙【Qt6网络抓包工具项目实战】2.8MAC帧、ARP、TCP、IPV4、IPV6、UDP、ICMP协议结构体汇总
😙【Qt6网络抓包工具项目实战】2.9网卡数据解析并显示

✌️ part3
😬【Qt6网络抓包工具项目实战】3.1选择网卡适配器界面开发
😬【Qt6网络抓包工具项目实战】3.2抓包过滤器功能开发
😬【Qt6网络抓包工具项目实战】3.3主界面数据包修改为Table显示
😬【Qt6网络抓包工具项目实战】3.4开发点击数据表格生成网络树形结构
😬【Qt6网络抓包工具项目实战】3.5python3 tcp客户端、服务端编写(免费)
😬【Qt6网络抓包工具项目实战】3.6python3 udp客户端、服务端编写(免费)
😬【Qt6网络抓包工具项目实战】3.7 TCP三次握手分析(免费)
😬【Qt6网络抓包工具项目实战】3.8 TCP四次挥手分析(免费)
😬【Qt6网络抓包工具项目实战】3.9 UDP数据分析分(免费)
😬【Qt6网络抓包工具项目实战】3.10 TCP数据分析分(免费)

文章目录

  • 1.IPV4协议介绍
  • 2.IPV4地址
    • 2.1地址格式
    • 2.2地址分配
    • 2.3特殊用途的地址
  • 3.IPV4数据格式
  • 4.IPV4中Protocol所有类型
  • 5.IPV4C++结构体定义

1.IPV4协议介绍

网际协议版本4(英语:Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。

2.IPV4地址

IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(2)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管理机构之后,IANA的主要地址池已经用尽。
这些限制刺激了仍在开发早期的IPv6的部署,这也是唯一的长期解决方案。

2.1地址格式

IPv4地址可被写作任何表示一个32位整数值的形式,但为了方便人类阅读和分析,它通常被写作点分十进制的形式,即四个字节被分开用十进制写出,中间用点分隔。

例:

192.168.8.101

2.2地址分配

最初,一个IP地址被分成两部分:网上识别码在地址的高位字节中,主机识别码在剩下的部分中。
为了克服这个限制,在随后出现的分类网络中,地址的高位字节被重定义为网络的类(Class)。这个系统定义了五个类别:A、B、C、D和E。A、B和C类有不同的网络类别长度,剩余的部分被用来识别网络内的主机,这就意味着每个网络类别有着不同的给主机编址的能力。D类被用于多播地址,E类被留作将来使用。

  • A类地址
    +(1)A类地址网络号第一位固定为0,其它7位可以分配,主机号长度为24位
    +(2)网络号分配的数量为2^7 = 128,地址范围为:1.0.0.0—127.255.255.255
    +(3)10.0.0.0-10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址,路由器接收到私有地址,不会向Internet转发该分组,私有地址与NAT相关)
    (4)127.0.0.0-127.255.255.255是保留地址,用做循环测试用的
    (5)0.0.0.0—0.255.255.255也保留用作特殊用途
    (6)因此网络号可分配的只有125个,每个网络段的主机号可以分配的只有 2^24-2=16777214个(主机号全0和主机号全1保留)

  • B类地址
    +(1)B类地址网络号第1,2位固定为10,其它14位可以分配,主机号长度为16位
    +(2)地址范围为:128.0.0.0—191.255.255.255
    +(3)172.16.0.0—172.31.255.255是私有地址
    +(4)169.254.0.0—169.254.255.255是保留地址(如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP)
    (5)每个网络段可分配的主机号为2^16 - 2 = 65534(主机号全0和主机号全1保留)

  • C类地址
    +(1)C类地址网络号前3位固定为110,其它21位可以分配,主机号长度为8位
    +(2)C类地址范围:192.0.0.0—223.255.255.255
    +(3)192.168.0.0—192.168.255.255是私有地址
    +(4)网络号可分配的块数为2^21 = 2097152,没块网络号可分配的主机号数为2^8-2 = 254(主机号全0和主机号全1保留)

  • D类地址
    D类IP地址不标志网络,前4位固定为1110,地址范围为:224.0.0.0—239.255.255.255,用作特殊用途,如多播地址

  • E类地址
    E类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1111。E类地址范围:240.0.0.0—255.255.255.255,用于某些实验和将来使用

2.3特殊用途的地址

CIDR地址块描述参考资料
0.0.0.0/8本网络(仅作为源地址时合法)RFC 5735
10.0.0.0/8专用网络[RFC 1918](https://baike.baidu.com/item/RFC 1918)
100.64.0.0/10电信级NATRFC 6598
127.0.0.0/8环回RFC 5735
169.254.0.0/16链路本地RFC 3927
172.16.0.0/12专用网络[RFC 1918](https://baike.baidu.com/item/RFC 1918)
192.0.0.0/24保留(IANA)RFC 5735
192.0.2.0/24TEST-NET-1,文档和示例RFC 5735
192.88.99.0/246to4中继RFC 3068
192.168.0.0/16专用网络[RFC 1918](https://baike.baidu.com/item/RFC 1918)
198.18.0.0/15网络基准测试RFC 2544
198.51.100.0/24TEST-NET-2,文档和示例RFC 5737
203.0.113.0/24TEST-NET-3,文档和示例RFC 5737
224.0.0.0/4多播(之前的D类网络)RFC 3171
240.0.0.0/4保留(之前的E类网络)RFC 1700
255.255.255.255受限广播RFC 919

3.IPV4数据格式

  • 图1
    在这里插入图片描述
  • 图2
    在这里插入图片描述

Version(版本)

字段长度为4位,标识了数据包的IP版本号
0100表示IP版本4 0110表示IP版本6 (其他所有版本号仅作为“历史产物”)

IHL(头部长度)

字段长度为4位(单位为4个字节),ip报头的最小长度为20个八位组,最大可以扩展到60个八位组,通过这个字段可以描述32位字长的最大长度

Type of Service(服务类型)

字段长度为8位 用来指定特殊的数据包处理方式。该字段实际上被分为两个字段:优先权和Tos。

在这里插入图片描述

Total Length(总长度)

字段长度为16位(单位为一个八位组),其中包括IP报头。接受者用总长度减去IP报头长度,就可以确定数据包数据有效载荷的大小。(用十进制表示最大到65535个)

Identification(标识符)

字段长度为16位,通常与标记字段和分段偏移字段一起用于数据包的分段。 如果数据包原始长度超过数据包所要经过的数据链路的最大传输 单元( MTU),那么必须将数据包分段为更小的数据包。例如,一个大小为 5000 字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳 容纳大小为1500 字节的数据 包。路由器需要在数据成 帧之前将数据包分段成多个数据 包,其中每个数据包长度不得超过1500 字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。

IP Flags(标记)

字段长度为3位,第1位没有使用。第二位不分段位(DF),置1之后路由器不能对其分段处理,如果超过MTU值则路由器不能对其转发将其丢弃,并向源点发送错误消息。

Fragment Offset(分片偏移)

字段长度为13位,以 8个八位组为单位,用于指明分段起始点相对于报头起始点的偏移量。由于分段到达时可能错序,所以分段 偏移字段可以使接收者按照正确的顺序重组数据包。请注意,如果一个分段在传输中丢失,那么必 在网络中同一点对整个数据 包重新分段并重新发送。 因此,容易发生故障的数据链路会造成时延不成比例。 另外,如果由于网络拥塞而造成分段丢失, 那么 重传整组分段会进一步加重网络拥塞。

Time To Live(生存时间)

字段长度为8位,以前为时间。现在为跳数,传输时,每台路由器都会将TTL值减一,到0会向源点发送错误信息。(用于防环,trace追踪工具)

Protocol(协议)

字段长度为8位,它给出了主机到主机层或传输层协议 的“ 地址” 或协议号,协议字指定了数据包中信息的类型。当前已分配了 100 多个不同的协议号。

比较有名的 1:ICMP 4:IP 6:TCP 17:UDP 21:ftp 22:ssh 23:telnet 80:http 88:eigrp 89:ospf

Header Checksum(头部校验)

是针对IP报头的纠错字段。校验和不计算被封装的数据,UDP、TCP和ICMP 都有各自的校验和。

Source Address(源地址) Destination Address(目的地址)

字段长度为32位,分别表示发送者数据包源点和目的地的 IP 地址。

IP Option(可选项)

  • 松散源路由选择( Loose Source Routing)—— 它给出了一连串路由器接口的IP地址序列。数据包必须沿着IP地址序列传送, 但是允许在相继的两个地址之间跳过多台 路由器。

  • 严格源路由选择( Strict Source Routing)—— 它也给出了一系列 路由器接口的IP地址序列。不同于松散源路由选择,数据 包必要严格按照路由转发。如果下一跳不再列表中,那么 将会发生错误。

  • 记录路 由( Record Route)—— 当数据包离开时为每台路由器提供空间记录数据包的出站接口地址,以便保存数据包经过的 所有路由器的记录。记录路由选项提供了类似于路由追踪的功能,但是不同点在于这里记录了双向路径 上的出站接口信息。

  • 时间戳( Timestamp)—— 每台路由器除了会记录一个时间戳之外,时间戳选项十分类似于记录路由选项, 这样数据包不仅可以知道自己到过哪里,而且还可以记录到达的时间。

4.IPV4中Protocol所有类型

数值值描述
0保留字段,用于IPv6(跳跃点到跳跃点选项)
1Internet控制消息 (ICMP)
2Internet组管理 (IGMP)
3网关到网关 (GGP)
41P中的IP(封装)
5
6传输控制 (TCP)
7CBT
8外部网关协议 (EGP)
9任何私有内部网关(Cisco在它的IGRP实现中使用) (IGP)
10BBNRCC监视
11网络语音协议
12PUP
13ARGUS
14EMCON
15网络诊断工具
16混乱(Chaos)
17用户数据报文 (UDP)
18复用
19DCN测量子系统
20主机监视
21包无线测量
22XEROXNSIDP
23Trunk-1
24Trunk-2
25leaf-1
261eaf-2
27可靠的数据协议
28Internet可靠交易
291SO传输协议第四类 (TP4)
30大块数据传输协议
31MFE网络服务协议
32MERIT节点之间协议
33序列交换协议
34第三方连接协议
35域之间策略路由协议
36XTP
37数据报文传递协议
38IDPR控制消息传输协议
39TP+ +传输协议
40IL传输协议
411Pv6
42资源命令路由协议
431Pv6的路由报头
441Pv6的片报头
45域之间路由协议
46保留协议
47通用路由封装
48可移动主机路由协议
49BNA
501Pv6封装安全有效负载
511Pv6验证报头
52集成的网络层安全TUBA
53带加密的IP
54NBMA地址解析协议
55IP可移动性
56使用Kryptonet钥匙管理的传输层安全协议
57SKIP
581Pv6的ICMP
591Pv6的无下一个报头
60IPv6的信宿选项
61任何主机内部协议
62CFTP
63任何本地网络
64SATNET和BackroomEXPAK
65Kryptolan
66MIT远程虚拟磁盘协议
67Internet Pluribus包核心
68任何分布式文件系统
69SATNET监视
70VISA协议
71Internet包核心工具
72计算机协议Network Executive
73计算机协议Heart Beat
74Wang Span网络
75包视频协议
76Backroom SATNET监视
77SUN ND PROTOCOL—临时
78WIDEBAND监视
79WIDEBAND EXPAK
80ISO Internet协议
81VMTP
82SECURE—VMTP(安全的VMTP)
83VINES
84TTP
85NSFNET—IGP
86不同网关协议
87TCF
88EIGRP
89OSPF IGP
90Sprite RPC协议
9]Locus地址解析协议
92多播传输协议
93AX.25帧
94IP内部的IP封装协议
95可移动网络互连控制协议
96旗语通讯安全协议
97IP中的以太封装
98封装报头
99任何私有加密方案
100GMTP
101Ipsilon流量管理协议
102PNNI over IP
103协议独立多播
104ARIS
105SCPS
106QNX
107活动网络
108IP有效负载压缩协议
109Sitara网络协议
110Compaq对等协议
111IP中的IPX
112虚拟路由器冗余协议
113PGM可靠传输协议
114任何0跳跃协议
115第二层隧道协议
116D-II数据交换(DDX)
117交互式代理传输协议
118日程计划传输协议
119SpectraLink无线协议
120UTI
121简单消息协议
122SM
123性能透明性协议
124ISIS over IPv4
125FIRE
126Combat无线传输协议
127Combat无线用户数据报文
128SSCOPMCE
129IPLT
130安全包防护
131IP中的私有IP封装
132流控制传输协议
133~254未分配
255保留

👀👀👀👀👀👀👀下面是重点,敲黑板

Protocol字段值重点程度含义
1⭐️⭐️⭐️⭐️⭐️ICMP
6⭐️⭐️⭐️⭐️⭐️TCP
17⭐️⭐️⭐️⭐️⭐️UDP

5.IPV4C++结构体定义

struct ip_header
{
#if defined(LITTLE_ENDIAN)u_char ihl:4;           //长度u_char version:4;       //版本
#elif defined(BIG_ENDIAN)u_char version:4;u_char  ihl:4;
#endifu_char tos;				//TOS 服务类型u_short tlen;			//包总长 u_short占两个字节u_short id;				//标识u_short frag_off;	//片位移u_char ttl;				//生存时间u_char proto;		//协议u_short check;		//校验和u_char saddr[4];			//源地址u_char daddr[4];			//目的地址u_int	op_pad;		//选项等
};

http://chatgpt.dhexx.cn/article/vsFpl8MQ.shtml

相关文章

DHCP协议

目录 1、DHCP协议 2、DHCP的工作过程 动态获取IP地址流程 跟新租期流程 解除租期流程 1、DHCP协议 DHCP(Dynamic Host Configuration Protocol)协议是处于应用层的协议。一个主机如果想正常上网,需要配置IP地址,子网掩码,默认网关基本配置…

TCP/IP-----协议号、端口号、ARP、icmp

文章目录 一、数据流向过程二、协议详解1)ARP协议2)ICMP协议 协议号 协议号是存在于IP数据报的首部的20字节的固定部分,占有8bit.该字段是指出此数据报所携带的是数据是使用何种协议,以便目的主机的IP层知道将数据部分上交给哪个处…

UDP协议

引言 本文中只关于IPv4;UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。总之,能没有的都没了。但它提供了差错检测,是一种端到端的校验和。因此使用它的程序必须自己实现…

BGP协议

BGP协议 工作层工作原理BGP简单配置———含密码认证配置个人图解BGP 工作层 BGP是工作在应用层的协议,但基于传输层的TCP协议 工作原理 路由协议通常分为内部网关协议(IGP: Interior Gateway Protocol)和外部网关协议(EGP: Ext…

IP协议介绍

文章目录 定义特点作用寻址和路由:分片与重组: ①TCP分段与IP分片的区别?TCP分段IP分片什么是MSS?滑动窗口与MSS的区别? 什么是MTU?MSS与MTU的关系疑问UDP是否会进行分段?TCP分段后会进行IP分片…

华为 协议归纳总结

青出于蓝而胜于蓝 文章目录 一、路由优先级二、路由协议三、常见的永久组地址四、常用的UDP协议及端口号五、常用的TCP协议及端口号六、协议七、报文头格式 一些常用的知识点,经常用到,也很容易忘记、混淆,所以有必要去整理一下这些常用知识点…

管理距离 动态协议端口号 协议号

管理距离(Administrative Distance,简称AD ) 路由器可以通过多种途径获知路由条目∶如静态手工配置、各种动态路由协议等等。当路由器从两种不用的途径获知去往同一个目的地的两条路由,那么路由器会比较这两条路由的AD值,也就是管理距离&…

各协议的协议号和端口号

协议号与端口号详解 IP是网络层协议,IP头中的协议号用来说明IP报文中承载的是哪种协议(一般是传输层协议,比如6 TCP,17 UDP;但也可能是网络层协议,比如1 ICMP;也可能是应用层协议,比…

TCP/IP协议号

转自http://www.52rd.com/Blog/Detail_RD.Blog_liweikui_22903.html,作者:liweikui IP协议号:IP首部中有8位协议号,用于指明IP的上层协议,具体如下: 协议号 协议类型 说明 0 HOPOPT IPv6逐跳选项 1…

MATLAB APP全局变量的使用

切换到代码视图,左上角代码浏览器点击属性,有如下提示: 点击➕旁边,会出现提示: 按照提示所说,在这里就可以添加全局变量了。 点击➕,在代码中便会添加如下代码: properties (Acce…

MATLAB GUI 设全局变量的位置

如果要在控件之外定义全局变量, 则这个全局变量要设置在OutputFcn下面 如图:

matlab 全局变量(global)数据类型报错问题

今天我在做matlab的GUI界面时,其中涉及到定义一个全局的元胞变量(cell)。将其摘录下来如下: clc;clear all global a s11;s2123;s3a; a(1,1:3){s1,s2,s3}然后出现错误:从 cell 转换为 double 时出现以下错误:错误使用 double无法从 cell 转换…

matlab 全局符号变量,优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

示例模型 在模型 matlab:rtwdemo_optimize_global_ebf 中,Assignment 模块将来自 Inport 模块和 Constant 模块的值赋给输出信号。输出信号馈入 Gain 模块中。 model rtwdemo_optimize_global_ebf; load_system(rtwdemo_optimize_global_ebf) 生成代码但不进行优化…

20220117 matlab 全局变量调试

要在外部和里面都定义global才行貌似 global f1function parameter_inpu__() global f1 f11;endglobal f1 b1 f_temp test1__(); dynamic_e()function parameter_inpu__() global f1 f11;endfunction test1__() global f1 b1 b1f1;endfunction dynamic_e() global f_temp f_te…

matlab变量全局化,matlab全局变量global

matlab global定义全局变量的问题 我写了matlab的一个主函数,放在一个M文件中,然后在这个主函数中调用其可以,前提是两个函数共用变量均需用global声明 例子: 保存f.m内容如下: function f(a,b) global x y; x=a; y=b; 保存g.m内容如下: function [out]=g global x y; ou…

matlab 编程之全局变量(global)和永久变量(persistent)

一、global 官方解释: help globalglobal Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function has itsown local variables, which are separate from those of other functions,and from those of th…

Matlab之全局变量

通过返回修改后的输入参数,可以实现函数内部对Matlab工作空间变量的修改。而另一种殊途同归的方法则是使用全局变量。 声明全局变量需要用到global关键词,语法格式为‘global variable’ 通过全局变量可以实现Matlab工作空间变量空间和多个函数的函数空间…

JavaScript 原型链和继承面试题

JavaScript 原型链和继承问题 JavaScript 中没有类的概念的,主要通过原型链来实现继承。通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,JavaScript只是在两个对象之间创建一个关联&am…

11、原型链、原型继承和Class继承

11.1 原型 每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象(函数.prototype)的用途是包含可以由特定类型的所有实例共享的属性和方法 11.2 原型链 基本思想就是…