IP(Internet Protocol , 互联网协议)主要用于互联网通信。IP协议用于将多个包交换网络连接起来,负责第三层网络层的通信(再往下就是二层链路层mac地址的通信),他是在源地址和目的地址之间传输数据报,还提供对数据大小的重新组装功能,以适应不同网络的要求。

IP协议是TCP/IP协议族的核心协议,最常用的IP协议的版本号是4,即IPV4 ,它的下一个版本就是 IPV6。

IP协议报文格式

1、版本: 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,不久之后IPv6将成为主流。

2、首部长度: 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。

3、区分服务: 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。

4、总长度: 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。 在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

5、标识(identification): 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

6、标志(flag): 占3位,但目前只有2位有意义。

标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。

7、片偏移: 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

8、生存时间: 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。

9、协议: 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

10、首部检验和: 占16位。当收到一份IP数据包后,同样对首部的每个16位进行反码求和。由于接收方在计算过程中包含了发送发在首部中的校验和,如果传输过程中没有差错,计算结果应全为1,不是全1,即检验和错误,那么就丢弃收到的数据报,但不生成差错报文,由上层发现丢失的数据报并进行重传。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

11、IP地址,包含源地址和目的地址,标志这数据的源和目的,关于ip地址,我们下面详细说明。

12、选项: 保留做额外的IP选项.它包含着源站选路和时间戳的一些选项

13、数据: 使用IP传递的实际数据

IP地址

IP地址的编址方式共经过了三个历史阶段。这三个阶段是:

  • 分类的IP地址。最基本的编址方式。
  • 子网的划分。对最基本的编址方式的改进。
  • 构造超网。比较新的无分类编址方法。

IP地址标识着网络中一个系统的位置。每个IP地址都是由两部分组成:网络号和主机号。

  • 网络地址:标识设备所连接的局域网
  • 主机地址:标识这个网络中的设备本身

网络地址和主机地址的划分实际上是由另一组名为网络掩码(或称为子网掩码)的地址信息所决定的.网络掩码也是32位长,被设为1的每一位都标识着IP地址的对应部分是属于网络地址的,而剩下设为0的部分则标识着主机地址

192.168.10.5 --> 11000000 10101000 00001010 00000101
                     |        |        |        |
                     |        |        |        |   --> 192.168.10.  5
                     |        |        |        |           网络     主机
255.255.255.0 -> 11111111 11111111 11111111 00000000

IP地址有两种表示方法:二进制表示、点分十进制表示。每个IP地址为4个字节,每个字节8位,由4个8位域组成,称之为8位体。

11000000  10101000  00000000  00000001
    |         |         |         |
   192       168        0         1
    |_________|_________|_________|
                   |
              192.168.0.1

分类

  1. A类地址( 0.0.0.0 - 127.255.255.255 )以”0”头,网络段长度为8位,其中可变部分的长度为7位;主机段长度为24位。7位的可变网络段可识别2^7=128 (0~127)个网络,其中0和127另有用途,故只有126个可用的A类网络地址。另外,主机位全”0”代表网络本身,全”1”代表网内广播,因此一个A类网络地址可识别的可分配地址有 2^24-2 个。

  2. B类地址( 128.0.0.0 - 191.255.255.255 )以”10”开头,网络段长度为16位,可变部分的长度为14位;主机段长度为16位。14位的可变网络段可以识别的网络数为 2^14 个。另外,主机位全”0”与全”1”功能同A类地址,因此一个B类网络可以分配地址有 2^16-2 个。

  3. C类地址( 192.0.0.0 - 223.255.255.255 )以”110”开头,网络段长度为24位,其中可变部分的长度为21位;主机段长度为8位。21位的可变网络段可以识别的网络数为 2^21 个。可分配的主机地址是 2^8-2 个。

  4. D类地址( 224.0.0.0 - 239.255.255.255 )为组播地址,使用”1110”开头,不分网络段和主机段,有 2^28 个组播地址。用于标识预先定义的一组主机。主机使用组播通信时,可以将组播数据报一次性发送给所有同组的主机。

  5. E类地址( 240.0.0.0 - 255.255.255.255 )是保留地址,用于研究使用。以”1111”开头,不区分网络段和主机段,其中32位全1代表本网络内广播,因此E类地址共有 2^28-1 个。

私有IP地址和特殊IP地址

根据用途和安全性级别的不同,IP地址还可以大致分为两类:公共地址和私有地址。公用地址在Internet中使用,可以在Internet中随意访问。

一个机构网络要连入Internet,必须申请公用IP地址。但是考虑到网络安全和内部实验等特殊情况,在IP地址中专门保留了三个区域作为私有地址,其地址范围如下:

A类:10.0.0.0/8(子网掩码表示) 10.0.0.0-10.255.255.255
B类:172.16.0.0/12 172.16.0.0-172.31.255.255
C类:192.168.0.0/16 192.168.0.0-192.168.255.255

使用保留地址的网络只能在内部进行通信,而不能与其他网络互连。因为本网络中的保留地址同样也可能被其它网络使用,如果进行网络互连,那么寻找路由时就会因为地址的不唯一而出现问题。但是这些使用保留地址的网络可以通过将本网络内的保留地址翻译转换(NAT)成公共地址的方式实现与外部网络的互连。这也是保证网络安全的重要方法之一。

