概述
一、 IPv4协议报头格式
0 4 8 16 19 24 32
版本 Version | IP头长度 IHL | 服务类型(TOS) Type of Service | 总长度 Total Length | ||
标识符号 Identification | 标记 Flags | 分段偏移量 Fragment Offset | |||
存活时间 Time to Live | 协议 Protocol | 包头校验和 Header Checksum | |||
源IP地址 Source Address | |||||
目的IP地址 Destination Address | |||||
IP选项(若有的话) Options | 填充 Padding |
说明:
Version : 4 bits,显示当前正在运行的IP版本信息。当前为4
IHL : 4 bits,标明了以32比特为单位的消息中数据报报头的长度,这是所有报头的总长度。注意:它的最小值为5
Type of Service : 8 bits,标明了一个特定的上层协议所分配的重要等级。
TOS字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。每TOS值最多只能有一个为1.
如下所示:
协议 TOS 值
TELNET/RLOGIN (1) 1000 (minimize delay)
FTP
Control 1000 (minimize delay)
Data (2) 0100 (maximize throughput)
TFTP 1000 (minimize delay)
SMTP (3)
Command phase 1000 (minimize delay)
DATA phase 0100 (maximize throughput)
Domain Name Service
UDP Query 1000 (minimize delay)
TCP Query 0000
Zone Transfer 0100 (maximize throughput)
NNTP 0001 (minimize monetary cost)
ICMP
Errors 0000
Requests 0000 (4)
Responses <same as request> (4)
Any IGP 0010 (maximize reliability)
EGP 0000
SNMP 0010 (maximize reliability)
BOOTP 0000
Total Length: 16 bits,标明整个分组的长度,以字节为单位。总长度减去IHL就是数据有效载荷的长度。理论上最大长度可以为65535,但报文经过数据链路层时很可能被分片。
Identification: 16 bits,包含一个整数,用来标识当前的数据报。这是一个序列号。
Flag: 3 bits,实现不同的控制功能:
Bit 0 : 保留,必须置零。
Bit 1: (DF) 为0 表示可以对分组进行分片
为1 表示不可以对分组进行分片
Bit 2: (MF) 为0 表示该数据段是本分组中最后的一个数据分段
为1 表示后面还有数据分段
Fragment Offset: 13 bits。指示分段在数据包中的位置,用于重组数据分段。这个字段允许标记字段终止在16 Bit的边界
TTL : 8 bits,指示分组在网络传输中的允许保持的时间,以秒为单位。当该计时器为0时,数据报将被丢弃。
Protocol : 8 bits,指明了在IP处理过程结束后,哪一个上层协议将接收这些数据。
Header Checksum : 16 bits,用于确保IP头的完整性。
Source Address : 32 bits,指明了发送节点的IP地址。
Destination Address : 32 bits,指明了接收节点的IP地址。
Options :长度可变的字段,让IP支持不同的功能特性。比如安全性。
该字段可能是零,或者更多的选项。该字段有2中使用情形:
1:用单一的一个字节表示选项类型
2:一个选项类型字节,一个选项长度字节,一个数据长度字节
Padding:这个字段以额外的0来填充IP报头,以确保其长度为32 bit的倍数。
其后就是数据字段。
二、IPv4分组的地址
1. IP地址和MAC地址的区别
1. MAC地址是每块网卡的硬件地址,用于数据链路层的帧传递地址;IP地址是网络层地址(也称逻辑地址),用于路由器寻址
2. IP地址标识的是一台主机或路由器与网络的接口,而MAC地址唯一地标识一台主机
3. 网桥,Ethernet交换机属于数据链路层设备,使用MAC地址,不属于网络层设备,所以不分配IP
2. IP地址的分配概念
IP地址的分配可以分下面3种情况:
1. 为每一个网络接口分配一个IP地址
一台计算机连入网络,需分配一个IP地址,与MAC地址一一对应,且在Internet中唯一的
2. 为多归属主机的每一个网络接口分配响应的IP地址
路由器通过多个网卡连接到多个网络时,需为每个网卡分配一个IP地址
3. 可以为一个网络接口分配多个IP地址
总结来说:
1、连接到Internet的每一个主机(计算机或路由器)至少有一个IP地址
2、IP地址是分配给网络接口的
3、多归属主机可以有多个IP地址,一个网络接口也可以分配多个IP地址
3. IP的点分十进制表示方法
IPv4的地址长度为32位,点分十进制表示通常采用 x. x. x. x的格式,每个x为8位。(点分十进制从字面上理解,用点分隔,每个字段用十进制表示)
IP地址的分类有5中分类:A类,B类,C类,D类和E类地址
网络号:用于识别主机所在的网络
主机号:用于识别该网络中的主机
A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同
(tip:网络号加粗表示)
A类地址
(1)A类地址网络号第一位固定为0,其它7位可以分配,主机号长度为24位
(2)网络号分配的数量为2^7 = 128,地址范围为:1.0.0.0—127.255.255.255
(3)10.0.0.0-10.255.255.255是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址,路由器接收到私有地址,不会向Internet转发该分组,私有地址与NAT相关)
(4)127.0.0.0-127.255.255.255是保留地址,用做循环测试用的
(5)0.0.0.0—0.255.255.255也保留用作特殊用途
(6)因此网络号可分配的只有125个,每个网络段的主机号可以分配的只有 2^24-2=16777214个(主机号全0和主机号全1保留)
B类地址
(1)B类地址网络号第1,2位固定为10,其它14位可以分配,主机号长度为16位
(2)地址范围为:128.0.0.0—191.255.255.255
(3)172.16.0.0—172.31.255.255是私有地址
(4)169.254.0.0—169.254.255.255是保留地址(如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP)
(5)每个网络段可分配的主机号为2^16 - 2 = 65534(主机号全0和主机号全1保留)
C类地址
(1)C类地址网络号前3位固定为110,其它21位可以分配,主机号长度为8位
(2)C类地址范围:192.0.0.0—223.255.255.255
(3)192.168.0.0—192.168.255.255是私有地址
(4)网络号可分配的块数为2^21 = 2097152,没块网络号可分配的主机号数为2^8-2 = 254(主机号全0和主机号全1保留)
D类地址
D类IP地址不标志网络,前4位固定为1110,地址范围为:224.0.0.0—239.255.255.255,用作特殊用途,如多播地址
E类地址
E类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1111。E类地址范围:240.0.0.0—255.255.255.255,用于某些实验和将来使用
总结上述的规律
1. ABC三类地址的主机号全0和全1都保留,主机号全1为子网广播地址,主机号全0为子网网络地址(一个网段中第一个IP地址为网络地址)
2. A类地址的第1块网络号和第2块网络号要保留
ABC三类地址中的特殊IP地址
(1)直接广播地址
如果主机号全1,例如191.1.255.255,那么这个地址为直接广播地址
路由器将这个分组以广播的形式发送到网络号位191.1.x.x的全部主机
(2)受限广播地址
网络号与主机号的32位全为1(255.255.255.255)为受限广播地址
用来将一个分组以广播方式发送给本网的所有主机
(3)“这个网络上的特定主机”地址
网络号是全0 (如0.0.0.25) 的地址是这个网络号的特定主机地址
路由器接到这样的分组,不向外转发,而是直接交付给本网络中主机号为25的主机
(4)回送地址
A类地址中127.0.0.0是回送地址,它是一个保留地址
三、IPv4地址的子网划分
子网划分的思想:借用主机号的一部分作为子网的子网号,划分出更多的子网IP地址,对于外网来说这些子网仍然像一个网络一样,这对于路由器的寻址没有影响
1. 子网地址结构
1. 标准的ABC类IP地址是两级结构:网络号—主机号,而划分子网后,IP地址的结构为三级结构:网络号—子网号—主机号
2. 同一个子网的主机,网络号和子网号必须相同
3. 子网之间的距离必须很近,例如一个公司或者校园内
2. 子网掩码
引入子网后,如何从IP地址中提取出子网号?子网掩码就是用来解决这个问题的
子网掩码的作用:从一个IP地址中提取出子网号
子网掩码的表示:网络号和子网号全改为1,主机号全改为0
实例:一个B类IP地址的子网划分
该B类IP地址190.1.2.26,划分出64个子网
1. 借用原16为主机号的6位作为子网号,剩余10位为主机号
2. 根据子网掩码的格式,得出子网掩码为:255.255.252.0,或表示成190.1.2.26/22(”/22“表示第22位开始为主机号)
3. 子网的规划和地址划分的方法
例:一个校园网要对一个B类地址(156.26.0.0)进行子网划分。该校园网有近210个局域网组成。
由于210个局域网最接近2^8=256,所以可行的方案是从主机号借8位来作为子网号,这样的子网的掩码为:255.255.255.0 或 156.26.0.0/22(”/22“表示第22位开始为主机号)
以上子网划分结果为:
子网1:156.26.1.1~156.26.1.254
子网2:156.26.2.1~156.26.2.254
……
子网254:156.26.254.1~156.26.254.254
至于子网0:156.26.0.1~156.26.0.254和子网254:156.26.255.1~156.26.255.254,即子网号是否能够为全0或者全1,值得商榷!
由于主机号不能全为1或者全为0,每个子网的主机号有254个
子网长度的确定,应考虑两个因素:子网数与每个子网中主机与路由器数。子网数要考虑留有一定余量为原则
4. 可变长度的子网掩码划分方法
用一个例子来说明:
某公司申请一个C类202.60.31.0的IP地址,该公司有100名员工在销售部,50名在财务部,50名在设计部。要求为销售部门、财务部门、设计部门分别组建子网
分析:
三个部门是三个子网,我们很容易想到,只需要借出2位来作为子网号就行。但是借了2位后,主机号只剩下6位,则每一个子网的最大主机号为2^6 = 64个,小于销售部门的100个主机,所以行不通!
这时,可以采用可变长度的子网掩码划分方法:
(1)销售部100台主机,所以主机号至少为7位,则子网号为1位,此时子网掩码:255.255.255.128(11111111.11111111.11111111.1000000)或202.60.31.0/25(第25位开始为主机号)
子网位为0:202.60.31.1(0 000 0001)~ 202.60.31.126(0 111 1110) (作为销售部子网)
子网位为1: 202.60.31.129(1 000 0001)~ 202.60.31.254(1 111 1110)
(2)对子网位为1的情况,再划分出两个子网给财务部门和设计部门,剩下的两个部门只需要6个主机号,所以可以用2位作为子网号,子网掩码为255.255.255.192(11111111.11111111.11111111.1100000)或202.60.31.0/26(第26位开始为主机号)
子网位为10:202.60.31.129(10 00 0001)~ 202.60.31.190 (10 11 1110)(作为财务部子网)
子网位为11:202.60.31.193(11 00 0001)~ 202.60.31.254(11 11 1110)(作为设计部子网)
tips:子网号加粗,主机号全0和全1不能使用
一个问题:
第3点子网的规划和地址划分的方法说到了子网号和主机号不能为全0或者全1,但是第4点可变长度的子网掩码划分方法中,却存在子网号为0或者11的情况,那么子网号到底能不能为全0或者全1呢?
子网号全0或者全1要看网络设备所使用的路由器协议支持不支持,以前的老版的协议都是不支持,新版本可以支持,老的书籍或者资料都不用全0和全1子网,新的允许用
四、CIDR(无类别域间路由)
1. CIDR的概念和格式
其实在上述博文中,已经不经意间提到了CIDR,例如156.26.0.0/16
CIDR其实讲得是IP地址的格式问题,标准的IP地址的点分十进制是网络号—主机号的二层结构,而CIDR用区别于传统标准分类的IP地址与划分子网的概念的“网络前缀(network -prefix)”,用”<网络前缀>/<主机号>“代替网络号—主机号的二层结构,形成新的无分类二层地址结构
<网络前缀>/<主机号>
<网络前缀>/<主机号>这种格式为:”斜线记法“。如:200.16.23.0/20表前20位为网络前缀,后12位为主机号
同标准的分类IP地址一样,主机号全0的网络地址和全1的广播地址不分配给主机
2. CIDR的应用
例如:一个校园网获得200.24.16.0/20的地址块,希望将它划分为8个等长的较小的地址块
五、网络地址转换NAT
NAT的作用有两个:
1. 解决网络地址短缺,支持IP地址复用
2. 网络安全
例如在企业内部,NAT和代理服务器、防火墙结合使用,采用一个内部专用IP和一个全局IP一对一的静态映射,达到隐藏内部网络地址的目的
IP地址复用原理
NAT技术解决IP地址短缺,主要用于ISP,ADSL,有线电视和无线移动接入的动态IP地址分配
原理:
例如ISP有1000个全局IP地址,但是它有5000个使用专网内部专用IP的用户。
ISP在具有NAT功能的路由器中保持一个IP地址池,管理着多个全局IP地址。凡是需要访问外部Internet的用户,首先想NAT路由器申请,由NAT临时分配一个全局IP地址给用户;用户访问结束后,NAT路由器收回IP地址,供其他用户使用。
之前提到过一个私有地址,所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址,路由器接收到私有地址,不会向Internet转发该分组,那么主机该如何通过私有地址和Internet进行通信?
NAT就是私有地址和全局地址转换的功能!
解决全局IP地址不够用:连端口号一起转换!
NAT的有动态NAT和静态NAT两种
“静态NAT”:一对一,配置一个内部专用IP地址对应一个公用IP地址。
“动态NAT”:多对多,多个专业IP地址对应一个或几个全局IP地址。可实现IP地址的重用节约IP地址。如:ISP有1000个全局地址,但它有5000个使用专用内部专网IP地址的用户。
NAT的工作原理
私有地址为10.0.1.1的主机如何访问地址为135.2.1.1的web服务器?
(1)产生一个源地址为10.0.1.1,端口为3342,目的地址为135.2.1.1,端口号为80的ip分组,转发到NAT功能的路由器
(2)NAT路由器将私有地址转换成全局IP地址202.0.1.1,产生一个源地址为202.0.1.1,端口为5001,目的地址为135.2.1.1,端口号为80的ip分组
(3)地址为135.2.1.1,端口号为80的web服务器接收到该IP分组后,,返回源地址为135.2.1.1,端口号为80,目的地址为202.0.1.1,端口为5001为80的ip分组
(4)NAT路由器将全局IP地址转换成私有地址,产生源地址为135.2.1.1,端口号为80,目的地址为10.0.1.1,端口为3342的ip分组,主机10.0.1.1接受
NAT的潜在问题
由于NAT(NAPT)都依赖于自己的转换表,所以会有一下问题:
1. 无法从NAT外部向内部服务器建立连接
2. 转换表的生成和转换操作都会产生一定的开销
3. 通信过程中一旦NAT发生异常需要重新启动时,所有的TCP连接都会被重置
4. 即便备置两台NAT做容灾备份,TCP连接还是会被断开
六、IPv6协议
1. IPv6地址的表示
IPv6地址采用”冒号十六进制表示法“,将128位地址按每16位划分为一个位段,每个位段转换为一个4位的十六进制数
例如:
二进制:
0010000111011010000000000000000000000000000000000000000000000000
0000001010101010000000000000111111111110000010001001110001011010
1. 冒号十六进制表示法:
21DA : 0000 : 0000 : 0000 : 02AA : 000F : FE08 : 9C5A
2. 如果某段存在几位都是0的情况,可以使用零压缩法压缩:
零压缩法:00D3(D3),02AA(2AA),000A(A),0000(0),但是AB08不能压缩为AB8
21DA : 0 : 0 : 0: 2AA : F : FE08 : 9C5A
3. 如果存在几个连续位段都是0,可以用”双冒号表示法“
21DA : :2AA : F : FE08 : 9C5A
用”双冒号表示法“表示的一个问题:如何确定冒号省略的段数?
8 - 现有段数 = 冒号省略的段数
2. IPv6的前缀
在IPv4中,子网掩码用来表示网络和子网地址长度。用前缀长度来区分子网号和主机号。而 IPv6不支持子网掩码,只支持前缀长度表示法,用“地址/前缀长度”表示
64位前缀是一个子网前缀,少于64位的前缀是一个路由前缀,或是一个地址范围。
例如:
21DA:D3::/48 是一个路由前缀
21DA:D3:0:2:2F3B::/64是一个子网前缀
3. IPv6的结构
版本
意义和IPv4相同,值为6表示使用Ipv6协议
流量类型
表示IPv6分组的类型或优先级,类似IPv4的服务类型字段
流标记
表示分组属于源节点和目标节点之间的一个特定分组序列
载荷长度
载荷长度表示有效载荷的长度,包括扩展报头和高层PDU
下一个报头
表示若存在扩展报头,“下一个报头”值表示下一个扩展报头的类型
跳步限制
与IPv4的TTL相似
源地址和目的地址
发送主机的地址和要发送的目标主机地址
七、IPv4和IPv6共存——隧道技术
隧道技术指的是IPv6分组进入IPv4网络时,将IPv6分组封装成IPv4分组,整个IPv6分组变成IPv4的数据部分。当IPv4分组离开IPv4网络时,再将其数据部分交给主机IPv6协议,这就像在IPv4网络中打通了一个隧道来传输IPv6。
隧道配置
隧道配置分为路由器-路由器,路由器-主机或主机-路由器,主机-主机三种情况,以及手动配置的隧道与自动配置的隧道两种类型
(1)路由器-路由器隧道
(2)路由器-主机或主机-路由器
(3)主机-主机
最后
以上就是健忘手套为你收集整理的ipv4协议详解的全部内容,希望文章能够帮你解决ipv4协议详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复