计算机网络——IPv4

1. IPv4协议概述 (Introduction to IPv4)

在TCP/IP五层模型中,网络层 (Network Layer) 的核心任务是实现数据包在任意两个网络节点之间的端到端传输 。为了实现这个目标,网络层提供了两个关键功能:路由 (Routing)交换 (Switching)

IP协议 (Internet Protocol) 正是网络层的核心协议 。具体来说,我们现在广泛使用的第四版IP协议,即IPv4,它的设计思想是:

无连接 (Connectionless):发送数据前,不需要像打电话一样先建立一个连接。每个数据包(在IP层称为IP数据报)都是独立发送的,前后数据包之间没有关联 。这就像寄信,每封信都是独立寻址和投递的 。
尽最大努力交付 (Best-Effort Delivery):网络层不保证数据包一定能成功送达,也不保证它们的顺序,可能会出现丢失、重复、出错或乱序的情况 。它只“尽力而为”。
可靠性由上层负责:如果应用程序(如文件传输)需要可靠的传输,那么这个任务就交给了传输层 (Transport Layer)TCP协议来完成。TCP会处理错误、重传、流量控制等问题 。

这种设计的最大好处是,网络设备(如路由器)可以做得相对简单、灵活且成本低廉,从而支撑了互联网发展到今天的巨大规模 。

与IPv4配套使用的还有几个重要的辅助协议,我们后面会详细讲解:

ARP (地址解析协议)
ICMP (互联网控制报文协议)
IGMP (互联网组管理协议)


2. IP地址 (IP Address)

IP地址是网络层用来唯一标识互联网上每一台主机或路由器的逻辑地址 。路由器根据IP数据包头中的目的IP地址来决定如何转发数据包 。

2.1 IP地址的结构与表示

结构:一个IPv4地址由32位 (4个字节) 的二进制数组成 。
表示方法

点分十进制 (Dotted-Decimal):这是最常见的表示法。将32位二进制数每8位分为一组,共4组,每组转换为十进制数,并用点号.隔开。例如:129.16.6.31
二进制 (Binary):直接写出32位二进制数,例如:10000001 00001110 00000110 00011111
十六进制 (Hexadecimal):将每组8位二进制数转换为两位十六进制数,例如:81.0E.06.1F

2.2 分类编址 (Classful Addressing)

最初,IP地址被划分为五类(A、B、C、D、E),这种方法现在已被CIDR取代,但理解它对于学习网络历史和一些老旧系统仍然很重要。每类地址都包含网络号 (Network ID)主机号 (Host ID) 两部分 。

类别 首位比特 网络号长度 主机号长度 范围 网络数量 每个网络的主机数
A类 0 8位 24位 0.0.0.0127.255.255.255 2 7 − 2 2^7-2 27−2 2 24 − 2 2^{24}-2 224−2
B类 10 16位 16位 128.0.0.0191.255.255.255 2 14 2^{14} 214 2 16 − 2 2^{16}-2 216−2
C类 110 24位 8位 192.0.0.0223.255.255.255 2 21 2^{21} 221 2 8 − 2 2^8-2 28−2
D类 1110 28位多播组号 224.0.0.0239.255.255.255 用于多播(组播)
E类 11110 27位保留 240.0.0.0247.255.255.255 保留用于研究

注意:主机数需要减2,因为主机号全0代表网络地址,全1代表广播地址,这两个地址不能分配给具体主机 。

分类编址的主要缺陷是地址浪费严重。例如,一个公司申请了一个B类地址,理论上可以容纳 2 16 − 2 = 65534 2^{16}-2 = 65534 216−2=65534 台主机,但如果公司只有几百台设备,那么大量的IP地址就被浪费了 。

2.3 特殊IP地址

网络地址:主机号全为0的地址,用于标识一个网络,如 202.198.151.0
广播地址

直接广播地址 (Directed Broadcast):主机号全为1的地址,用于向特定网络内的所有主机广播,如 202.198.151.255。这种广播可以被路由器转发 。
受限广播地址 (Limited Broadcast):地址为 255.255.255.255。用于向本网络内的所有主机广播,路由器不会转发这种广播包 。

环回地址 (Loopback Address)127.0.0.1 是最常用的环回地址。它代表主机自身,常用于本机测试和本地应用程序间通信 。
私有地址 (Private Address):这些地址段用于企业或组织内部网络,不能在公共互联网上路由。这解决了IP地址不足的问题,也提供了一定的安全性 。

A类: 10.0.0.010.255.255.255 (10.0.0.0/8)
B类: 172.16.0.0172.31.255.255 (172.16.0.0/12)
C类: 192.168.0.0192.168.255.255 (192.168.0.0/16)

2.4 子网划分 (Subnetting)

为了解决分类地址的浪费问题,引入了子网划分。它从原来的主机号中“借用”几位来作为子网号 (Subnet ID),从而将一个大的网络(如一个B类网络)划分成多个更小的网络(子网)。这样,IP地址就从两级结构(网络号+主机号)变成了三级结构(网络号+子网号+主机号)

