将上一节课中的MAC地址知识点补充,网络层的初步了解,学习IP报头。
MAC地址+网络层
MAC地址
mac地址 - 物理地址 - 网卡地址
网卡上 - 烧录进网卡芯片 - mac地址
单播MAC:
点对点,一对一,类似于qq的私聊,数据封装时,源MAC和目的MAC都是单播MAC,则为单播通讯。单播的MAC地址的规则是从高位到低位的第8位为0,且一定为0,其他任意。
组播MAC:
通讯形式上,点对多,单对多的通讯,类似于qq的群聊。组播MAC地址:从高位向低位,第8位为1,且一定为1。
数据封装时,因为组播代表的是一组的集合,面向一组的通讯,此时组播mac不能成为数据的源地址。仅能充当目的地址。
广播MAC:
通讯形式上,点对所有,单对所有的通讯,广而播之。
数据封装时只能充当目的地址,从低位到高位全是1。
目的MAC为单播MAC
单播数据到达后。
1、查看目的mac是否是自己的mac,如果不是丢弃,如果是,则进行下一步;
2、将数据进行crc校验,对比FCS
3、查看type字段,交给type字段交给上层协议处理。
数据链路工作结束
目的MAC为组播MAC
组播数据到达后。
1、查看目的mac自己本地是否加组,如果不是丢弃,如果是,则进行下一步;
2、将数据进行crc校验,对比FCS
3、查看type字段,交给type字段交给上层协议处理。
数据链路工作结束
目的MAC为广播MAC
广播数据到达后。
1、查看目的mac是否是广播,如果不是丢弃,如果是,则进行下一步;
2、将数据进行crc校验,对比FCS
3、查看type字段,交给type字段交给上层协议处理。
数据链路工作结束
网络层
ip报文格式