127(即01111111)保留作用本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如:127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送给任何网络。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。

网络号为0,如主机使用BOOTP协议确定本机IP地址时只能作为初始化过程中的源地址出现。

子网划分

1、子网划分的意义

组织不同物理媒体的使用、地址空间的保存、控制网络流量、安全性等因素。

2、子网掩码

RFC950 定义了子网掩码的使用。子网掩码是32位二进制数,其对应网络地址的位都是1,对应主机位置的都是0。

A类网络的默认子网掩码为255.0.0.0,B类网络的默认子网掩码为255.255.0.0,C类网络的默认子网掩码为255.255.255.0

子网掩码告诉路由器,地址哪一部分是网络地址,哪一部分是主机地址,是路由器正确判断任意IP地址是否是本网段的,从而进行正确的路由。这个我们在上面区分主机和网络号的时候已经说过,为了能够形象的看出网络地址和主机地址,我们会使用无类型域间路由(Classless Inter-Domain Routing,CIDR)的形式来表示ip,比如

IP地址192.168.10.5和网络掩码255.255.255.0,在CIDR表示法下就会被写成192.168.10.5/24的形式

代表着前24位都是网络地址,最后一位是主机地址,这样就可以使用一个数据同时看出对应ip和子网掩码,这才是完整的ip。

CIDR(无类别域间路由,Classless Inter-Domain Routing)。CIDR最大的特点是用斜杠(/)来表示子网掩码,指出了子网掩码中有多少位1。这种表示方法我们经常在运营商给我的IP地址中看到,我们经常需要根据这种表示方法算出我们的可用IP地址是哪些。

假如电信给了我们这段地址61.168.1.32/28,我们可用的IP地址是多少呢?这个问题我们先不回答,等后面详细讲解子网划分自后再回头来看。

A类网络默认子网掩码是255.0.0.0,用CIDR表示为/8
B类网络默认子网掩码为255.255.0.0.0,用CIDR表示为/16
C类网络默认子网掩码为255.255.255.0,用CIDR表示为/24

看到这里,大家知道了吧,/8表示占用8位1,即占用一个字节,/16表示占用16位1,即2字节,/24占用24位1,即占用3字节,大家记住这个默认规则,是后面学习子网划分以及以后心算子网划分的重要技巧。 举例,子网掩码255.255.255.128,用CIDR表示是多少呢?首先这是个C类网络地址,前面三个字节都是255,转换成二进制都为1,即11111111.11111111.11111111,即24位1。128转换成二进制位10000000,即1占用了一位。整个子网掩码占用了25位1,所以用CIDR表示为/25,即255.255.255.128(/25),假如IP段为192.168.1.0,用CIDR表示则为192.168.1.0/25。

实例

  1. 192.168.1.0,255.255.255.192,用CIDR表示?首先判断出是C类网络,前面占用了3字节(24位)1,192换算成二进制位11000000,占用了2位1,总共是26位1.所以CIDR表示为192.168.1.0/26。

  2. 192.168.10.0,255.255.255.224关于这个ip

    1、可划分成多少个子网?

    根据前面的知识,首先把224转换成二进制,得出为11100000,1占了3位,因此2^3=8,可用划分8个子网。

    2、每个子网有多少个可用的IP?

    这里看0占了5位,因此2^5-2=30,可用IP数为30.

    3、有哪些子网网络?

    256-224=32,即以32为基数不断递增,直到224,即0、32、64、96、128、160、192、224。即192.168.10.0、192.168.10.32、192.168.10.64、192.168.10.96、192.168.10.128、192.168.10.160、192.168.10.192、192.168.10.224。

    4、每个子网网络的广播地址是多少?

    每个子网网络的广播地址总是下一个子网前面的数,即31、63、95、127、159、191、223,即192.168.10.31、192.168.10.63、192.168.10.95、192.168.10.127、192.168.10.159、192.168.10.191、192.168.10.223。

    5、每个子网的可用地址是哪些?

    即减去每个子网的子网地址和广播地址,剩下的就是可用地址。本例中的可用地址为1-30、33-62、65-94、129-158、161-190、193-222。

  3. 相信好多人都和偶一样,认为IP只要前三段相同,就是在同一网段了,其实,不是这样的,同样,我样把IP的每一段转换为一个二进制数,这里就拿IP:192.168.0.1,子网掩码:255.255.255.0做实验吧。

               192.168.0.1
    ip      11000000.10101000.00000000.00000001
    子网掩码  11111111.11111111.11111111.00000000
    

    在这里,向大家说一下到底怎么样才算同一网段,只要把IP和子网掩码的每位数AND就可以了,AND方法:0和1=0 0和0=0 1和1=1。

    192.168.0.1,255.255.255.0,先转换为二进制,然后AND每一位
                  11000000.10101000.00000000.00000001
    子网掩码    11111111.11111111.11111111.00000000
    得出AND结果   11000000.10101000.00000000.00000000
    

    转换为十进制192.168.0.0,这就是网络标识,要想在同一网段,必需做到网络标识一样。