1、IP协议
1.1 概念
IP协议用于连接多个分组交换网,他提供在具有固定地址长度的主机之间传送数据报,以及根据各个数据包大小的不同,在需要时进行分段和重组大数据报的功能。IP协议仅限于将数据从源端传送到目的端,而不提供可靠的传输服务。在传送出错时,IP协议通过互联网控制消息协议(ICMP, Internet Control Message Protocol)报告。
1.2 功能
IP协议最基本的两个功能:寻址和分段
寻址:IP协议根据数据报头中所包含的目的地址将数据报传输到目的端,传送过程中对道路的选择称为路由
分段:当一些网络只能传送小数据报时,IP协议将数据报分段并在报头里面注明。数据包也可以被标记为“不可分段”,如果一个数据报被如此标记,那么在任何情况下都不准对他进行分段,如果因此到不了目的地,那么数据包就会在中途被丢弃。
1.3 IP协议数据报的头:
1.3.1 IP协议头部格式
- 版本:记录数据报属于哪个版本的协议,例如可以用此区分出IPv4和IPv6,这个字段可以使得在不同版本间传递数据变得可行。
-
头部长:标明IP协议报头有多长,其单位是32bit即4个字节,其最小值为5(5 x 4 = 20 byte,这个长度是除去可选项的长度),从上图中看出,其规定头部长为 4 bit,所以最大值为 15, 15 x 4 = 60 byte 可以算出可选项长度最大为40个字节(即 60 byte - 20 byte = 40 byte)
-
服务类型:用来指示当数据报在一个特定网络中传输时对实际服务质量的要求是什么,服务类型字段从左到右由一个3位的优先顺序字段、三个标志位(D、T、R)和两个保留位组成。优先顺序字段用于标志该数据报的优先级,D、T、R三个标志位分别代表是否对低延迟(Delay)、高吞吐量(Throughput)、高可靠性(Reliability)有要求,不过实际上,现在的路由器都忽略服务类型这个字段。
-
总长:是指整个数据报的长度,包括头部和数据部分,单位是 1 个字节,从图上可以看出,规定总长位数为16bit,能存储最大数据为65535个字节的数据报。如长的数据报对大部分主机和网络来说是不现实的。所有主机必须能够接收长达576个字节的数据报(不管他们是以整个数据报到达还是以分片到达),源端主机在确认目的地址能够接收大数据报的情况下才发送大于576字节的数据报。
-
标识:该标识由发送者设定值,主要为了目的主机组装分段时判断新到的报文分段属于哪个分组,所有属于同一分组的报文分段都包含相同的标识。
-
标记:长度为3bit,从前到后分别是保留位、不可分段位(DF, Don’t Fragment)和分段位(MF,More Fragment)。
保留为始终为 0
DF位为 1 时表示该分组不能被分段
MF位为 1 时表示后面还有该分组的分段,在有分段的情况下,除了最后一个分段该位为 0 外,其他 分段该位都为 1 -
分段偏移:标记该分段在数据报的位置,单位是8个字节,第一个分段的偏移是 0
-
生命期:用来限制分组生命周期的计数器,单位是秒,该字段长度为 8bit ,说明存储的最大数值是 255 ,在实际的应用过程中是以经过的节点计数的,每经过一个节点计数减 1 ,计数减到 0 时,分组要被丢弃。
-
协议:指明IP层所封装的上层协议类型,如ICMP -> 1、IGMP -> 2 、TCP -> 6、UDP -> 17、EIGRP -> 88 、OSPF -> 89等
-
头部效验和:只对头部进行效验,由于头部的一些字段始终在变化(例如:生命期字段),头部效验和在每个节点都得重新进行计算。
-
源地址:发送报文段的IP地址
-
目的地址:接收报文段的IP地址
-
可选项:可选项对于主机和网关的IP模块来说都是必须实现的,可选是指它们在特定数据报中是否出现是可选的,而不是指他们的实现,每个可选项都以 1 个字节表明它的类型。其长度从1~40个字节之间不固定,主要取决于设置的可选项数目,最终数据长度不够32位的倍数要填充 0 补齐,主要是为了让报头长度是32位的整数倍,一般正常的IP报文头部都是没有可选项的。
目前已定义的可选项有 5 个,分别是安全性(指明数据报的机密程度)、严格路由选择(后面给出所规定的完全路由)、宽松路由选择(后面给出必须要经过的路由)、记录路由(记录下所经路由器附上其IP地址)、时间戳(要求所经路由器都附上其IP地址和时间标记)。
1.3.2 IP协议头部数据
下面是我用抓包工具抓到的一个TCP断开的四次握手,其他的咱不管,先看第一次发送FIN类型数据包的IP报头部分
最下面的是数据,去掉以前面太网首部的14个字节开始是IP数据报头部分,
先单独把IP报头数据粘贴下来
//字节为单位 Hex+ASCII方式显示
45 00 00 28 a2 ad 40 00 39 06 0f 71 b7 83 87 91 0a 16 46 87
//二进制 bit流显示为
01000101 00000000 00000000 00101000
10100010 10101101 01000000 00000000
00111001 00000110 00001111 01110001
10110111 10000011 10000111 10010001
00001010 00010110 01000110 10000111
下面我们对着上面的格式来解析下:
字段 | 位置 | 值 | 含义 |
---|---|---|---|
版本 | 0-3 | 0100 | 属于IPv4版本 |
头部长 | 4-7 | 0101 | 表示头部长度为20个字节(5 x 4 byte = 20 byte) |
服务类型 | 8-31 | 00000000 | … |
总长 | 32-47 | 00000000 00101000 | IP数据报总长(不包括以太网首部) 为 40 个字节(40 x 1 byte = 40 byte) |
标识 | 48 - 50 | 010 | 保留位为 0 , 不可分段数据报 |
分段偏移 | 51 - 63 | 00000 00000000 | 数据偏移为0,数据报属于分组的第一个分段(其实这个数据包是不允许分段的,这里只是一个理论解释) |
生命期 | 64 - 71 | 00111001 | 生命期值是57,理论解释是还可以经过57个节点 |
协议 | 72 - 79 | 00000110 | 值为6,表示上层为TCP协议 |
头部效验和 | 80 - 95 | 00001111 01110001 | … |
源地址 | 96 - 127 | 10110111 10000011 10000111 10010001 | 因为IP地址在网络中传播是用网络排序(大端)表示,所以直接按顺序解析,16进制表示:b7.83.87.91,转换成十进制表示为:183.131.135.145 |
目的地址 | 128 - 159 | 00001010 00010110 01000110 10000111 | 十进制点形式表示为:10.22.70.135 |
可选项 | ~ | ~ | 没有可选项 |
1.4 IP地址分类
1.4.1 IP地址分类
IP地址包含网络号和主机号两部分,网络号代表一个子网络,主机号则表示该子网络下某一台具体的主机标号,IP地址根据功能和用途的不同可以划分为五类。
A 类地址:1 . 0 . 0 . 0 ~ 126 . 255 . 255 . 255,前 8 位为网络号,后 24 位为主机号
B 类地址:128 . 0 . 0 .0 ~ 191 . 255 . 255 . 255,前16位为主机号,后16位为主机号
C 类地址:192 . 0 . 0 . 0 ~ 223 . 255 . 255 . 255,前24位为网络号,后8位为主机号
D 类地址:224 . 0 . 0 .0 ~ 239 . 255 . 255 . 255
E 类地址:240 . 0 . 0 . 0 ~ 254 . 255 . 255 . 255
A、B、C三类地址是根据网络规模大小来分配给用户的,例如A类地址有24位的主机号,同一个网络下,一个 A 类地址可以容纳 2^24 - 2 = 16777213 台主机,但是A类地址一共只能分配 126 个网络(这里只是做一个理论上的运算,并不代表实际分配情况),所以这类地址一般分配给那些为数不多的大网络。D类地址用来多播,E类地址做保留地址。
另外还有一些特殊地址:
①. 例如主机号全为 1 是该网络的广播地址(例如在一个C类地址的网络中,192. 192 . 192 . 255 , 网络号是前面三个字节, 主机号是后面的一个字节,8位全为1,那么这个地址则是 网络号位 192.192.192.0这个网络的广播地址)。其中 255 . 255 . 255 . 255也是主机所在网络的广播地址;
②. 主机号全为 0 则是该网络的网络地址;
③. 127 . 0 . 0 . 0 ~ 127 . 255 . 255 . 255是主机会送地址,通常用来做网络测试,调试主机与路由是否连接畅通;
④. 其中 10 . 0 . 0 . 0 ~ 10 . 255 . 255 . 255、172 . 16 . 0 . 0 ~ 172 . 31 . 255 . 255、192 . 168 . 0 . 0 ~ 192 . 168 . 255 . 255保留给内部网络使用。
1.4.2 子网掩码、超网
- 子网:
传统的IP地址分类确定是不能在网络内部使用路由,这样对于较大的网络,例如一个A类网络,由于主机数太多而变得难以管理,为此引入了子网掩码以从一个大网络上划分成一些小网络。子网掩码由一系列 0 和 1 构成,通过与IP地址做与运算来得到一个IP地址的网络号,
例如
A类地址的子网掩码是 255 . 0 . 0 . 0,
B类地址的子网掩码是 255 . 255 . 0 . 0,
C类地址的子网掩码是 255 . 255 . 255 . 0。
要是想将一个B类地址(例:129 . 145 . 0 . 0)划分为多个小的C类网络,只需要将其子网掩码设为 255 . 255 . 255 . 0就可以了,这样 129 . 145 . 1 . 0和 129 . 145 . 2 . 0就属于不同网络了,因为虽然是B类地址,但是与给定的子网掩码做与运算出来的网络号不一样了,就属于不同网络。像这样通过子网掩码将一个大网络划分成若干个小网络叫做划分子网。 - 超网:
与子网功能相反,将若干个小网络划分成一个大网络。例如一个单位分配到了8个C类(前三个字节为网络号)地址:202 . 120 . 224 . 0 ~ 202 . 120 . 231 . 0,只要将其子网掩码设置为 255 . 255 . 248 . 0 就能使这些C类网络相通。
附加表: 协议编码表
协议号 | 协议类型 | 说明 |
---|---|---|
0 | HOPOPT | IPv6逐跳选项 |
1 | ICMP | Internet控制消息 |
2 | IGMP | Internet组管理 |
3 | GGP | 网关对网关 |
4 | IP | IP中的IP(封装) |
5 | ST | 流 |
6 | TCP | 传输控制 |
7 | CBT | CBT |
8 | EGP | 外部网关协议 |
9 | IGP | 专用内部网关(Cisco将其用于IGRP) |
10 | BBN-RCC-MON | BBN RCC监视 |
11 | NVP-II | 网络语音协议 |
12 | PUP | PUP |
13 | ARGUS | ARGUS |
14 | EMCON | EMCON |
15 | XNET | 跨网调试器 |
16 | CHAOS | Chaos |
17 | UDP | 用户数据报 |
18 | MUX | 多路复用 |
19 | DCN-MEAS | DCN测量子系统 |
20 | HMP | 主机监视 |
21 | PRM | 数据包无线测量 |
22 | XNS-IDP | XEROX NS IDP |
23 | TRUNK-1 | 第1主干 |
24 | TRUNK-2 | 第2主干 |
25 | LEAF-1 | 第1叶 |
26 | LEAF-2 | 第2叶 |
27 | RDP | 可靠数据协议 |
28 | IRTP | Internet可靠事务 |
29 | ISO-TP4 | ISO传输协议第4类 |
30 | NETBLT | 批量数据传输协议 |
31 | MFE-NSP | MFE网络服务协议 |
32 | MERIT-INP | MERIT节点间协议 |
33 | SEP | 顺序交换协议 |
34 | 3PC | 第三方连接协议 |
35 | IDPR | 域间策略路由协议 |
36 | XTP | XTP |
37 | DDP | 数据报传送协议 |
38 | IDPR-CMTP | IDPR控制消息传输协议 |
39 | TP++ | TP++传输协议 |
40 | IL | IL传输协议 |
41 | IPv6 | Ipv6 |
42 | SDRP | 源要求路由协议 |
43 | IPv6-Route | IPv6的路由标头 |
44 | IPv6-Frag | IPv6的片断标头 |
45 | IDRP | 域间路由协议 |
46 | RSVP | 保留协议 |
47 | GRE | 通用路由封装 |
48 | MHRP | 移动主机路由协议 |
49 | BNA | BNA |
50 | ESP | IPv6的封装安全负载 |
51 | AH | IPv6的身份验证标头 |
52 | I-NLSP | 集成网络层安全性TUBA |
53 | SWIPE | 采用加密的IP |
54 | NARP | NBMA地址解析协议 |
55 | MOBILE | IP移动性 |
56 | TLSP | 传输层安全协议,使用Kryptonet密钥管理 |
57 | SKIP | SKIP |
58 | IPv6-ICMP | 用于IPv6的ICMP |
59 | IPv6-NoNxt | 用于IPv6的无下一个标头 |
60 | IPv6-Opts | IPv6的目标选项 |
61 | 主机内部协议 | |
62 | CFTP | CFTP |
63 | 本地网络 | |
64 | SAT-EXPAK | SATNET与后台EXPAK |
65 | KRYPTOLAN | Kryptolan |
66 | RVD | MIT远程虚拟磁盘协议 |
67 | IPPC | Internet luribus数据包核心 |
68 | 分布式文件系统 | |
69 | SAT-MON | SATNET监视 |
70 | VISA | VISA协议 |
71 | IPCV | Internet数据包核心工具 |
72 | CPNX | 计算机协议网络管理 |
73 | CPHB | 计算机协议检测信号 |
74 | WSN | 王安电脑网络 |
75 | PVP | 数据包视频协议 |
76 | BR-SAT-MON | 后台SATNET监视 |
77 | SUN-ND | SUN-ND PROTOCOL-Temporary |
78 | WB-MON | WIDEBAND监视 |
79 | WB-EXPAK | WIDEBAND EXPAK |
80 | ISO-IP | ISO Internet 协议 |
81 | VMTP | VMTP |
82 | SECURE-VMTP | SECURE-VMTP |
83 | VINES | VINES |
84 | TTP | TTP |
85 | NSFNET-IGP | NSFNET-IGP |
86 | DGP | 异类网关协议 |
87 | TCF | TCF |
88 | EIGRP | EIGRP |
89 | OSPFIGP | OSPFIGP |
90 | Sprite-RPC | Sprite RPC协议 |
91 | LARP | 轨迹地址解析协议 |
92 | MTP | 多播传输协议 |
93 | AX.25 | AX.25帧 |
94 | IPIP | IP中的IP封装协议 |
95 | MICP | 移动互联控制协议 |
96 | SCC-SP | 信号通讯安全协议 |
97 | ETHERIP | IP中的以太网封装 |
98 | ENCAP | 封装标头 |
99 | 任意专用加密方案 | |
100 | GMTP | GMTP |
101 | IFMP | Ipsilon流量管理协议 |
102 | PNNI | IP上的PNNI |
103 | PIM | 独立于协议的多播 |
104 | ARIS | ARIS |
105 | SCPS | SCPS |
106 | QNX | QNX |
107 | A/N | 活动网络 |
108 | IPComp | IP负载压缩协议 |
109 | SNP | Sitara网络协议 |
110 | Compaq-Peer | Compaq对等协议 |
111 | IPX-in-IP | IP中的IPX |
112 | VRRP | 虚拟路由器冗余协议 |
113 | PGM | PGM可靠传输协议 |
114 | 任意0跳协议 | |
115 | L2TP | 第二层隧道协议 |
116 | DDX | D-II数据交换(DDX) |
117 | IATP | 交互式代理传输协议 |
118 | STP | 计划传输协议 |
119 | SRP | SpectraLink无线协议 |
120 | UTI | UTI |
121 | SMP | 简单邮件协议 |
122 | SM | SM |
123 | PTP | 性能透明协议 |
124 | ISIS | Over IPv4 |
125 | FIRE | |
126 | CRTP | Combat无线传输协议 |
127 | CRUDP | Combat无线用户数据报 |
128 | SSCOPMCE | |
129 | IPLT | |
130 | SPS | 安全数据包防护 |
131 | PIPE | IP中的专用IP封装 |
132 | SCTP | 流控制传输协议 |
133 | FC | 光纤通道 |
134-254 | 未分配 | |
255 | 保留 |
参考链接:
https://www.iana.org/protocols
https://www.cnblogs.com/zafu/p/10710495.html