MAC地址被用来在第二层处理单一网络的通信,而第三层则负责跨网络通信的地址.在第三层上工作的不止一个协议,但最普遍的还是互联网协议(Internet Protocol),即IP协议
IP协议现在分为IPv4版本和IPv6版本.现在是处于v4版本和v6版本的交替点,不久之后IPv6将成为主流
IP地址
IP地址用来唯一的标识连接到网络的地址,是可任意更改的逻辑地址
IPv4
IPv4地址有32位.由于32位的0和1不便于人类阅读,所以往往采取点分四组表示法来配置,即A.B.C.D的形式
1 | 点分四组: |
每个IP地址都包含两个部分:网络地址和主机地址
- 网络地址:标识设备所连接的局域网
- 主机地址:标识这个网络中的设备本身
网络地址和主机地址的划分实际上是由另一组名为网络掩码(或称为子网掩码)的地址信息所决定的.网络掩码也是32位长,被设为1的每一位都标识着IP地址的对应部分是属于网络地址的,而剩下设为0的部分则标识着主机地址
1 | 网络掩码: |
IP地址与网络掩码为简便起见,通常会写成无类型域间路由(Classless Inter-Domain Routing,CIDR)的形式.即一个完整的IP地址后面会有一个左斜杠,以及用来表示IP地址中网络部分位数的数字.举例:IP地址192.168.10.5和网络掩码255.255.255.0,在CIDR表示法下就会被写成192.168.10.5/24的形式
IPv4头
IP数据包的头部比ARP的头部要复杂得多
IPv4数据包结构:
IPv4头部包含下列几个域:
- 版本号: IP所使用的版本
- 首部长度: IP头的长度
- 服务类型: 优先级标志位和服务类型标志位,被路由器用来进行流量的优先排序
- 总长度: IP头与数据包中数据的长度
- 标识符: 一个唯一的标识数字,用来识别一个数据包或者被分片数据包的次序
- 标记: 用来标记一个数据包是否是一组分片数据包的一部分
- 分片偏移: 如果一个数据包是一个分片,这个域中的值就会被用来将数据包以正确的次序重新组装
- 存活时间: 用来定义数据包的生存周期,以经过路由器的跳数/秒数进行描述
- 协议: 用来识别在数据包序列中上层协议数据包的类型
- 首部校验和: 一个错误检测机制,用来确认IP头的内容没有被损坏或者篡改
- 源IP地址: 发出数据包的主机的IP地址
- 目的IP地址: 数据包目的地的IP地址
- 选项: 保留做额外的IP选项.它包含着源站选路和时间戳的一些选项
- 数据: 使用IP传递的实际数据
存活时间(TTL)
存活时间(TTL)值定义了一个数据包被丢弃之前,所能经历的时间,或者能经过的最大路由数目
TTL在数据包被创建时就会被定义,而且通常在每次被发送到一个路由器时,该路由器会将TTL值减1.当TTL值被减至0时,路由器就不再转发该数据包了
TTL的主要作用是防止死循环.若路由器配置不当,路由器间产生路由风暴时,TTL可以防止一个数据包永远地被传递
IP分片
数据包分片是将一个数据流分为更小的片段,是IP解决跨越不同类型网络时可靠传输的一个特性
一个数据包的分片主要是基于第二层数据链路协议所使用的最大传输单元(MTU)的大小,以及使用这些第二层协议的设备的配置情况
在多数情况下,第二层所使用的数据链路协议是以太网,以太网的默认MTU是1500.也就是说,以太网的网络上所能传输的最大数据包大小是1500字节(不包括14字节的以太网本身).一个设备额MTU通常可以手工指定
当一个设备准备传输一个IP数据包时,它将会比较这个数据包的大小以及将要把这个数据包传送出去的网络接口MTU,用于决定是否需要将这个数据包分片
将一个数据包分片的步骤:
- 设备将数据分为若干个可成功进行传输的数据包
- 每个IP头的总长度域会被设置为每个分片的片段长度
- 更多分片标记将会在数据流的所有数据包中设备为1,除了最后一个数据包
- IP头中分片部分的分片偏移将会被设置
- 数据包被发送出去
示例:
172.17.0.1的主机向172.17.0.2主机发送大小为3000的ping包
]# ping 172.17.0.2 -c1 -s3000
我们先看看第一个分片包:
可以看出:
- 标识符的值为0xb02f,所有分片包的标识符应该都一样
- IP包的总长度为1500字节,去除IP头的20字节,数据总共1480字节
- Flags的第3位MF(More Fragments)位置1,表示还有更多分片
- 分片偏移为0,因为这是第一个包
第二个分片包:
- 标识符的值仍为0xb02f
- IP包的总长度为1500字节,已到达MTU值
- MF位置1,表示还有更多分片
- 分片偏移为185,即185*8=1480字节
第三个分片包
- 标识符的值仍为0xb02f
- IP包的总长度为68字节
- MF位置0,即最后一个分片
- 分片偏移为370,即370*8=2960字节
这三个包的总长度为3068字节,减去IP头20*3字节,减去ICMP头8字节,正好为发送数据的长度3000字节
小结
IP是当今互联网的重要组成部分,当今绝大多数的设备都是使用IP互相进行通信的,因此很有必要学习IP相关知识
这篇博客仅列出了IPv4的情况,IPv6以后看情况…
参考文档
“Wireshark数据包分析实战(第二版)”