网络协议(六)-网络层
以下内容来自于小码哥"网络协议从入门到底层原理"
网络层(Network)
- 网络层数据包(
IP
数据包,Packet
)由首部, 数据2
部分组成
-- 数据: 一般是由传输层传递下来的数据段(Segment)
image.png
网络层首部-版本, 首部长度, 区分服务
-
版本
(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
image.png - 由于帧的数据不能超过
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
命令, 可以跟踪数据包经过了哪些路由器
网络层首部 - 片偏移
-
片偏移
image.png(Fragment Offset)
-- 占13
位
-- 片偏移乘以8
: 字节
-- 每一片的长度一定是8
的整数倍
-
image.pngping ke.qq.com -l 4000
网络层首部 - 协议, 首部校验和
- 协议
(Protocol)
-- 占8
位
-- 表明所封装的数据是使用了什么协议(传输层用了什么协议)
image.png - 首部检验和
(Header Checksum)
-- 用于检查首部是否有错误
网络层首部-生存时间
- 生存时间
(Time To Live)
-- 占8
位
-- 每个路由器在转发之前会将TTL
减1
, 一旦发现TTL
减为0
, 路由器会返回错误报告
-- 观察使用ping
命令后的TTL
, 能够推测出对方的操作系统, 中间经过了多少个路由器