小码哥《网络协议从入门到底层原理》笔记(六):网络层

1,028 阅读2分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

网络层

  • 网络层数据包(IP数据包,Packet)由首部,数据2部分组成
    • 数据:一般是由传输层传递下来的数据段(Segment)

版本,首部长度,区分服务

  • 版本(Version)
    • 4
    • 0b0100: IPv4
    • 0b0110: IPv6
  • 首部长度(Header Length)
    • 4位,二进制乘以4才是最终长度
    • 0b0101:20(最小值)
    • 0b1111:60(最小值)
  • 区分服务(Differentiated Services Field)
    • 8
    • 可以提高网络的服务质量

总长度

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

标识、标志

  • 标识(Identification)
    • 16
    • 数据包的ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
    • 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
  • 标志(flags)
    • 3
    • 1位(Reserved Bit):保留
    • 2位(Don't Fragment)DF:1代表不允许分片,0代表允许分片
    • 3位(More Fragments)MF:1代表不是最后一片,0代表是最后一片

片偏移

  • 片偏移(Fragment Offset)
    • 13
    • 片偏移乘以8:字节偏移
    • 每一片的长度一定是8的整数倍

生存时间

  • 生存时间(Time To Live)
    • 占`8位
    • 每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告
    • 观察使用ping命令后的TTL,能够推测出对方的操作系统,中间经过了多少个路由器

协议,首部校验和

  • 协议(Protocol)
    • 8
    • 表明所封装的数据是使用了什么协议(传输层用了什么协议)
  • 首部校验和(Header Checksum)
    • 用于检查首部是否有错误