1.写在前面
前面的博客,大体的介绍完了整个网络的体系,还剩下一个IP协议,今天我们来介绍这个IP协议。
2.网络层与链路层的功能
网络层功能
- IP 寻址
- 选路
- 封装打包
- 分片
数据链路层功能
- 逻辑链路控制
- 媒体访问控制
- 封装链路层帧
- MAC 寻址
- 差错检测与处理
- 定义物理层标准
细腰结构:IP 网络层的核心地位
性能至上的 IP 层
- 无连接
- 非可靠
- 无确认
多播:广播与组播
- 全球作用域
- 组织内
- 场点内
- 本地链路层
- 本机作用域
路由器与交换机
- 工作在网络层的路由器
- 连接不同网络的设备
- 工作在数据链路层的交换机
- 同一个网络下连接不同主机的设备
网络传输示例
3.IPv4 分类地址
易用性:IPv4 地址的点分十进制表示
- 32 位二进制数
- IP 地址空间:2^32 个
IP 地址的分配机构
- 层层分配的 IP 地址
当互联网规律很小时,类别信息被编码进 IP 地址
分类 IP 地址的优点
- 简单明了
- 具有 3 个级别的灵活性
- 选路(基于网络地址) 简单
分类 IP 寻址的问题
- 缺少私有网络下的地址灵活性:同一个网络下没有地址层次
- 3 类地址块太少,无法与现实网络很好的匹配
4.CIDR无分类地址
CIDR 子网掩码
CIDR
- Classless Inter-Domain Routing
表示方法
-
A.B.C.D/N,N 范围[0, 32]
CIDR 子网划分示例
- 71.94.0.0/15
- 多级子网划分
208.130.29.33 的寻址历程
- MCI 分配到了 208.128.0.0/11
- MCI 将 208.130.28.0/22 分配给ARS
- ARS 将 208.130.29.0/22 分配给Public Servers 使用
- www.freesoft.org 使用了208.130.29.33 地址
全 0 或者全 1 的特殊含义
预留 IP 地址(RFC1918)
5.IP 地址与链路地址的转换:ARP 与 RARP 协议
链路层 MAC 地址
- 链路层地址 MAC(Media Access Control Address)
- 实现本地网络设备间的直接传输
- 网络层地址 IP(Internet Protocol address)
- 实现大型网络间的传输
- 查看 MAC 地址
- Windows: ipconfig /all
- Linux:ifconfig
2.5 层协议 ARP:从 IP 地址寻找 MAC 地址
- 动态地址解析协议 ARP(RFC826)
- Address Resolution Protocol
- 动态地址解析:广播
2.5 层协议:ARP
-
检查本地缓存
- Windows: arp –a
- Linux: arp –nv
- Mac: arp -nla
-
广播形式的请求
-
单播形式的应答
ARP 报文格式:FrameType=0x0806
- 硬件类型,如 1 表示以太网
- 协议类型,如 0x0800 表示 IPv4
- 硬件地址长度,如 6
- 协议地址长度,如 4 表示 IPv4
- 操作码,如 1 表示请求,2 表示应答
- 发送方硬件地址
- 发送方协议地址
- 目标硬件地址
- 目标协议地址
硬件类型与操作码
-
硬件类型取值
-
操作码取值
2.5 层协议 RARP:从 MAC 地址中寻找 IP 地址
动态地址解析协议 RARP(RFC903)
- Reverse Address Resolution Protocol
RARP 的工作流程
-
广播形式的请求
-
单播形式的应答
RARP 报文格式:FrameType=0x8035
- 硬件类型,如 1 表示以太网
- 协议类型,如 0x0800 表示 IPv4
- 硬件地址长度,如 6
- 协议地址长度,如 4 表示 IPv4
- 操作码,如 3 表示请求,4 表示应答
- 发送方硬件地址
- 发送方协议地址
- 目标硬件地址
- 目标协议地址
ARP 欺骗(ARP spoofing/poisoning)
6.NAT 地址转换与 LVS 负载均衡
IPv4 地址短缺
少量的公网 IP VS 大量的主机
NAT(IP Network Address Translator)应用的前提
- 内网中主要用于客户端访问互联网
- 同一时间仅少量主机访问互联网
- 内网中存在一个路由器负责访问外网
单向(向外)转换 NAT:动态映射
NAPT 端口映射:Network Address Port Translation
双向(向内)NAT:IP 地址静态映射
LVS(Linux Virtual Server)/NAT 工作模式
NAT
优点:
- 共享公共 IP 地址,节约开支
- 扩展主机时不涉及公共地址
- 更换 ISP 服务商(更换公网 IP 地址),不对主机地址产生影响
- 更好的安全性,外部服务无法主动访问内网服务
- 更好的隔离性
缺点:
- 网络管理复杂
- 性能下降
- 重新修改校验和
- 客户端缺乏公网 IP 导致功能缺失
- 某些应用层协议由于传递网络层信息而功能受限
7.IP 选路协议
如何传输 IP 报文?
- 直接传输
- 本地网络间接传输
- 内部选路协议 RIP OSPF
- 公网间接传输
- 外部选路协议 BGP
路由表 routing table
RIP 内部选路协议
Routing Information Protocol
- 特点
- 基于跳数确定路由
- UDP 协议向相邻路由器通知路由表
- 问题
- 跳数度量
- 慢收敛
- 选路环路
OSPF 内部选路协议
Open Shortest Path First
多级拓扑结构:同级拓扑中的每台路由器都具有最终相同的数据信息(LSDB)
- 直接使用 IP 协议(协议号 0x06 为 TCP,0x11 为 UDP,而 0x59 为 OSPF)传递路由信息
OSPF 最短路径树
- 只有路由器到达网络有开销
- 网络到达路由器没有开销
- RC 的最短路径树
RC 构造最短路径树
-
第一级:RC 直达设备
- N2:3
- N3:6
- RB:5
-
第二级:间隔 1 跳设备
- 经过 N2 到 RA:3
- 经过 N3 到 RD:6
-
第三级:间隔 2 跳设备
- 经过 N2、RA 到 N1:5
- 经过 N3、RD 到 N4:10
BGP:Border Gateway Protocol
-
网络间的选路协议
-
存放网络间信息 RIB
- Routing Information Base
- TCP 协议传输 RIB 信息
-
E(External)BGP
- 外部对等方传输使用
-
I(Internal)BGP
- 内部对等方传输使用
路由跟踪工具
- Windows: tracert
- Linux/Mac: traceroute
8.MTU 与 IP 报文分片
IP 报文格式
-
IHL:头部长度,单位字
-
TL:总长度,单位字节
-
Id:分片标识
-
Flags:分片控制
- DF 为1:不能分片
- MF 为1:中间分片
-
FO:分片内偏移,单位 8 字节
-
TTL:路由器跳数生存期
-
Protocol:承载协议
-
HC:校验和
MTU(Maximum Transmission Unit)分片
- MTU 最大传输单元( RFC791 :>=576 字节)
- ping 命令
- -f:设置 DF 标志位为 1
- -l:指定负载中的数据长度
常见网络 MTU
可能出现多次分片
IP 分片示例
- 分片主体
- 源主机
- 路由器
- 重组主体
- 目的主机
9.IP 协议的助手:ICMP 协议
ICMP:Internet Control Message Protocol
- RFC792
- IP 助手
- 告知错误
- 传递信息
ICMP协议格式
承载在 IP 之上
组成字段
- 类型
- 子类型
- 校验和
ICMPv4 报文类型
错误报文
- 3:目的地不可达
- 4:发生拥塞,要求发送方降低速率
- 5:告诉主机更好的网络路径
- 11:路径超出 TTL 限制
- 12:其他问题
信息报文
- 0:连通性测试中的响应
- 8:连通性测试中的请求
- 9:路由器通告其能力
- 10:路由器通知请求
- 13:时间戳请求
- 14:时间戳应答
- 17:掩码请求
- 18:掩码应答
- 30:Traceroute
目的地不可达报文:Type=3
常用子类型 Code
- 0:网络不可达
- 1:主机不可达
- 2:协议不可达
- 3:端口不可达
- 4:要分片但 DF 为1
- 10:不允许向特定主机通信
- 13:管理受禁
Echo 与 Echo Reply 报文
ping 联通性测试
TTL 超限:Type=11
traceroute/tracert
10.多播与 IGMP 协议
广播与组播
广播地址
- 以太网地址: ff:ff:ff:ff:ff:ff
- IP 地址
组播IP地址
预留组播地址
-
224.0.0.1: 子网内的所有系统组
-
224.0.0.2: 子网内的所有路由器组
-
224.0.1.1: 用于 NTP 同步系统时钟
-
224.0.0.9: 用于 RIP-2 协议
组播以太网地址
- 以太网地址:01:00:5e:00:00:00 到 01:00:5e:7f:ff:ff
- 低 23 位:映射 IP 组播地址至以太网地址
- 224.0.0.22: 11100000 00000000 00000000 00010110
- 01:00:5e:00:00:16: 0000001 00000000 01011110 00000000 00000000 00010110
IGMP(Internet Group Management Protocol)协议
Type 类型
- 0x11 Membership Query [RFC3376]
- 0x22 Version 3 Membership Report [RFC3376]
- 0x12 Version 1 Membership Report [RFC-1112]
- 0x16 Version 2 Membership Report [RFC-2236]
- 0x17 Version 2 Leave Group [RFC-2236]
0x22 Membership Report:状态变更通知
Group Record 格式
Record Type 类型
- 当前状态
- 1: MODE_IS_INCLUDE
- 2: MODE_IS_EXCLUDE
- 过滤模式变更(如从 INCLUDE 奕为 EXCLUDE)
- 3: CHANGE_TO_INCLUDE
- 4: CHANGE_TO_EXCLUDE
- 源地址列表变更(过滤模式同时决定状态)
- 5: ALLOW_NEW_SOURCES
- 6: BLOCK_OLD_SOURCES
11.支持万物互联的 IPv6 地址
IPv6 目的
- 更大的地址空间:128 位长度
- 更好的地址空间管理
- 消除了 NAT 等寻址技术
- 更简易的 IP 配置管理
- 优秀的选路设计
- 更好的多播支持
- 安全性
- 移动性
IPv6 地址的冒分十六进制表示法
- 首零去除
- 零压缩
- FF00:4501:0:0:0:0:0:32
- FF00:4501::32
- 805B:2D9D:DC28:0:0:FC57:0:0
- 805B:2D9D:DC28::FC57:0:0
- 805B:2D9D:DC28:0:0:FC57::
- 环回地址0:0:0:0:0:0:0:1
- ::1
- FF00:4501:0:0:0:0:0:32
IPv6 地址分布
不同作用域下的多播
Scope ID
-
14:全局作用域
-
8:组织作用域
-
5:场点作用域
-
2:本地链路作用域
-
1:本机作用域
网络地址与主机地址
全局路由前缀:48
- 可任意划分为多级
子网ID:16
- 可任意划分为多级
接口ID:64
- 直接映射 MAC 地址
IEEE802 48 位 MAC 地址映射主机地址(EUI-64)
-
取 OUI(组织唯一标识)放左 24 比特
-
中间 16 比特置为 FFFE
-
置 OUI 第 7 位为 1 表示全局
12.IPv6 报文及分片
IP 头部
IPv6 主首部格式
- Version
- Traffic Class
- TOS
- Flow Label:QOS 控制
- Payload Length
- Total Length
- Next Header
- HopLimit
- TTL
- 删除字段
- IHL
- Identification, Flags, Fragment Offset
- Header Checksum
IPv6 报文格式
- 40 字节主首部
- 可选的扩展首部
- 数据
IPv6 首部链
分片扩展首部
- Fragment Offset
- 单位 8 字节
- MoreFragments
- 0 表示最后分片
- 1 表示非最后分片
- identification
- 扩展 IPv4 相同头部至 4 字节
IPv6 的分片
- 不可分片部分
- 主首部
- 部分扩展首部
- 可分片部分
- 数据
- 部分扩展首部
13.从 wireshark 报文统计中找规律
搭配“显示过滤器”使用
统计方式
- 报文总体分布:捕获文件属性与数据包长度分布
- 端点统计与会话统计
- 协议分级统计
- HTTP/HTTP2 等应用层协议统计
- TCP 协议连接统计
- IO 流统计与数据流统计
报文总体分布
捕获文件属性
- when:何时抓包
- where:哪个 IP 接口在抓包
- how:捕获过滤器是什么?
- how much:多少报文?多少字节?多快速率?
报文长度分布:信息传输效率
- 各种长度报文的分布
协议分级统计(配合显示过滤器)
- 分组数量/字节数百分比(同层)
- 绝对分组数量/字节数
- 速率(比特/秒)
- 协议消息统计
- 结束“分组”
- 结束字节
- 结束速率
端点统计/会话统计
- OSI 不同层次统计
- 数据链路层(解析名称:MAC/IP/PORT)
- 通讯双方/单端点、分组数、字节数、报文方向、速率、持续时间
- 网络层
- 传输层
- UDP/TCP,端口统计
- 数据链路层(解析名称:MAC/IP/PORT)
- 快速应用过滤器及着色规则
HTTP/HTTP2 统计
- HTTP
- 分组统计:请求方法与响应码统计
- 请求:基于 Host 和 URI 统计
- 负载均衡:基于 IP 与 Host 统计
- 请求序列:对请求同一 Domain 下的 URI 统计
- HTTP2
- 帧类型统计
TCP 连接信息统计
- 基于 TCP 连接特性统计,可切换方向
- RTT 时间
- 吞吐量
- 窗口大小
- 序列号
IO 图表与数据流统计
- IO 图表
- 绘制出不同颜色、各类型(折线、直方、点)图
- 以时间作为 X 轴(可选择时间间隔)
- 可设置过滤器下的报文信息为Y轴
- 报文数量、字节数、统计函数
- 数据流
- 可选择基于显示过滤器,显示各端之间的数据流量
专家系统
- Error:错误信息,包括 Wireshark 解析失败信息
- Warning:异常警告信息
- RST 复位关闭、TCP 窗口关闭、TCP 乱序报文等
- Note:正常通信中的异常通信报文
- TCP 重复 ACK、TCP 重传报文、Keepalive、TLS 复用密钥、零窗口探查等
- Chat:通信的基本信息
14.写在最后
本篇博客主要介绍完了IP协议,至此整个网络协议到此就介绍完了。