网络层理解

网络层理解

网络层是 OSI 模型的第三层,主要负责 跨网络的数据传输,核心任务是 路由选择 和 分组转发。

网络层核心功能

在这里插入图片描述

网络层关键协议

协议作用示例
IP (IPv4/IPv6)数据包路由和寻址192.168.1.1
ICMP网络状态检测和错误报告ping、traceroute
OSPF/BGP动态路由选择互联网 AS 自治系统
ARPIP → MAC 地址解析局域网通信
IPSec安全加密传输VPN

数据包(Packet)结构

网络层数据包主要分成首部和数据组成

网络层数据包图示

在这里插入图片描述

网络层头部图示

在这里插入图片描述

数据包各组成部分说明

  • 版本号(Version)

    • 表示协议版本。IPv4包中这个字段占4位,IPv6包中也是如此。
    • 示例:IPv4为4,IPv6为6。
  • 首部长度(Header Length)

    • 表示IP头部的长度,单位为32位字。IPv4头部通常是20字节,若有选项则可能更长。
  • 服务类型(Type of Service, ToS)

    • 也称为“优先级字段”,包含网络层的数据包优先级信息,例如延迟、吞吐量、可靠性等。
  • 总长度(Total Length)

    • 指整个数据包的大小(包括数据和头部),单位为字节。IPv4数据包最大可达65535字节。
  • 标识符(Identification)

    • 用于唯一标识一个分段的包,在数据包被分割时,用于数据包的重组。
属性说明
长度16比特(取值范围:0~65535)
生成规则由发送方主机按顺序分配,通常每发送一个IP包递增1
复用时机当标识符计数达到65535后归零
关键要求同一数据包的所有分片必须相同,不同数据包的标识符必须不同
  • 标志(Flags)
    • 该字段控制是否可以对数据包进行分片。3位字段,标志位中最重要的是“分片标志”和“更多分片”标志。
      在这里插入图片描述
标志位名称功能
DFDon’t Fragment- 1:禁止分片(若需分片则丢弃并返回ICMP错误)
- 0:允许分片
MFMore Fragments- 1:后续还有分片
- 0:当前是最后一个分片
  • 片偏移(Fragment Offset)

    • 在数据包被分片时,表示数据片段相对于原始数据包的偏移量。

    • 核心规则

      • 单位:8字节(因此实际字节偏移量 = 片偏移值 × 8)

      • 计算式:片偏移 = ⌊当前分片起始字节位置 / 8⌋

      • 最大值:13比特 → 最大偏移值=8191 → 可表示最大原始包长度=65528字节(含IP头)

    • 分片重组验证
      在这里插入图片描述

  • 生存时间(Time to Live, TTL)

    • TTL 的定义

      • 全称:Time to Live(生存时间)

      • 位置:IPv4 头部中的 8位字段(取值范围:0~255)

      • 单位:跳数(Hops),每经过一个路由器减1

      • 初始值:通常由操作系统设置(Windows=128,Linux=64,网络设备=255)

    • TTL 的核心用途

      • 防止网络环路
        • 当路由表错误导致环路时,TTL 归零后数据包被丢弃,避免耗尽带宽。
        • 触发机制:
          在这里插入图片描述
          在这里插入图片描述
    • 限制传播范围

      • 控制数据包可穿越的最大路由器数量(如设置TTL=16可限制在本地网络)。
    • 路径发现工具

      • Traceroute 原理:

        • 发送TTL=1的探测包,第一个路由器返回ICMP超时

        • 逐步增加TTL值,记录沿途路由器IP

        	示例:
        	Hop 1: 192.168.1.1 (TTL=1)
        	Hop 2: 10.0.0.1   (TTL=2)
        	Hop 3: 203.0.113.45 (TTL=3)
        

        在这里插入图片描述

        • 常用路由追踪工具
          • Windows 下 tracertpathping
          • Linux下 traceroutetracepathmtr
    • TTL的工作流程
      在这里插入图片描述

    • 不同协议的TTL特性

协议/设备默认TTL值特殊行为
Windows128Ping命令可自定义TTL
Linux64Traceroute使用UDP+ICMP
路由器255通常不修改经过包的TTL
IPv6Hop Limit功能等同TTL但字段名不同
  • 协议(Protocol)

    • 指示数据包的上层协议,如TCP、UDP等。IPv4头部中该字段为8位。
    • 常见协议类型及编号
    协议编号(十进制)协议名称用途典型应用
    1ICMP网络诊断和错误报告ping、traceroute
    2IGMP组播管理视频会议、IPTV
    6TCP可靠面向连接传输HTTP、SSH、FTP
    17UDP无连接高效传输DNS、DHCP、QUIC
    41IPv6封装IPv6 over IPv4隧道6to4隧道
    47GRE通用路由封装VPN、SD-WAN
    50ESPIPsec 加密负载VPN安全传输
    51AHIPsec 认证头数据完整性验证
    89OSPF动态路由协议企业内网路由
  • 头部校验和(Header Checksum)

    • 用于校验IP头部是否损坏。它是一个16位的字段,用于对头部数据进行错误检测。
  • 源IP地址(Source IP Address)

    • 数据包的发送端IP地址。它是32位(IPv4)或128位(IPv6)。
  • 目的IP地址(Destination IP Address)

    • 数据包的接收端IP地址。它是32位(IPv4)或128位(IPv6)。
  • 选项(Options)

    • 这个部分是可选的,在标准IP数据包中可能没有。它包含一些用于调试、控制的扩展信息(例如时间戳、路由记录等)。
  • 数据(Data)

    • 数据部分(也叫有效载荷或Payload),存放应用层传输的数据,通常由TCP/UDP协议提供的段构成。

