gavanwanggw

导航

网络协议系列之三:IP

前言

这篇博客主要对IP协议中一些基础知识点加以总结,并将书中一些晦涩难懂的部分去除了。IP地址协议是网络层中最重要的协议,IP地址协议能够对因特网上的全部设备进行唯一标识。也正由于有了IP协议,我们的计算机才干实现与全球随意一台设备进行通信。

同一时候这也是网络层存在的意义,我将对部分的内容分为两个部分加以总结:一、首先对IP协议部分的知识加以总结。二、对网络层其它的协议加以总结,包含ICMP、IGMP、ARP等协议。


IP协议基础篇


地址空间

这个概念非常好理解,假设一个协议用a位(a个bit)表示,那么其地址空间就是2^a。

我们要讲的IPv4地址协议(简称IP协议)使用32位表示一个地址,所以其地址空间是2^32(超过40亿)

记法

在IP协议中,有三种记法表示一个IP地址:

  • 基2(二进制表示法)
  • 基16(16进制表示法)
  • 基256(10进制表示法)

基256:也叫点分十进制记法。也是最经常使用的记法。在每8个字节用隔开,共同拥有4个十进制数
基16:一个16进制等于4位二进制数。而一个IP地址有32个二进制数,所以使用基16进制表示的时候有8个二进制数
基2:採用01串的方式表示

分类编址


认识编址

分类编址是最早出现的编址体系。在分类编址中一共分为五类:A、B、C、D、E。每一类占用地址空间的一部分。当中A类地址有2^31个地址,占50%,B类有2^30个地址,占25%。C类有2^29个地址,占12.5%,D类和E类各有2^28个地址。各占6.25%。那么怎样辨别这5类地址呢?
假设是使用点分十进制记法,仅仅要看左边第一个数。假设小于128,那么就是A类,假设小于192,那么就是B类。假设小于224,那么就是C类,假设小于240,那么就是D类,假设不在上面的范围,那么就是E类。

辨认IP地址类别

举例说明

一个IP地址包含了网络号和主机号(网络号标识了设备处于哪个网络下,主机号标识了该网络下的哪台设备)。对于上述A、B、C类地址,分别用前一个字节、两个字节、三个字节表示网络号,后面的字节表示主机号。

D类和E类地址不划分网络号和主机号。由于D类用来多播、E类地址被设计为保留地址。这样的编址方法也称为两级编址方法,假设某一类地址中使用了n位表示网络号。那么便有32-n位表示主机号。在A、B、C类地址中,n的值各自等于8、16、24。那么了解了这点后,我们能够依据随意一个IP地址得到至少三个信息:地址数首地址末地址


假设给定了n,那么
1)地址数N=2^32-n
2)首地址:保持最左边n位不变,并将右边32-n位置为0
3)末地址:保持最左边n位不变,并将右边32-n位置为1

比如对于IP地址73.22.17.25。其地址数N=2^32-8=2^24。首地址为73.0.0.0,末地址为73.255.255.255

通过IP地址,我们与另外一台计算机的通信须要到达其所在的网络,才找到该网络下的特定的主机。随着计算机设备的增多,32位的IP地址差点儿被分配完成。后来出现把一个网络划分为一个个子网络的思想,这样每一个子网都有自己的网络地址(被划分的网络是拥有原来A类或者B类地址的网络)。那么问题来了,划分的子网的网络地址怎么表示呢?这里使用了子网掩码来解决问题。子网掩码是左边n位全为1。右边32-n位为0的IP地址,那么把原IP地址与子网掩码进行与运算就能够得到子网地址

无分类编址

简单介绍

无分类编址使用可变长度的地址块,这些地址块不属于不论什么类,只是规定每一个地址块中的地址数必须是2的乘方。要注意的是在无分类编址中,使用的仍然是两级编址。使用左边n位(也叫前缀长度)标识网络,右边32-n位(也叫后缀长度)标识主机号。

前缀长度能够在1~32之间。同一时候,在无分类编址中会使用斜线记法来表示IP地址,如230.8.24.56/12。

两级编址

通过斜线记法表示的地址。我们能够得到该地址块表示的地址数、首地址和末地址。

这点和分类编址是一样的。能够发现。当n各自等于8、16和24的时候刚好就是分类编址的情况,所以分类编址是无分类编址的一个特例。在无分类编址中,计算上述三个信息有一点点出入。看计算方法:

1)地址数N=2^32-n
2)首地址= (随意地址) and (子网掩码)
3)末地址= (随意地址) OR (NOT (子网掩码))

比如对于17.63.110.114/24。子网掩码为255.255.255.0。


地址数N=2^32-24=16。
地址: 17.63.110.114
子网掩码:255.255.255.0
首地址: 17.63.110.0

地址: 17.63.110.114
NOT 子网掩码: 0.0.0.255
末地址: 17.63.110.255

子网划分

在无分类编址中,最常见的应用就是子网划分了。

子网划分就是把ISP分配的一个地址块进一步划分为若干子网,每一个子网还能够继续划分为子网的子网,没有不论什么限制。假设有一个地址块的地址数是N,前缀长度为n。要划分为s个子网,每一个子网的前缀长度是n2。每一个子网的可用地址数是N2。

