IP协议
IP(Internet Protocol)协议是网络层最重要的协议,也是互联网中最基础、最重要的协议之一。IP协议负责在网络中传输(IP)数据包,它是网络通信的基础。
IP协议有两个主要版本:IPv4(Internet Protocol version 4)和 IPv6(Internet Protocol version 6)。IPv4是目前广泛使用的版本,而IPv6则是为了解决IPv4地址耗尽的问题而引入的新版本。
IP协议的主要作用和内容
寻址/路由
-
IP协议定义了一种标准的方式来为设备在网络中分配唯一的标识地址,被称为IP地址。
-
IP协议提供基本的路由概念和底层协议,包括基础路由功能。其实现主要是通过物理设备路由器,负责根据目标IP地址将数据包从源设备传递到目标设备。
分片(Fragmentation)/重组(Reassembly)
为了适应不同网络链路的大小限制,IP协议使用分片和重组机制来处理大于网络链路最大传输单元(MTU) 的数据包。该机制会在网络中带来复杂性和性能开销,因此在设计网络应用时应考虑MTU,尽量避免使用过大数据包,以减少分片和重组。
MTU(Maximum Transmission Unit)属于数据链路层的内容,MTU定义了在特定数据链路上传输的最大数据包的大小。
- 当原始数据包大小超过网络链路MTU时,源主机的IP协议将数据包分割成多个分片,每个分片都包含头部(其包含分片信息)且长度小于MTU
- 目标主机的IP协议接收到数据包分片后,通过其头部信息(根据标识和片偏移来识别和排序),并进行重组后得到完整数据包。将数据包传递给上层传输层协议(TCP/UDP)
IPv4 数据包的格式
主要由 头部(Header),数据(Payload) 构成
头部(Header)
- 版本(Version):4位字段,表示IP协议的版本,IPv4为4。
- 头部长度(Header Length): 4位字段,表示IP头部的长度,以32位字为单位。通常情况下,IPv4头部长度为20字节,但它也可以变化,因为IPv4头部可能包含选项字段。
- 服务类型(Type of Service):8位字段,用于指定数据包的服务质量、优先级等信息。
- 总长度(Total Length):16位字段,表示整个IPv4数据包的长度,包括头部和数据。
- 标识(Identification):16位字段,用于标识数据包的唯一性,通常用于分片和重组。
- 标志(Flags):3位字段,用于指示是否允许分片以及分片的情况。
- 片偏移(Fragment Offset):13位字段,用于指示分片在原始数据中的位置。
- 生存时间(Time to Live,TTL):8位字段,表示数据包在网络中可以经过的最大路由器数量,用于防止数据包在网络中无限循环。
- 协议(Protocol):8位字段,表示数据部分使用的上层协议,如TCP、UDP等。
- 头部校验和(Header Checksum):16位字段,用于检测头部的错误。
- 源地址和目标地址:每个32位字段,分别表示源IP地址和目标IP地址。
- 选项(Options):可选字段,用于包含一些额外的信息。
数据(Payload)
一般就是上层传输层协议(例如TCP、UDP)负责传输的内容
IPv4地址
IPv4地址是由4个字节(每个字节8位)组成的32位的二进制数,通常用点分十进制表示为四个十进制数,每个数范围在0到255之间(例如,192.168.0.1)
传统的网络类别划分
该类别划分方式是在早期互联网发展制定的,目的是为了根据网络的规模和数量来分配IP地址,根据IP地址的最高位(即IP的第一个字节,即32位二进制表示中的最高的8位)来进行的划分。最高位也被称为地址的网络部分。
- A类地址:第一个字节的最高位是0(即01111111,实际分配中,0开头的网络地址是保留的,因此最大的网络地址是 01111110 十进制数为126),地址范围从1.0.0.0到126.255.255.255。A类地址适用于大型网络,可以容纳很多主机。
- B类地址:前两个字节的最高位是10(即10111111),范围从128.0.0.0到191.255.255.255。B类地址适用于中等规模的网络。
- C类地址:前三个字节的最高位是110(即11011111),范围从192.0.0.0到223.255.255.255。C类地址适用于较小规模的网络。
- D类地址:前四个字节的最高位是1110(即11101111),范围从224.0.0.0到239.255.255.255。D类地址用于多播,即将数据发送到一组特定的主机。
- E类地址:前四个字节的最高位是1111(即11111111),范围从240.0.0.0到255.255.255.255。E类地址是保留地址,用于实验和研究。
然而随着互联网的发展,实际的现代网络规划中,已经不再使用这种严格的传统的类别划分,而是采用了更加灵活的CIDR(无类域间路由) 和子网掩码划分方法。
子网掩码
为了让IP划分出更多的网络和主机,引入了子网掩码的概念,它能划分出一个IP地址(32位二进制表示)中的网络部分和主机部分。
子网掩码和IP一样为32位二进制表示,它用1和0的分布决定了IP地址的网络标识和主机标识,1表示网络部分,0表示主机部分 。
为了确保网络和主机部分的界限清晰,有效的子网掩码二进制中的1和0是连续排列的,不会出现交替的情况。
举个例子,例如子网掩码的二进制为11111111.11111111.11111100.00000000
,即255.255.252.0
,在32位中,有22位是1,10位是0。则表示IP地址的前22位是网络部分,后10位是主机部分。
CIDR(无类域间路由)
CIDR(Classless Inter-Domain Routing)表示法是一种用于标识和分配IP地址的方法,它取代了传统的基于类别(Classful)的IP地址分配方式。CIDR允许更灵活、有效地分配IP地址,避免了传统A、B、C类地址划分的限制。
CIDR表示法的基本格式是:IP地址/前缀长度 ,其中IP地址表示一个网络的起始地址,而前缀长度表示该网络的网络部分的位数。
例如,192.168.1.0/24表示一个以192.168.1.0 为起始地址,网络部分有24位的网络。即前24位是网络部分,剩余的8位是主机部分。