跳转至

IP


网际协议(Internet Protocol,缩写:IP)
IP是一种无连接的协议
IP报文尽最大努力交付,可能存在丢包乱序
IP网络分为IPv4IPv6

IP地址

当设备连接网络,设备将被分配一个IP地址,用作标识
通过IP地址,设备可以互相通讯
IP地址有两个主要功能:标识设备网络寻址

IPv4

Internet Protocol version 4,互联网通信协议第四版

IPv4报文结构

ipv4-hdr

字段 长度 说明
版本 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树