子网掩码 (Subnet Mask) 是一个32位的数值,用来指明一个IP地址中哪些位是网络号和子网号,哪些位是主机号。掩码中为1的位对应网络号和子网号,为0的位对应主机号 。

如何计算?
将IP地址和子网掩码进行按位与 (AND) 运算,即可得到网络地址

示例

IP地址:192.168.100.5

子网掩码:255.255.255.0

二进制计算

11000000.10101000.01100100.00000101  (IP地址)
AND
11111111.11111111.11111111.00000000  (子网掩码)
-----------------------------------
11000000.10101000.01100100.00000000  (网络地址) -> 192.168.100.0

网络地址192.168.100.0

广播地址(主机位全1):192.168.100.255

可用主机地址范围192.168.100.1192.168.100.254

主机数量: 2 8 − 2 = 254 2^8 – 2 = 254 28−2=254 台

2.5 无分类域间路由 (CIDR – Classless Inter-Domain Routing)

CIDR是目前IP地址分配和路由的主流方式,它彻底抛弃了A、B、C类的概念 。

CIDR记法:在IP地址后面加上斜杠/和网络前缀的位数。例如 128.14.32.0/20,表示前20位是网络前缀,后12位是主机号 。
路由聚合 (Route Aggregation)超网 (Supernetting):CIDR可以将多个小的网络前缀聚合成一个大的、更短的前缀。例如,172.16.1.0/24, 172.16.2.0/24, 172.16.3.0/24 这三个网络可以聚合成一条路由 172.16.0.0/16(尽管 172.16.1.0/16 的例子更准确,即 172.16.0.0/22 或其他更精确的聚合)。这极大地减小了互联网核心路由器的路由表大小,提高了路由效率 。

2.6 IP地址的配置:DHCP 与 NAT

1. 动态主机配置协议 (DHCP – Dynamic Host Configuration Protocol)
DHCP用于自动为网络中的主机分配IP地址、子网掩码、默认网关、DNS服务器等信息,避免了手动配置的繁琐和易错性 。

工作过程 (DORA)

Discover (发现):客户端刚接入网络时,以广播方式发送DHCP DISCOVER报文,寻找DHCP服务器。
Offer (提供):DHCP服务器收到发现报文后,从地址池中选择一个可用的IP地址,通过DHCP OFFER报文(单播或广播)提供给客户端。
Request (请求):客户端可能会收到多个Offer,它选择其中一个(通常是第一个收到的),然后以广播方式发送DHCP REQUEST报文,正式请求该地址。
Acknowledge (确认):被选中的服务器发送DHCP ACK报文,确认地址分配。客户端收到后,配置IP地址,过程完成。

租期 (Lease):DHCP分配的地址通常有租用期限。在租期达到50% (T1) 和 87.5% (T2) 时,客户端会尝试续租 。

2. 网络地址转换 (NAT – Network Address Translation)
NAT技术允许多台使用私有IP地址的主机,通过共享一个或多个公共IP地址来访问互联网 。这极大地缓解了IPv4地址耗尽的压力。

NAPT (Network Address Port Translation):这是最常见的NAT形式。它不仅转换IP地址,还转换TCP/UDP的端口号。这样,一个公共IP地址就可以被内部网络中的多台主机同时使用。路由器会维护一张转换表,记录(私有IP:端口)到(公共IP:新端口)的映射关系 。
NAT Server:当内部网络的服务器(如Web服务器)需要被外部用户访问时,可以配置NAT Server。它将一个固定的(公共IP:端口)映射到服务器的(私有IP:端口),使得外部请求能够被正确地转发到内部服务器 。


3. IPv4数据包格式 (IPv4 Packet Format)

一个IPv4数据包由首部 (Header)数据 (Data) 两部分组成。首部固定部分为20字节,包含可变选项时最长可达60字节 。

您好,非常抱歉,您说得对。作为文本模型,我无法直接生成图片,刚才的描述中提到图片是我表述不当。

为了让您更清晰地理解IPv4数据报的头部结构,我将使用文本格式来详细描述这个结构,并逐一解释每个字段的含义。

IPv4数据包格式 (文本结构图)

一个标准的IPv4首部长20字节(不含选项字段),分为5行,每行32位(4字节)。

版本 (Version) (4位): 指明IP协议版本,对IPv4来说,值是4 。
首部长度 (IHL) (4位): 首部占32位字(4字节)的数量。无选项时,值为5(即 5 × 4 = 20 5 imes 4 = 20 5×4=20 字节) 。
区分服务 (Differentiated Services) (8位): 用于实现服务质量(QoS),指定数据包的优先级 。
总长度 (Total Length) (16位): 整个IP数据报(首部+数据)的长度,以字节为单位。最大长度为 2 16 − 1 = 65535 2^{16}-1 = 65535 216−1=65535 字节 。
标识 (Identification) (16位): 唯一标识一个数据报。当数据报被分片时,所有分片都拥有相同的标识号,以便在目的地重组 。
标志 (Flags) (3位):

