互联网协议IP
定义
互联网协议是互联网的"基本通信规则"。它定义了数据如何在复杂的网络(如互联网)中,从一台计算机(或任何联网设备)寻址、打包、发送和路由到另一台计算机。
功能
寻址
用IP地址来标识网络上的主机,在每个IP数据报中,都会携带源IP地址和目标IP地址,从而标识该IP数据报的源主机和目的主机。指出发送和接收IP数据报的源IP地址及目的IP地址。
数据报的路由转发
网络中每个中间结点(路由器),根据IP数据报中接收方的目的IP地址,确定是本网传送还是跨网传送。若目的主机在本网中,可在本网中将数据报传给目的主机;若目的主机在别的网络中,还需要为其选择从源主机到目的主机的合适转发路径(即路由)。IP协议可以根据路由选择协议提供的路由信息对IP数据报进行转发,直至抵达目的主机。
当一个IP数据包到达路由器的接口时,路由器会执行以下逻辑:
-
第一步:接收与检查
物理/链路层接收: 路由器从某个网络接口(如以太网口、光纤口)收到一个数据帧。
解封装: 路由器剥离数据链路层的帧头和帧尾,提取出其中的 IP数据包。
校验: 检查IP数据包报头的完整性(如校验和),并查看 TTL(生存时间) 字段。TTL减1,若结果为0,则丢弃该包并发送ICMP超时消息给源主机。
-
第二步:查找路由表(关键决策)
路由器查看数据包报头中的 目的IP地址,然后查询自己的路由表。
路由表本质上是一个路径指引数据库,每条记录(路由条目)至少包含:
目的网络地址/前缀: 例如 192.168.1.0/24 或 0.0.0.0/0(默认路由)。
下一跳地址: 下一个路由器的IP地址。
出站接口: 数据包应该从哪个物理接口发送出去。
-
第三步:做出转发决策
基于路由表查找结果
直接交付 - 目的主机在本网中:
情况: 路由表查找结果显示,目的IP地址所在的网络直接连接到该路由器的某个接口上(即该网络是路由器的"直连网络")。
动作: 路由器不再将数据包转发给另一个路由器,而是需要通过 ARP协议(IPv4) 或 邻居发现协议NDP(IPv6),查询该目的IP地址对应的目的主机的MAC地址。
最终发送: 将IP数据包重新封装成以太网帧(目标MAC为目的主机MAC),从对应的直连接口发送出去,直接送达目的主机。
间接交付 - 目的主机在别的网络中:
情况: 路由表查找结果显示,目的网络需要通过另一个路由器(下一跳路由器)才能到达。
动作: 路由器根据路由条目,确定下一跳路由器的IP地址和出站接口。
最终发送: 同样需要获取下一跳路由器接口的MAC地址(通过ARP/NDP)。然后将IP数据包重新封装成帧(目标MAC为下一跳路由器MAC),从指定的出站接口发送出去。
-
第四步:封装与发送
无论直接还是间接交付,IP数据包本身(源IP和目的IP)在整个过程中都不会被修改(除非涉及NAT)。路由器只修改数据链路层的封装(更新源MAC和目标MAC),然后将新的数据帧从出站接口发送到物理链路上。
数据报分段和重组
IP数据报通过不同类型的通信网络发送,不同网络的数据链路层可传输的数据帧的最大长度不同,IP数据报的大小会受到这些网络所规定的最大传输单元(MTU)的限制。例如,以太网是1500B,令牌环是17914B,FDDI是4352B。因此,IP要能根据不同情况,对数据报进行分段封装,使得很大的IP数据报能以较小的分组在网上传输。主机上的IP能根据IP数据报中的分段和重组标识,将各个IP数据报分段重新组装为原来的数据报,然后交给上层协议。
IP数据报的格式及封装
IP数据报的格式
IP数据报是网络互联层的协议数据单元。IP数据报由两部分组成:固定长度的报头和可变长度的数据部分,以IPV4为例。

