以下内容来自于小码哥"网络协议从入门到底层原理"
网络层(Network)
- 网络层数据包(
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位
-- 首部 + 数据的长度之和, 最大值是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代表是最后一片
ping的几个用法
ping /?
-- 查看ping的用法ping ip地址 -l 数据包大小
-- 发送指定大小的数据包ping ip地址 -f
-- 不允许网络层分片ping ip地址 -I TTL
-- 设置TTL的值通过
tracert,pathping命令, 可以跟踪数据包经过了哪些路由器
网络层首部 - 片偏移
-
片偏移
(Fragment Offset)
-- 占13位
-- 片偏移乘以8: 字节
-- 每一片的长度一定是8的整数倍

-
ping ke.qq.com -l 4000

网络层首部 - 协议, 首部校验和
- 协议
(Protocol)
-- 占8位
-- 表明所封装的数据是使用了什么协议(传输层用了什么协议)

- 首部检验和
(Header Checksum)
-- 用于检查首部是否有错误
网络层首部-生存时间
- 生存时间
(Time To Live)
-- 占8位
-- 每个路由器在转发之前会将TTL减1, 一旦发现TTL减为0, 路由器会返回错误报告
-- 观察使用ping命令后的TTL, 能够推测出对方的操作系统, 中间经过了多少个路由器










