一、网络层
- 网络层数据包(IP数据包, Packet)由首部、数据2部分组成
二、网络层首部
1、版本 (Version)
- 版本: 占
4
位
- 0b0100: IPv4
- 0b0110: IPv6
- 使用终端给百度发数据包
ping baidu.com
复制代码
- 点击 Intenet Protocol , 可以看到版本
0100 .... = Version: 4
, 这说明百度使用的是IPv4网络
2、首部长度 (Header Length)
- 首部长度: 占
4
位, 二进制乘以4
才是最终长度, 表示整个首部的长度, 包括可选部分
- 0b0101: 20 (最小值, 固定部分)
- 0b1111: 60 (最大值, 固定部分20, 可变部分40)
- 查看刚才抓到的数据, 可以看到
.... 0101 = Header Length: 20 bytes (5)
, 0101
的十进制值是5
, 乘以4
就是20
3、区分服务 (Differentiated Services Field)
- 如上图所示, 当三台计算机都发送网络到右边的局域网时, 如果同时到达路由器, 那么路由器就会根据
区分服务
进行优先级判断, 优先级高的优先通过
- 上面抓取的数据包中, 区分服务的值为
0
, 说明是一个普通的网络, 不会被优先处理
4、总长度 (Total Length)
- 总长度: 占
16
位
首部 + 数据的长度之和, 最大值是 65535
- 由于帧的数据不能超过
1500
字节, 所以过大的IP数据包, 需要分成片(fragments)传输给数据链路层
- 刚抓取的数据包, 总长度为84字节, 首部20字节, 数据64字节
5、标识 (Identification)
- 标识: 占
16
位
- 数据包的ID, 当数据包过大进行分片时, 同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的ID, 每发出一个数据包, ID就加1
6、标志 (Flags)
- 标志: 占
3
位
- 第
1
位(Reserved Bit): 保留
- 第
2
位(Don't Fragment): 1
代表不允许分片, 0
代表允许分片
- 第
3
位(More Fragments): 1
代表不是最后一片, 0
代表是最后一片
- 上图中的标志数据
- 第
1
个0
是保留位
- 第
2
个0
标识允许分片
- 第
3
个0
标识最后一片
7、ping - 几个用法
(1) ping -h
(2) ping ip地址 -s 数据包
ping ip地址 -s 数据包
: 发送指定大小的数据包
ping baidu.com -s 800
复制代码
- 可以看到
- IP数据包的总长度是
828
字节
- IP首部
20
字节
- ICMP首部
8
字节
- 时间
8
字节 + Data数据792
字节, 共800
字节
- 其中
时间+Data
的800
字节, 就是指定的数据包大小
8、片偏移(Fragment Offset)
- 片偏移: 占13位
- 片偏移乘以8: 字节偏移
- 每一片的长度一定是8的整数倍
(1) 实践片偏移
ping 163.com -s 4000
复制代码
- 因为数据链路层接收到网络层的数据, 最大是
1500
字节, 所以会进行分片传输
- 可以在
Wireshark
中看到一个数据包, 分为了三片发送
- 点击第一片数据, 可以看到总大小是1500
- IP首部: 20个字节
- Data: 1480个字节
- 片偏移是
0
- 点击标志
Flags
- 第
1
个0
是保留位
- 第
2
个0
表示允许分片
- 第
3
个1
表示不是最后一片
- 点开第二片数据, 片偏移是
1480
, 接着第一片Data数据
之后的1480
字节数据
- 点击标志
Flags
- 第
1
个0
是保留位
- 第
2
个0
表示允许分片
- 第
3
个1
表示不是最后一片
- 点开第三片数据, 片偏移
2960
, 接着第二片Data数据
之后的1040
字节数据
- 点击标志
Flags
- 第
1
个0
是保留位
- 第
2
个0
表示允许分片
- 第
3
个0
表示最后一片
- 这三片实际传输数据的总大小是
1480 + 1480 + 1040 = 4000
, 即发送的4000
个字节
9、生存时间 (Time to Live, TTL)
- 生存空间: 占
8
位
- 每个路由器在转发之前将会TTL减1, 一旦发现TTL减为0, 路由器会返回错误报告
- 观察使用ping命令后的TTL, 能够推测出对方的操作系统, 中间经过了多少个路由器
- 生存时间可以解决: 因路由器链接错误, 导致信息循环发送的问题
- 例如下图, 计算机0发出的消息, 在路由器0和路由器1之间不停地循环, 即不停地经过
3
和4
两条线路, 此时如果没有生存时间的限制, 信息就会一直占用资源, 无法释放
- 存在生存时间, 当TTL减为0时, 路由器会停止发送信息, 并将错误信息返回给计算机0
- 可以使用
Wireshark
抓取数据, 查看网络层首部的TTL
10、协议 (Protocol)
- 可以使用
Wireshark
抓取数据, 查看网络层首部的协议
11、首部检验和 (Header Checksum)
- 首部检验和: 占
16
位
- 一开始首部检验和全是0, 等其它首部信息填充后, 会根据一定的算法计算出一个数据, 然后填充到首部位置
- 可以使用
Wireshark
抓取数据, 查看网络层首部的协议
近期评论