- IP 传输尽量防止产生无限循环(通常会加入传递过程中的计数器,超过次数则会丢掉IP数据包)
- 如果IP 包太长 IP包则会分割 分别传输(因为有些网络无法传输太长的数据包,比如以太网)
- 使用 header checksum(头部校验)来减少数据包传递到错误的目的地
- IPV4 and IPV6
- 可以在头部添加新的字段(喜忧参半,增加特性,但是也增加了复杂程度)
IPv4 数据结构
以下是IPv4数据报头各字段的详细功能解析,按图中顺序从左到右(即从Bit 0到Bit 31的传输顺序)说明:
1. 版本(Version - 4位)
• 作用:标识IP协议版本(IPv4固定值为0100
)
• 细节:确保接收方能正确解析数据报格式。若设备不支持该版本则丢弃数据包。
2. 头部长度(Header Length - 4位)
• 作用:表示IP头部的长度(单位:32位字,即4字节)
• 细节:最小值为5(20字节无选项),最大值为15(60字节含选项)。因选项字段较少使用,常见值为5。
3. 服务类型(Type of Service - 8位)
• 作用:定义数据包的优先级和服务质量参数(如延迟、吞吐量、可靠性)
• 细节:实际使用中多被DiffServ(区分服务)或ECN(显式拥塞通知)机制替代。
4. 总包长度(Total Packet Length - 16位)
• 作用:指示整个IP数据报的长度(头+数据,单位:字节)
• 细节:最大值为65535字节,但受MTU限制(如以太网MTU通常为1500字节)。
5. 包ID(Packet ID - 16位)
• 作用:唯一标识同一数据包的所有分片(用于重组)
• 细节:发送主机为每个原始数据包分配唯一ID,分片时所有片段保留相同ID。
6. 标志(Flags - 3位)
• 关键位:
• DF(Don’t Fragment):置1时禁止分片(如用于路径MTU发现)
• MF(More Fragments):置1表示后续还有分片(最后一个片段置0)
7. 片段偏移(Fragment Offset - 13位)
• 作用:指示当前分片在原始数据包中的位置(单位:8字节块)
• 示例:若偏移值为100,则该分片数据从原始包的800字节处开始。
8. 生存时间(Time to Live - 8位)
• 作用:限制数据包经过的最大路由器跳数(每经过一跳减1,归零则丢弃)
• 实际用途:防止环路,同时用于Traceroute工具实现。
9. 协议ID(Protocol ID - 8位)
• 作用:标识上层协议类型(如TCP=6, UDP=17, ICMP=1)
• 意义:告知接收方将数据交给哪个协议处理。
10. 校验和(Checksum - 16位)
• 作用:仅校验IP头部完整性(不包括数据部分)
• 计算方式:对头部每16位进行反码求和,接收方验证结果应为全1。
11. 源IP地址(32位)
• 作用:标识发送主机的逻辑地址
• 关键点:NAT设备会修改此字段以实现地址转换。
12. 目的IP地址(32位)
• 作用:标识接收主机的逻辑地址
• 路由依据:路由器根据此字段决定转发路径。
13. 选项(OPTIONS - 可变长)
• 可选功能:如记录路由(Record Route)、时间戳(Timestamp)等
• 现状:极少使用,因增加头部复杂度且可能被防火墙丢弃。
14. 填充(PAD - 可变长)
• 作用:确保IP头部长度是32位的整数倍(通过补0实现)
15. 数据(Data - 可变长)
• 内容:上层协议(如TCP/UDP)的报文
• MTU限制:数据部分最大长度 = MTU - IP头长度(通常为1480字节)。
关键设计思想
- 分片控制:通过ID、标志、偏移实现大数据包的分片与重组。
- 生存管理:TTL机制兼顾防环与路径探测。
- 轻量校验:仅校验头部以平衡性能与可靠性。
- 灵活扩展:选项字段为协议演进预留空间(虽实际使用有限)。
如需进一步探讨某个字段的实际应用场景(如分片在VPN中的问题或TTL与Traceroute的关系),可具体说明!