shuguang's blog

环境决定基础,选择决定价值,努力决定方向。

网络协议 - 网络层

  • 本文主要介绍网络层的数据段,重点介绍网络层首部相关信息。

#网络层简介

  • 数据很多时候是由传输层传递下来的数据段(Segments)(IP、ICMP和ARP协议就是网络层协议,不涉及运输层)

网络层帧格式


#网络层首部 - 版本、首部长度、区分服务、总长度

  • 版本(Version)

    • 占4位
    • 0b0100:IPv4
    • 0b0100:IPv6
  • 首部长度

    • 占4位,二进制转十进制值乘4才是最终长度
    • 0b0101 -> 20(min)
    • 0b1111 -> 60(max)
    • 可变部分最多是40字节
  • 区分服务(Differentiated Services Field)

    • 占8位
    • 用于提高网络服务质量(QoS, Quality of Service)
  • 总长度

    • 占16位
    • 首部 + 数据的长度之和,最大值是 65535(IP数据包MAX长度)字节
    • 帧的长度不能超过1500字节,所以帧的数据部分中网络层数据部分最大长度是1500 - 20 = 1480字节,而且在传输给数据链路层的过程中就需要分片(fragments),其中米都有自己的网路层首部(IP首部)。

网络层数据段


#网络层首部 - 标识、标志、片偏移

  • 标识(Identification)
    • 占16位
    • 数据包的ID,当数据包过大进行分片时, 同一数包的标识时一样的,用于代表
    • 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1, 超出范围(65535)就会重新开始。
  • 标志(Flags)
    • 占3位
    • 第一位(0… = Reserved bit: Not set)保留位
    • 第二位(.1. = Don’t fragment: Set)1表示允许分片
    • 第三位(…0 = More fragments: Not set)0代表是最后一片
  • 片偏移(Fragment offset)
    • 占13位
    • 片偏移乘以8就是字节偏移
    • 每一片的长度时8的整数倍(片偏移 = 片的长度/8, 因为13位不一定存得下)

#ping 的几个用法,wireshark抓包

  • ping /? 查看ping的用法

  • ping ip地址 -l 数据包大小 发送指定大小的数据包

  • ping ip地址 -f 不允许分片

  • ping ip地址 -i TTL数值

  • tracert pathping

    图1

    图2

    图3

    图4

    图5


#网络层首部 - 生存时间、协议、首部校验和

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

    • 占8位
    • 每个路由器转发前TTL减1,一旦发现TTL为0,路由器就会返回错误报告(防止路由表配置错误占用带宽)[1]

    不同操作系统的的TTL

  • 协议(Protocol)

    • 占8位
    • 表明网络层封装的数据使用的协议
      不同协议的代号
  • 首部校验和(Header Checksum)

    • 用于检测首部是否有错误

  1. 1.带宽一词最初指的是电磁波频带的宽度,也就是信号的最高频率与最低频率的差值。目前,它被更广泛地借用在数字通信中,用来描述网络或线路理论上传输数据的最高速率