网络层
- 网络层数据包(IP 数据包,Packet) 由首部、数据 2 部分组成, 数据部分很多时候是由传输层传递下来的数据段(Segment)
网络层首部
版本、首部长度、区分服务
- 版本(Version)
- 占 4 位
- 0b0100: IPv4
- 0b0110: IPv6
- 首部长度
- 占 4 位,二进制乘以 4 才是最终长度
- 0b0101: 20 (最小值)
- 0b1111: 60 (最大值)
- 区分服务(Differentiated Services Field)
- 占 8 位
- 可以用于提高网络的服务质量(QoS,Quality of Service)
总长度
- 总长度(Total Length)
- 占 16 位
- 首部 + 数据的长度之和,最大值是 65535
- 由于帧的数据不能超过 1500 字节,所以过大的 IP 数据包,需要分成片(fragments)传输给数据链路层, 每一片都有自己的网络首部(IP首部)
标识、标志
- 标识(Identification)
- 占 16 位
- 数据包的 ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的 ID,每发出一个数据包,ID 就加 1
- 标志
- 占 3 位
- 第1 位(Reserved):保留
- 第2 位(Don't Fragment): 1 代表不允许分片,0 代表允许分片
- 第3 位(More Fragment): 1 代表不是最后一片,0 代表是最后一片
片偏移
- 片偏移(Fragment Offset)
- 占 13 位
- 片偏移乘以 8:字节偏移
- 每一片的长度一定是 8 的整数倍
- ping ke.qq.com -| 4000
生存时间
- 生存时间(Time To Live, TTL)
- 占 8 位
- 每个路由器在转发之前会将 TTL 减 1,一旦发现 TTL 减为 0,路由器会返回错误报告
- 观察使用ping命令后的 TTL,能够推测出对方的操作系统、中间经过了多少个路由器
-
不同的操作系统默认的 TTL 是不一样的
-
TTL 的作用,假设有两个路由器 A和 B, A 的默认路由是 B,B的默认路由又是 A, 如果一个数据包到 A,A不知道发给谁,那么就会给 B,B 也不知道发给谁,又会发给 A,这样就会一直循环占用着资源,TTL 就可以解决这个问题
协议、首部校验和
- 协议: 占 8 位,表明所有封装的数据是使用了什么协议
- 首部校验和(Header Checksum): 用于检查首部是否有错误
ping 的几个用法
- ping /? : 查看 ping 的用法
- ping ip 地址 -| 数据包大小 : 发送指定大小的数据包
- ping ip 地址 -f : 不允许网络分层
- ping ip 地址 -i TTL :设置 TTL 的值
- 通过 tracert、pathping 命令,可以跟踪数据包经过哪些路由器
网友评论