IP¶
网际协议(Internet Protocol,缩写:IP)
IP是一种无连接的协议
IP报文尽最大努力交付,可能存在丢包或乱序
IP网络分为IPv4和IPv6
IP地址¶
当设备连接网络,设备将被分配一个IP地址,用作标识
通过IP地址,设备可以互相通讯
IP地址有两个主要功能:标识设备网络和寻址
IPv4¶
Internet Protocol version 4,互联网通信协议第四版
IPv4报文结构¶

| 字段 | 长度 | 说明 |
|---|---|---|
| 版本 | 4bit | IP协议版本,IPv4默认是4 |
| 头部长度 | 4bit | 头部数据长度,以4字节为单位。范围[5-15],即[20-60]字节 |
| 服务类型 | 6bit | PPP:前3位,定义包的优先级,取值越大数据越重要 ---000 普通(Routine) ---001 优先的(Priority) ---010 立即的发送(Immediate) ---011 闪电式的(Flash) ---100 比闪电还闪电式的(Flash Override) ---101 CRI / TIC / ECP(找不到这个词的翻译) ---110 网间控制(Internetwork Control) ---111 网络控制(Network Control) DTRCO:后 5 位 ---D 时延:0:普通,1:延迟尽量小 ---T 吞吐量:0:普通,1:流量尽量大 ---R 可靠性:0:普通,1:可靠性尽量大 ---M 传输成本:0:普通,1:成本尽量小 ---0 最后一位被保留,恒定为 0 |
| 总长度 | 16bit | 头部和数据的总长度。 理论范围[20-65535] 实际范围根据以太网帧的MTU而定。一般是[46-1500] |
| 标识符 | 16bit | 一个整数,用于识别当前数据报。 每产生一个数据报,计数器加1,并赋值给此字段。 当数据报分段时,标识字段的值被复制到所有的分段之中 |
| 标志 | 3bit | 第15bit:保留,必须为0; 第14bit:禁止分片(Don’t Fragment,DF),当DF=0时才允许分片 第13bit:更多分片(More Fragment,MF),MF=1代表后面还有分片,MF=0 代表已经是最后一个分片。 |
| 分段偏移 | 13bit | 每个分片相对于原始报文开头的偏移量,以1字节作单位。 |
| 存活时间 | 1Byte | 报文转发最大次数, 每转发一次,减一。减到0则丢弃。 |
| 协议 | 1Byte | 负载数据协议类型,例如: 1--ICMP 2--IGMP 6--TCP 17--UDP 41--ENCAP 89--OSPF 132--SCTP |
| 头部校验和 | 2Byte | IP头部完整性校验。 计算过程是先将校验和字段置为0,然后将整个头部每16位划分为一部分,将个部分相加,再将计算结果取反码,插入到校验和字段中 |
| 源地址 | 4Byte | 源主机IP地址 |
| 目的地址 | 4Byte | 目标主机IP地址 |
| 可选头部 | [0-40]Byte | 长度必须是4字节的整数倍,如果不是,需要补0x00 |
IPv4地址¶
IP地址是4字节,常用点分是十进制标识,例如:192.168.1.1
IP地址分为两部分,网络地址+主机地址
分类网络¶
| 类别 | 网络标志位(最高位) | IP地址范围 | 可用IP地址范围 |
|---|---|---|---|
| A类 | 0 | 0.0.0.0~127.255.255.255 | 1.0.0.1~127.255.255.254 |
| B类 | 10 | 128.0.0.0~191.255.255.255 | 128.0.0.1~191.255.255.254 |
| C类 | 110 | 192.0.0.0~223.255.255.255 | 192.0.0.1~223.255.255.254 |
| D类 | 1110 | 224.0.0.0~239.255.255.255 | |
| E类 | 11110 | 240.0.0.0~247.255.255.255 |
无类别域间路由¶
无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
使用可变长子网掩码(VLSM)来分配任意长度的网络前缀
1993年,CIDR正式取代分类网络
子网¶
主机地址为0的地址,表示一个网段。
例如:192.168.1.0/24
CIDR地址划分¶
| CIDR地址块 | 描述 | 参考资料 |
|---|---|---|
| 0.0.0.0/8 | 本网络(仅作为源地址时合法) | RFC 6890 |
| 10.0.0.0/8 | 专用网络 | RFC 1918 |
| 100.64.0.0/10 | 电信级NAT | RFC 6598 |
| 127.0.0.0/8 | 环回 | RFC 5735 |
| 169.254.0.0/16 | 链路本地 | RFC 3927 |
| 172.16.0.0/12 | 专用网络 | RFC 1918 |
| 192.0.0.0/24 | 保留(IANA) | RFC 5735 |
| 192.0.2.0/24 | TEST-NET-1,文档和示例 | RFC 5735 |
| 192.88.99.0/24 | 6to4中继 | RFC 3068 |
| 192.168.0.0/16 | 专用网络 | RFC 1918 |
| 198.18.0.0/15 | 网络基准测试 | RFC 2544 |
| 198.51.100.0/24 | TEST-NET-2,文档和示例 | RFC 5737 |
| 203.0.113.0/24 | TEST-NET-3,文档和示例 | RFC 5737 |
| 224.0.0.0/4 | 多播(之前的D类网络) | RFC 3171 |
| 240.0.0.0/4 | 保留(之前的E类网络) | RFC 1700 |
| 255.255.255.255/32 | 受限广播 | RFC 919 |
| 网络号 | 主机号 | 作为源地址 | 作为目的地址 | 描述 |
|---|---|---|---|---|
| 全为0 | 全为0 | 允许 | 禁止 | 表示本网主机 |
| 全为0 | Host ID | 允许 | 禁止 | 表示特定主机 |
| 全为1 | 全为1 | 禁止 | 允许 | 定向广播地址 |
| 127 | 任意合法的值 | 允许 | 允许 | 迂回地址,用于本地测试 |
| 255.255.255.255 | 全为1 | 禁止 | 允许 | 直接广播地址 |
| 127.0.0.1 | 环回地址 |
私有地址¶
接入互联网设备越来越多,IPv4地址短缺严重,为了解决这个问题,专门划分出一段局域网内部使用的IP
私有地址不能与公网直接通信
私有可以通过NAT转换与公网地址通信
| CIDR地址块 | 地址范围 | 数量 | 类别 |
|---|---|---|---|
| 10.0.0.0/8 | 10.0.0.0–10.255.255.255 | 16,777,216 | 一个A类 |
| 172.16.0.0/12 | 172.16.0.0–172.31.255.255 | 1,048,576 | 连续的16个B类 |
| 192.168.0.0/16 | 192.168.0.0–192.168.255.255 | 65,536 | 连续的256个C类 |
IPv6¶
网际协议第6版(英语:Internet Protocol version 6,缩写:IPv6)是网际协议的最新版本。
用它来取代IPv4主要是为了解决IPv4地址枯竭问题
同时它也在其他方面对于IPv4有许多改进。
IPv6地址¶
IPv6采用128位表示,采用16进制以16bit为一组,共8组,组间用:隔开
例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344
或者用.隔开每位,例如:2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4
省略前导0¶
2001:0db8:02de:0000:0000:0000:0000:0e13
2001:db8:2de:0000:0000:0000:0000:e13
2001:db8:2de:000:000:000:000:e13
2001:db8:2de:00:00:00:00:e13
2001:db8:2de:0:0:0:0:e13
::省略连续0¶
2001:db8:2de:0:0:0:0:e13
2001:db8:2de::e13
一个IP内不允许出现两次::
IPv4转IPv6¶
192.168.89.9→::ffff:c0a8:5909
或192.168.89.9→::ffff:192.168.89.9
单播¶
一对一通信
组播¶
一对多通信,收发双方需要位于同一个组播组。
多播¶
多播地址由皆为一的字节起始,亦即:它们的前置为FF00::/8。其第二个字节的最后四个比特用以标明"范畴"。 一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播地址中的最低112位会组成多播组群标识符,不过因为传统方法是从MAC地址产生,故只有组群标识符中的最低32位有使用。定义过的组群标识符有用于所有节点的多播地址0x1和用于所有路由器的0x2。 另一个多播组群的地址为"solicited-node多播地址",是由前置FF02::1:FF00:0/104和剩余的组群标识符(最低24位)所组成。这些地址允许经由邻居发现协议(NDP,Neighbor Discovery Protocol)来解译链接层地址,因而不用干扰到在区网内的所有节点。
特殊地址¶
稍后补充。。。
头部¶
稍后补充。。。
路由¶
路由负责将IP分组在IP子网间转发。
路由表¶
- 目的网络地址(Network ID)
- 子网掩码(subnet mask),用来判断IP所属网络
- 下一跳地址/接口(Next hop / interface),报文转发的物理出口
默认网关¶
路由表的一项,指向默认出口。
例如:当转发查表失败,则报文经过默认出口转发出去。
路由匹配¶
根据最长前缀匹配,即从子网掩码最大的开始匹配
如果匹配到,则转发
如果匹配不到,则使用默认路由转发
参考¶
wiki-CIDR0
wik-路由
Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树