网络层(NetWork)

  • 网络层数据包(IP数据包,Packet)由首部,数据两部分组成
    • 很多时候是由传输层传递下来的数据段

网络层首部

版本(version)

  • 占四位
    • 0b0100:IPv4
    • 0b0110:IPv6

首部长度(Header Length)

  • 占四位 二进制乘以四才是最终长度
    • 0b0101:20字节(最小值)
    • 0b1111:60字节(最大值)

区分服务

  • 占八位
  • 可以用于提高网络的服务质量(Qos)
  • 可在操作系统中配置

总长度

  • 占16位
  • 首部+数据的长度之和 最大值是65535
  • 数据要传输给数据链路层 然而数据链路层的帧的数据部分不能超过1500字节 所以过大的IP数据包 需要分成片(fragments)传输给数据链路层
  • 每一片 都有自己的网络层首部(IP首部)

标识,标志

标识

  • 占16位
  • 数据包的ID 当数据包过大进行分片时,同一个数据包的所有片的标识都是一样
  • 有一个计数器专门管理数据包的ID 每发出一个数据包 ID+1

标志

  • 占三位
  • 第一位(Reserved Bit): 保留
  • 第二位 (Don’t fragment): 1代表不允许分片 0代表允许分片
  • 第三位(More Fragments): 1代表不是最后一片 0代表是最后一片

片偏移(Fragment Offset)

  • 占13位
  • 片偏移乘以8:字节偏移 代表这一片是整个IP数据段的第几个字节

协议

  • 占8位
  • 表明封装的数据使用了什么协议

首部检验和

将首部进行计算用于检查首部是否有错误

生存时间(Time To Live)

  • 占八位
  • 每个路由器在转发之前会将TTL减一 一旦发现TTL减为零 路由器会返回错误报告
  • 作用:
    • 路由表设置默认路由 如果路由表有问题 会一直占用网络资源 TTL可以防止路由死循环
    • 观察使用ping 命令后的TTL 能够推测对方的操作系统中间经过了多少个路由器

ping的用法

  • ping/?
    • 查看ping的用法
  • ping ip地址数据包大小
    • 发送指定大小的数据包
  • ping ip 地址 -f
    • 不允许网络层分片
  • ping ip -ip地址 -i TTL
    • 设置TTL的值
  • 通过 tracert、 pathping (mac 使用traceroute )命令,可以跟踪数据包经过了哪些路由器