片偏移讲解和图示

片偏移(Fragment Offset)是IP协议中分片数据包的一部分,它用于指示分片数据包中数据的相对位置。简而言之,当一个大的IP数据包被分片传输时,每个分片的数据部分都包含一个偏移量,告诉接收端该分片在整个数据包中的位置。

分片和片偏移

在IP协议中,当数据包过大时(超过了最大传输单元 MTU,通常是1500字节),它需要被分割成多个较小的数据包,这个过程叫做分片。每个分片都会有一个“片偏移”字段,用来表示该分片在整个原始数据包中的相对位置。

片偏移的作用

  • 片偏移表示当前分片中数据相对于原始数据包的起始位置的偏移量,以8字节为单位。
  • 例如,如果一个数据包被分成4个分片,每个分片的偏移量就告诉接收端数据应该如何重组。

举个例子

假设有一个大数据包,其大小为4000字节,我们需要将其分成4个分片来传输。每个分片的大小为1000字节(假设1500字节的MTU,去掉了头部20字节)。每个分片都会有一个偏移量,表示它的数据在整个原始数据包中的位置。

分片过程:
  • 分片1:

    • 数据:从第0字节开始,大小1000字节
    • 偏移:0(表示这个分片的数据从原始数据包的0字节开始)
  • 分片2:

    • 数据:从第1000字节开始,大小1000字节
    • 偏移:125(表示该分片的数据从原始数据包的1000字节处开始,1000 ÷ 8 = 125)
  • 分片3:

    • 数据:从第2000字节开始,大小1000字节
    • 偏移:250(表示该分片的数据从原始数据包的2000字节处开始,2000 ÷ 8 = 250)
  • 分片4:

    • 数据:从第3000字节开始,大小1000字节
    • 偏移:375(表示该分片的数据从原始数据包的3000字节处开始,3000 ÷ 8 = 375)
偏移字段的计算

片偏移是以8字节为单位的。例如,第一个分片的偏移是0,第二个分片的偏移是1000 ÷ 8 = 125,以此类推。

图示说明

在这里插入图片描述

关键说明

  • 片偏移计算

    • 分片2的起始字节为 1000,片偏移 = 1000 / 8 = 125

    • 分片3的起始字节为 2000,片偏移 = 2000 / 8 = 250

    • 分片4的起始字节为 3000,片偏移 = 3000 / 8 = 375

  • MF标志

    • 前3个分片的 MF=1(More Fragments),表示后续还有分片

    • 最后一个分片的 MF=0,表示结束

  • 单位一致性

    • 所有偏移量以 8字节 为单位(RFC 791规定)

    • 因此数据长度必须是 8的倍数(若不足会填充)

Wireshare抓包验证
  • 发送大数据

使用命令行工具,比如ping(通过设置大的数据包大小)来生成分片包

ping -s 4000 <目标IP>

这将发送一个4000字节的数据包,超过MTU限制,触发IP层分片。

  • 过滤分片数据包

    使用Wireshark的过滤器来仅显示分片数据包。在Wireshark的过滤框中,输入以下过滤表达式:

    ip.flags.mf == 1 || ip.frag_offset > 0
    
    • ip.flags.mf == 1:显示“更多分片”标志设置为1的分片,意味着这不是最后一个分片。
    • ip.frag_offset > 0:显示偏移量大于0的分片,表示这是非第一个分片。

在这里插入图片描述
在wireshare中最后一个偏移片重组数据
在这里插入图片描述

Wireshare 截图翻译理解

在这里插入图片描述

Internet Protocol Version 4, Src: 10.0.0.201, Dst: 10.0.0.1
┌──────────────────────┬──────────────────────────────────────────────┐
| 字段                 | 说明                                         |
├──────────────────────┼──────────────────────────────────────────────┤
| 0100 ....            | 版本号: IPv4 (二进制0100)                    |
| .... 0101            | 头部长度: 5×4=20字节 (标准IPv4头部)          |
| Differentiated       | 区分服务字段: 0x00 (默认无QoS优先级)         |
|  0000 00..           | DSCP: CS0 (普通流量)                         |
|  .... ..00           | ECN: 不支持拥塞通知                          |
| Total Length         | 总长度: 1500字节 (含IP头和数据)              |
| Identification       | 标识符: 0xeb60 (60256)                       |
| Flags                | 分片标志: 0x1 (更多分片)                     |
|  0... ....           | 保留位: 未设置                               |
|  .0.. ....           | DF=0 (允许分片)                              |
|  ..1. ....           | MF=1 (后续还有分片)                          |
| Fragment Offset      | 片偏移: 0 (当前是第一个分片)                |
| Time to Live         | 生存时间: 64 (每经过路由减1)                 |
| Protocol             | 协议类型: ICMP (1)                           |
| Header Checksum      | 头部校验和: 0x54f7 (校验未启用)              |
| Source Address       | 源IP: 10.0.0.201                             |
| Destination Address  | 目的IP: 10.0.0.1                            |
| [Reassembled IPv4...]| 该分片属于帧59的IPv4重组数据                |
| [Stream index: 0]    | 数据流索引: 0                               |
└──────────────────────┴──────────────────────────────────────────────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值