那么有例如以下计算公式:

n2 = n + log2(N/N2)

比方某组织的可用地址块为130.34.12.64/26,须要划分为4个子网,每一个子网的地址数同样,则每一个子网的信息能够例如以下求得:

1) 可用的地址数N=2^32-26=64
2) 首地址=130.34.12.64/26,末地址=130.34.12.127/26
3) 每一个子网的地址数N2=64/4=16
4) n2 = 26 + log2(64/16) = 28

特殊地址

1)全0地址
即0.0.0.0/32,该地址被保留用于主机发送一个分组而又不知道自己地址的情况下
2)全1地址
即255.255.255.255/32。被设计为当前网络的受限广播地址,一个主机假设想把报文发给网络上的全部主机,就能够把这个地址作为目的地址

IP协议高级篇


IP协议在TCP/IP模型中的位置

在这部分的内容中。将对IP报文的格式做一个具体的了解,同一时候为学习TCP传输层做铺垫。

有一点非常重要,IP协议是不可靠的无连接数据报协议————一种尽最大努力交付的服务。就是说IP协议不保证数据的完整性和安全性,数据报有可能丢失、乱序、损坏或者延迟到达

IP数据报

网络层的分组称为数据报,。也能够简单理解为网络中传输的数据
下图是一个完整的IP数据报格式:

IP数据报

IP数据报由两部分组成:首部和数据。首部长度能够是20~60字节。以下对IP数据报中的各个字段加以说明:

版本号(VER):这个4位版本号定义了IP协议的版本号,眼下的版本号是4(IPv4)
首部长度(HLEN):定义了IP数据报首部的长度,以4字节的字为单位计算,若为20字节,则值为5
服务类型(TOS):指明了怎样处理数据报,了解就可以
总长度:定义了包含首部在内的数据报总长度
标识:分片时实用
标志:分片时实用
分片偏移:分片时实用
生存时间(TTL):指明数据报的生存时间
协议:定义了使用IP层服务的高层协议
源地址:发送主机的IP地址
目的地址:接收主机的IP地址

IP分片

所谓IP分片就是把数据量过大的数据拆分成较小的数据报进行传输,这里涉及一个概念:MTU(最大传输单元),这个字段的意思就是拆分后的数据报的长度不能超过这个值,对于以太网来说,这个字段的值是1500字节。

IP分片要改动IP数据报中的标志、分片偏移和总长度的值,其它的不变。

注意:分片的仅仅是数据报中的数据,首部并不会被分片

以下我们来看看分片的时候。上述三个字段(总长度须要依据分片的数据长度确定,再加上首部长度)发生了什么变化:

标识

此字段尽管没有改变,每一个分片要复制这个字段的值。

这个字段与源主机的IP唯一确定一个数据报。当目的主机收到全部分片后,能够依据这个标识重装数据报,由于目的主机觉得标识号同样的是属于同一个数据报的。

标志

这是一个3位的字段,第1位保留不用。第2位称为不分片位,就是说当其值是1的时候,不会对数据报进行分片。

第3位是还有分片位,就是说假设其值是1就说明这个分片后面还有分片,假设是0,则说明是最后一个分片或者第一个分片(由于当仅仅有一个分片的时候,第一个也是最后一个)

分片偏移

这个字段表示的是分片在正个数据报中的相对位置。以8字节为单位。通过这个字段,目的主机能够依据分片偏移的值从第一个分片開始组装到最后一个分片,直至形成一个完整的IP数据报。那么目的主机是怎样重装分片的呢?
1) 分片偏移为0的分片是第一个分片
2) 把第一个分片的长度除以8得到第二个分片的偏移值,于是目的主机从接收到的分片中寻找该分片偏移值的分片,组装第二个分片
3) 把第一个分片和第二个分片的长度除以8得到第三个分片的偏移值,于是目的主机从接收到的分片中找到该分片,这样就把前三个分片组装好了
4) 继续以上过程,直到最后的一个分片的还有分片的值为0

选项

选项字段主要用于网络測试与排错,前面提到IP数据报首部的长度是20字节~60字节。当中20字节是固定部分,剩余的字节数是选项部分多出来的。
选项部分的格式可分为:一个字节的类型字段、一个字节的长度字段以及可变长度的值的字段。

当中选项的类型能够分为六种:无操作、选项结束、记录路由、严格的源路由、不严格的源路由、时间戳。前两种是单字节的。后四种是多字节的

校验和

绝大多数TCP/IP协议採用差错控制的方法称为校验和。

校验和能够防止分组在传输期间出现损坏。以下说一下IP分组中的校验和:
首先把校验和字段置为0。然后把整个首部划分为16位的段,再将各段相加,把结果取反码插入到校验和字段中。要注意的是,IP分组中校验和仅仅覆盖首部,不包含数据。这个字段了解就可以

posted on 2017-08-01 16:18  gavanwanggw  阅读(531)  评论(0编辑  收藏  举报