报头最小是20字节,最后的ip options是可选项
刚开始的4字节
| 字段名 | 作用 | 比特位数 | 实际字节数 |
|---|---|---|---|
| Version | 标识IP协议版本(IPv4固定为 0100,IPv6为 0110)。 |
4 bits | 0.5 字节 |
| Header Length | 表示IP头部的长度(以4字节为单位),范围5 |
4 bits | 0.5 字节 |
| DS Field | 原为TOS(服务类型),现用于区分服务(如QoS优先级、流量类别)。 | 8 bits | 1 字节 |
| Total Length | 整个IP数据包的总长度(包括头部+数据),最大65535字节(受MTU限制)。 | 16 bits | 2 字节 |
identification、flag、fragment offset
Identification(标识符)
- 作用:唯一标识同一个原始 IP 数据包的所有分片。
- 细节:
- 发送端为每个原始数据包分配一个 16 位唯一标识值(如随机数或递增计数器)。
- 所有属于该数据包的分片都携带相同的
Identification值,便于接收端重组时识别哪些分片属于同一数据包。 - 例如:若原始数据包
ID=12345被分成 3 片,所有分片的ID均为12345。
Flags(标志位)
- 作用:控制数据包的分片行为和重组状态。
- 细节(3 个标志位,图中未展示具体值):
- 第一位(保留位):恒为
0(未使用)。 - DF(Don’t Fragment,禁止分片):
- 若
DF=1,路由器禁止分片该数据包。若数据包超过 MTU,则丢弃并返回 ICMP “Fragmentation Needed” 错误(用于 PMTUD 路径 MTU 发现)。
- 若
- MF(More Fragments,更多分片):
- 若
MF=1,表示当前分片不是最后一个,后续还有分片。 - 若
MF=0,表示当前分片是最后一个分片或原始数据包未分片。
- 若
- 第一位(保留位):恒为
Fragment Offset(片偏移)
- 作用:指示当前分片在原始数据包中的位置,用于接收端按顺序重组。
- 细节:
- 以 8 字节为单位(即实际偏移量 = 值 × 8)。
- **第一个分片的偏移值为
0**,后续分片按数据长度递增。 - 例如:若原始数据包长 4000 字节,MTU=1500:
- 分片1:偏移
0(携带 0~1479 字节,MF=1)。 - 分片2:偏移
185(1480~2959 字节,MF=1)。 - 分片3:偏移
370(2960~4000 字节,MF=0)。
- 分片1:偏移
三字段协作流程示例
- 发送端:数据包(
ID=100, 长 3000 字节)需分片(MTU=1500)。- 分片1:
ID=100,MF=1,Offset=0(0~1479 字节)。 - 分片2:
ID=100,MF=0,Offset=185(1480~3000 字节)。
- 分片1:
- 接收端:通过相同
ID识别分片,按Offset排序,MF=0判断重组完成。
总结
- **
Identification**:分片归属的“身份证”。 - **
Flags**:控制分片行为(是否允许分片、是否还有后续分片)。 - **
Fragment Offset**:分片的“拼图位置”。 - IPv6 区别:IPv6 已移除这些字段(仅允许源端分片,通过扩展头处理)
TTL、Protocol、Header Checksum
1. Time to Live (TTL)
- 位置:第9字节(8 bits)。
- 作用:防止数据包在网络中无限循环。
- 细节:
- 初始值:由发送端设置(如Windows默认
TTL=128,Linux默认TTL=64)。 - 递减规则:每经过一个路由器(一跳)减1,当
TTL=0时,数据包被丢弃,并返回ICMPTime Exceeded错误。 - 实际用途:
- 限制数据包生存时间。
- 用于Traceroute工具(通过发送递增TTL的包探测路径)。
- 初始值:由发送端设置(如Windows默认
示例:
- 若
TTL=64,表示数据包最多可经过64跳路由设备。
2. Protocol
位置:第10字节(8 bits)。
作用:指示IP数据包内封装的上层协议类型。
常见协议号:
协议号(十进制) 协议 说明 1 ICMP 网络控制报文(如Ping)。 6 TCP 面向连接的可靠传输。 17 UDP 无连接的快速传输。 89 OSPF 路由协议。
示例:
- 若
Protocol=6,表示数据部分为TCP报文。
3. Header Checksum
- 位置:第11~12字节(16 bits)。
- 作用:校验IP头部的完整性(仅校验头部,不校验数据部分)。
- 计算规则:
- 发送端将头部按16位分组,所有分组求和(含校验和字段初始值
0x0000)。 - 对求和结果取反码(即1的补码),得到校验和。
- 接收端重新计算校验和,若结果不为
0xFFFF,则丢弃数据包。
- 发送端将头部按16位分组,所有分组求和(含校验和字段初始值
示例:
若头部校验和为
0xABCD,接收端验证时需满足:Sum(所有16位分组) + 0xABCD = 0xFFFF。
三字段协作示例
假设一个IPv4数据包的以下字段值:
TTL=64(第9字节:0x40)Protocol=6(第10字节:0x06,表示TCP)Header Checksum=0x1234(第11~12字节:0x12 0x34)
抓包显示(十六进制):
1 | |
- 解析:
40→ TTL=64。06→ 上层协议为TCP。1234→ 头部校验和需接收端验证。
与IPv6的区别
- TTL:IPv6中改名为 Hop Limit,功能相同。
- Header Checksum:IPv6已移除,依赖链路层和传输层校验(如TCP/UDP的校验和)。
总结
- TTL:控制数据包生存时间,避免无限循环。
- Protocol:决定数据部分交给哪个上层协议处理(如TCP/UDP)。
- Header Checksum:确保IP头部在传输中未被篡改或损坏。
- 关键性:这三个字段是IP通信可靠性和正确性的基础保障。
IP地址于IP可选项
1. Source IP Address(源IP地址)
- 位置:IPv4头部的 第13~16字节(紧接在
Header Checksum之后)。 - 作用:标识发送数据包的设备IP地址(32位,IPv4格式)。
- 关键点:
- 必须是唯一可路由的地址(如
192.168.1.100)。 - 路由器根据目标地址转发数据包,但源地址用于回复通信(如TCP三次握手)。
- NAT场景:经过NAT网关时,源地址会被替换为公网IP。
- 必须是唯一可路由的地址(如
示例:
- 抓包中显示
Source IP: 192.168.1.100。
2. Destination IP Address(目标IP地址)
- 位置:IPv4头部的 第17~20字节。
- 作用:标识数据包的最终接收设备IP地址(32位)。
- 关键点:
- 可以是单播(如
10.0.0.1)、组播(如224.0.0.5)或广播地址(如255.255.255.255)。 - 路由器通过路由表决定如何转发到目标网络。
- 可以是单播(如
示例:
- 访问网站时,目标地址可能是
172.217.160.110(Google的IP)。
3. IP Options(IP选项)
位置:紧接在目标地址之后(第21字节开始,长度可变)。
作用:提供可选的扩展功能,通常为空(标准通信无需使用)。
常见选项类型:
选项名 功能说明 Record Route 记录数据包经过的路由器IP(用于路径追踪)。 Timestamp 记录经过每个路由器的时间戳。 Strict Source Route 强制指定数据包必须经过的路径。 注意事项:
- 选项字段长度可变,需通过
Header Length字段计算(若IHL > 5表示有选项)。 - 现代网络极少使用(可能被防火墙丢弃)。
- 选项字段长度可变,需通过
示例:
- 若
Header Length=6(即头部24字节),则最后4字节为选项字段。
三字段在IPv4头部中的位置
1 | |
总结
- 源/目标IP地址:是IP通信的基础,决定了数据包的起点和终点。
- IP选项:提供高级功能,但实际使用较少。
- 图片中的红色标记:可能强调源地址的重要性(如配置NAT或过滤规则时需重点关注)。