- 版本号
4位。指明IP协议的版本。对于IPv4,该值固定为 4。接收方首先检查此字段,以确定如何解释报文的其余部分。 - 首部长度
4位。表示IP报头长度,以 4字节(32位字) 为单位。由于它是4位,最大值是15,因此IP报头最大长度为 15 * 4 = 60 字节。最常见的报头长度(无选项)是 5,即 20 字节。 - 区分服务
8位。原名"服务类型"字段,用于指示数据报的优先级和期望的服务质量(如低延迟、高吞吐量、高可靠性)。现代网络中主要用于实现差分服务。 - 总长度
16位。定义了整个IP数据报(报头+数据部分)的总长度,单位是字节。最大值为 2^16 - 1 = 65535 字节。这决定了IP数据报的理论最大长度。
标识符: 16位。一个唯一的序列号,由源主机赋予数据报。如果数据报被分片,所有分片都共享同一个标识符。目的主机用它来识别哪些分片属于同一个原始数据报。 - 标志
3位。目前只使用低2位。
位 0:保留,必须为0。
位 1 (DF - Don't Fragment):禁止分片。为 1 时,如果路由器需要分片才能转发,它将丢弃数据报并发送ICMP错误消息。
位 2 (MF - More Fragments):更多分片。为 1 表示这不是最后一个分片;为 0 表示是最后一个分片或该数据报未分片。
片偏移: 13位。指示当前分片的数据部分在原始未分片数据报的数据部分中的起始位置,单位是 8字节(64位)。因此,除了最后一个分片,所有分片的数据长度都必须是8字节的整数倍。
IP数据报封装
IP屏蔽下层各种物理网络的差异,向TCP层提供统一的I数据报,相反,上层的数据经IP形成IP数据报。IP数据报的投递利用了物理网络的传输能力,网络接口层负责将I数据报封装到具体物理网络的帧(1AN)或者分组(X.25网络)中的信息字段,即将IP数据报封装到以太网的MAC数据帧中.

ARP协议
定义
- ARP(Address Resolution Protocol)即地址解析协议。
- 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
- 在网络通信中,主机和主机通信的数据包需要通过OSI模型从上到下进行数据封装,封装完整后,再向外发出,因此不仅需要源目IP地址的封装,也需要源目MAC的封装。
- 通过ARP协议来获知目的主机的MAC地址,完成数据封装。

原理流程
PC1发送数据给PC2,如ping命令
流程
- 根据OSI数据封装顺序,PC1会自顶向下(从应用层到物理层)封装数据,然后发送出去。
- 如果PC1不知道PC2的MAC,这个时候数据会发送失败,这时就需要ARP协议。
- PC1会通过ARP协议进行查询PC2的MAC。
- PC2收到消息后会将MAC地址返回给PC2
- PC1收到PC2的MAC后,封装数据进行发送
原理
现实网络中当前网络存在多个主机,PC1如何顺利将ARP请求包发送到PC2?
- ARP协议采用以太网的"广播"功能:将请求包以广播的形式发送,交换机或WiFi设备(无线路由器)收到广播包时,会将此数据发给同一局域网的其他所有主机。
- PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,则返回ARP回应包,其它主机则会丢弃。
- 因为已经知道PC1的IP和MAC,所以PC2应答时会采用单播的形式进行应答,同时PC2会将PC1的IP和MAC缓存到ARP缓存表中。
- PC1收到PC2的MAC地址后就可以封装数据进行通信了,同时PC1会将PC2的IP和MAC缓存到ARP缓存表中。
ARP数据包解析
- 请求包

- 应答包

- ARP协议字段解读
- Hardware type :硬件类型,标识链路层协议
- Protocol type: 协议类型,标识网络层协议
- Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)
- Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)
- Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应
- Sender MAC address :发送者MAC
- Sender IP address :发送者IP
- Target MAC address :目标MAC,此处全0表示在请求
- Target IP address: 目标IP