IPv4
网际协议版本4（，缩写：IPv4，又稱網際網路通訊協定第四版）是网际协议开发过程中的第四个修订版本，也是此协议第一个被广泛部署和使用的版本。其後繼版本為IPv6，直到2011年，IANA IPv4位址完全用盡時，IPv6仍处在部署的初期。
IPv4在IETF于1981年9月发布的 RFC 791 中被描述，此RFC替换了于1980年1月发布的 RFC 760。
IPv4是一种无连接的协议，操作在使用分组交换的链路层（如以太网）上。此协议会尽最大努力交付数据包，意即它不保证任何数据包均能送达目的地，也不保证所有数据包均按照正确的顺序无重复地到达。这些方面是由上层的传输协议（如传输控制协议）处理的。
IPv4使用32位（4字节）地址，因此地址空间中只有4,294,967,296（2）个地址。不过，一些地址是为特殊用途所保留的，如专用网络（约1800万个地址）和多播地址（约2.7亿个地址），这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户，IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日，在最后5个地址块被分配给5个区域互联网注册管理机构之后，IANA的主要地址池已经用尽。
这些限制刺激了仍在开发早期的作为目前唯一的长期解决方案的IPv6的部署。
IPv4地址可被写作任何表示一个32位整数值的形式，但为了方便人类阅读和分析，它通常被写作点分十进制的形式，即四个字节被分开用十进制写出，中间用点分隔。
下表展示了几种不同的格式： 此外，在点分格式中，每个字节都可用任意的进制表达。如，192.0x00.0002.235是一种合法（但不常用）的表示。点分格式也支持零省略的写法，例如127.1.1等同于127.1.0.1。
说明：D类与E类IPv4地址不区分网络地址与主机地址 最初，一个IP地址被分成两部分：網路識別碼在地址的高位字节中，主機識別碼在剩下的部分中。
为了克服这个限制，在随后出现的分类网络中，地址的高位字节被重定义为网络的"类"(Class)。这个系统定义了五个类別：A、B、C、D和E。A、B和C类有不同的网络类別长度，剩余的部分被用来识别网络内的主机，这就意味着每个网络类別有着不同的给主机编址的能力。D类被用于多播地址，E类被留作将来使用。
1993年，无类别域间路由（CIDR）正式地取代了分类网络，后者也因此被称为“有类别”的。
CIDR被设计为可以重新划分地址空间，因此小的或大的地址块均可以分配给用户。CIDR创建的分层架构由互联网号码分配局（IANA）和区域互联网注册管理机构（RIR）进行管理，每个RIR均维护着一个公共的WHOIS数据库，以此提供IP地址分配的详情。
在IPv4所允许的大约四十亿地址中，三个地址块被保留作专用网络。这些地址块在专用网络之外不可路由，专用网络之内的主机也不能直接与公共网络通信。但通过网络地址转换（NAT），使用这些地址的主机可以像拥有共有地址的主机在互联网上通信。
下表展示了三个被保留作专用网络的地址块（RFC 1918）： 通常情况下，路由器根据数据报文的目的地址决定转发数据报文的下一跳地址。使用专用网络地址作为目的地址的数据包通常无法被公共路由器正确送达，因为公共路由器没有相应的路由信息，即无法得知如何才能转发到该IP地址。因此，这就需要通过一种方法，将指引数据报文转发的下一跳地址和真正要传输的目的地址分离开。于是就使用虚拟专用网，将IP报文封装在其他报文内，以便于通过公网上的公共路由器，达到能处理该封包内层数据的网络设备上解除封包后，该数据包可以被继续转发到目的地址。
将数据报文封装的过程中，可以将数据报文封装于IP报文中，也可以使用多协议标签交换协议等，通过其他协议引导数据报文转发。也可以封装同时加密数据，以保护数据内容。
RFC 5735中将地址块169.254.0.0/16保留为特殊用于链路本地地址，这些地址仅在链路上有效（如一段本地网络或一个端到端连接）。这些地址与专用网络地址一样不可路由，也不可作为公共网络上报文的源或目的地址。链路本地地址主要被用于地址自动配置：当主机不能从DHCP服务器处获得IP地址时，它会用这种方法生成一个。
当这个地址块最初被保留时，地址自动配置尚没有一个标准。为了填补这个空白，微软创建了一种叫自动专用IP寻址（APIPA）的实现。因微软的市场影响力，APIPA已经被部署到了几百万机器上，也因此成为了事实上的工业标准。许多年后，IETF为此定义了一份正式的标准：RFC 3927，命名为“IPv4链路本地地址的动态配置”。
地址块127.0.0.0/8被保留作环回通信用。此范围中的地址绝不应出现在主机之外，发送至此地址的报文被作为同一虚拟网络设备上的入站报文（环回），主要用于检查TCP/IP协议栈是否正确运行和本机对本机的链接。
一个常见的误解是以0或255结尾的地址永远不能分配给主机：这仅在子網路遮罩至少24位元长度时（旧的C类地址，或CIDR中的/24到/32）才成立。
在有类别的编址中，只有三种可能的子網路遮罩：A类：255.0.0.0，B类：255.255.0.0，C类：255.255.255.0。如，在子網路192.168.5.0/255.255.255.0（即192.168.5.0/24）中，網路識別碼192.168.5.0用来表示整个子網路，所以它不能用来标识子網路上的某个特定主机。
广播地址允许数据包发往子網路上的所有设备。一般情況下，廣播位址是藉由子網路遮罩的位元反码並和網路識別碼執行 OR 的位元運算得到，即广播地址是子網路中的最后一个地址。在上述例子中，广播地址是192.168.5.255，所以为了避免歧义，这个地址也不能被分配给主机。在A、B和C类网络中，广播地址总是以255结尾。
但是，这并不意味着每个以255结尾的地址都不能用做主机地址。比如，在B类子网192.168.0.0/255.255.0.0（即192.168.0.0/16）中，广播地址是192.168.255.255（主机位全1）。在这种情况下，尽管可能带来误解，但192.168.1.255、192.168.2.255等地址可以被分配给主机。同理，192.168.0.0作为網路識別碼不能被分配，但192.168.1.0、192.168.2.0等都是可以的。
随着CIDR的到来，广播地址不一定总是以255结尾（广播地址是指主机位都为1的地址，255只是其中一种情况）。比如，子網路203.0.113.16/28的广播地址是203.0.113.31。过程如下：
网络：203.0.113.16
掩码：255.255.255.240
掩码反码：0.0.0.15
OR操作：
00010000 | 00001111 = 00011111 =31
一般情況下，子網路的第一个和最后一个地址分别被作为網路識別碼和广播地址，任何其它地址都可以被分配给其上的主机。
互联网上的主机通常被指定，但IP报文的路由是由IP地址而不是这些名字决定的。这就需要将域名翻译（解析）成地址。
域名系统（DNS）提供了域名转换为IP地址的服务。与CIDR相像，DNS是层级结构。
從20世紀80年代起，一個很明顯的問題是IPv4地址在以比設計時的預計更快的速度耗盡。 這是創建分類網絡、無類別域間路由，和最終決定重新設計基於更長地址的互聯網協議（IPv6）的誘因。
一些市場力量也加快了IPv4地址的耗盡，如：
隨著互聯網的增長，各種各樣的技術隨之產生以應對IPv4地址的耗盡，如：
隨著IANA把最後5個地址塊分配給5個RIR，其主地址池在2011年2月3日耗盡。 許多地址分配和消耗的模型都預測第一個耗盡地址的RIR會在2011年的下半年出現。
廣泛被接受且已被標準化的解決方案是遷移至IPv6。IPv6的地址長度從IPv4的32位增長到了128位，以此提供了更好的路由聚合，也為最終用戶分配最小為2個主機地址的地址塊成為可能。遷移過程正在進行，但其完成仍需要相當的時間。
对地址的快速分配和其造成的地址短缺促成了许多有效应用地址的方法，其中一种就是网络地址转换（NAT）。
IP报文包含IP首部和数据部分
IPv4报文的首部包含14个字段，其中13个是必须的，第14个是可选的（红色标出），并命名为：“选项”字段。首部中的字段均以大端序包装，在以下的图表和讨论中，最高有效位（Most Significant bit）被标记为0。
数据字段不是首部的一部分，因此并不被包含在首部检验和中。数据的格式在协议首部字段中被指明，并可以是任意的传输层协议。
一些常见协议的协议字段值被列在下面：
参见IP协议号列表以获得完整列表。
互联网协议（IP）是整个互联网架构的基础，可以支持不同的物理层网络，即IP层独立于链路层传输技术。不同的链路层不仅在传输速度上有差异，还在帧结构和大小上有所不同，不同MTU参数描述了数据帧的大小。为了实现IP数据包能够使用不同的链路层技术，需要将IP数据包变成适合链路层的数据格式，IP报文的分片即是IP数据包为了满足链路层的数据大小而进行的分割。
在IPv6不要求路由器执行分片操作，而是将检测路径最大传输单元大小的任务交给了主机。
当设备收到IP报文时，分析其目的地址并决定要在哪个链路上发送它。MTU决定了数据载荷的最大长度，如IP报文长度比MTU大，则IP数据包必须进行分片。每一片的长度都小于等于MTU减去IP首部长度。接下来每一片均被放到独立的IP报文中，并进行如下修改：
例如，对于一个长20字节的首部和一个MTU为1,500的以太网，分片偏移量将会是：0、(1480/8)=185、(2960/8)=370、(4440/8)=555、(5920/8)=740、等等。
如果报文经过路径的MTU减小了，那么分片可能会被再次分片。
比如，一个4,500字节的数据载荷被封装进了一个没有选项的IP报文（即总长为4,520字节），并在MTU为2,500字节的链路上传输，那么它会被破成如下两个分片： 现在，假设下一跳的MTU为1,500字节，那么每一个分片都会被再次分成两片(由于数据片段只有在目的主机才重新被组成数据报，因此再次分片是针对每个在网络中传输的数据帧)： 第3和4片是从原始第2片再次分片而来，所以除了分片后的最后一个分片外MF为都为1。
当一个接收者发现IP报文的下列项目之一为真时： 它便知道这个报文已被分片，并随即将数据、标识符字段、分片偏移量和更多分片标志一起储存起来。
当接受者收到了更多分片标志未被设置的分片时，它便知道原始数据载荷的总长。一旦它收齐了所有的分片，它便可以将所有片按照正确的顺序（通过分片偏移量）组装起来，并交给上层协议栈。
互联网协议定义并激活了网络层，它使用一个逻辑地址系统。IP地址并不以任何永久的方式绑定到硬件，而且事实上一个网络接口可以有许多IP地址。为了正确地交付一份报文，主机和路由器需要其它机制来识别设备接口和IP地址之间的关联。地址解析协议（ARP）为IPv4执行这种IP地址到物理地址（MAC地址）的转换。
此外，反向操作有时候也是必须的，比如，一台主机在启动时需要知道自己的IP地址（除非地址已经被管理员预先设置）。目前被用于这一用途的协议有动态主机设置协议（DHCP）、引导协议（BOOTP）和比较不常用的RARP。 地址耗尽：