DF (Don’t Fragment):置1表示禁止分片。如果数据包太大而路径中某段链路MTU又小,该包会被丢弃 。
MF (More Fragments):置1表示后面还有分片。最后一个分片的MF位为0 。

分段偏移 (Fragment Offset) (13位): 指示该分片在原始数据报中的位置,以8字节为单位 。
生存时间 (TTL – Time to Live) (8位): 数据包在网络中可以经过的最大路由器跳数。每经过一个路由器,TTL减1。当TTL减到0时,数据包被丢弃,以防止数据包在网络中无限循环 。
协议 (Protocol) (8位): 指明数据部分承载的是哪个上层协议的数据,如TCP(6)、UDP(17)、ICMP(1) 。
首部校验和 (Header Checksum) (16位): 只对IP首部进行校验,以检测传输过程中首部是否出错。每经过一个路由器,由于TTL会改变,校验和需要重新计算 。
源IP地址 (Source Address) (32位): 发送方的IP地址 。
目的IP地址 (Destination Address) (32位): 接收方的IP地址 。
选项 (Options) (可变长): 用于网络测试或安全等,很少使用 。
填充 (Padding): 确保首部总长度是4字节的整数倍 。


4. IP路由选择 (IP Routing)

路由选择是网络层的核心功能,决定了数据包从源到目的的路径。

直接交付 vs. 间接交付

直接交付:当源和目的主机在同一个物理网络(如同一个局域网)时,数据包可以直接发送给目的主机。
间接交付:当源和目的主机不在同一个网络时,主机会将数据包发送给默认网关 (Default Gateway),由网关(一个路由器)负责将数据包转发出去。

路由器的工作:路由器维护一张路由表 (Routing Table)。当收到一个数据包时,它会:

提取数据包的目的IP地址
查询路由表,找到与目的IP地址匹配的条目。
根据路由表项中的下一跳 (Next Hop) 地址和出接口 (Outgoing Interface),将数据包转发出去 。

最长前缀匹配 (Longest Prefix Match):这是路由器查询路由表的核心原则。如果路由表中有多个条目都能匹配目的IP地址,路由器会选择网络前缀最长的那一条。因为前缀越长,路由越具体、越精确 。

示例 :一个数据包的目的地址是 192.168.2.2。路由表中有两条匹配的路由:192.168.0.0/16192.168.2.0/24。路由器会选择 /24 这条路由,因为它的前缀更长(24位 > 16位)。


5. 地址解析协议 (ARP – Address Resolution Protocol)

为什么需要ARP?
IP地址是网络层的逻辑地址,而MAC地址(物理地址)是数据链路层用于在本地网络(如以太网)中传输数据帧的地址。当一台主机要向同一局域网内的另一台主机发送IP数据包时,它必须知道对方的MAC地址才能封装成帧发送。ARP就是用来将一个已知的IP地址解析为对应的MAC地址的协议 。

ARP工作原理

主机A想给主机B(IP已知,MAC未知)发送数据。
主机A先查询自己的ARP缓存表(存储了近期IP到MAC的映射)。如果找到了,就直接使用。
如果没找到,主机A会在局域网内广播一个ARP请求报文,内容是:“谁是IP地址为xxx.xxx.xxx.xxx的主机?请告诉我你的MAC地址。”
局域网内所有主机都会收到这个请求,但只有IP地址匹配的主机B会响应。
主机B会以单播的方式向主机A发送一个ARP应答报文,内容是:“我是xxx.xxx.xxx.xxx,我的MAC地址是…。”
主机A收到应答后,就知道了主机B的MAC地址,并将这个映射关系存入自己的ARP缓存表中,然后就可以发送数据了。


6. 互联网控制报文协议 (ICMP – Internet Control Message Protocol)

由于IP协议是“尽力而为”的,它不保证数据一定送达。ICMP协议作为IP层的辅助协议,用于在IP主机和路由器之间传递控制消息,报告错误或提供网络诊断信息 。

ICMP报文被封装在IP数据报中传输 。

ICMP报文类型
主要分为两大类:差错报告报文查询报文

主要差错报告报文

目的不可达 (Type 3):当路由器或主机无法交付数据包时发送。例如,网络不可达、主机不可达、端口不可达等。
超时 (Type 11):当数据包的TTL值减为0时,路由器会丢弃该包并发送此报文。这是tracert命令的实现基础。
重定向 (Type 5):当路由器发现主机使用了次优的路径发送数据时,会发送重定向报文,告诉主机一个更好的下一跳地址。

主要查询报文

回显请求 (Echo Request, Type 8)回显应答 (Echo Reply, Type 0):这是ping命令的工作基础。ping程序发送请求,如果目的主机可达,则会返回一个应答,从而可以测试网络连通性和往返时延。

ICMP典型应用

ping:利用回显请求/应答来检测目的主机的可达性和网络延迟 。
tracert (Windows) 或 traceroute (Linux/macOS):通过发送TTL值从1开始递增的IP数据包,并接收沿途路由器返回的“超时”ICMP报文,来探测数据包从源到目的所经过的路由路径 。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容