网络层的作用

网络层的主要作用是实现终端节点之间的通信。网络层负责解析目标计算机的IP地址,然后通过路由寻址,选择一条最合适的路由(从源计算机到目标计算机的路径),将数据传递到目标计算机。打个比方,网络层好像快递公司,选择合适的路径,然后将快递发送出去。网络层的主要协议有IP协议和ICMP协议。

IP协议

IP协议是TCP/IP协议族的动力,它为上层提供无状态、无连接、不可靠的服务。

无状态:指IP数据报的发送、传输和接收相互独立,没有上下文信息。

无连接:通信双方在通信之前不需要建立连接就可以直接发送数据,通信双方不长久地维持对方信息,无连接的优点是简单,高效。

不可靠:不保证IP数据报一定能准确地到达接收端,它只是承诺尽最大的努力,但不做最后收到与否的验证。

IP协议的主要内容

  • IP地址
  • IP数据报
  • IP寻址和路由控制

1. IP地址

  在计算机通信中,为了识别通信双方,需要有一种类似于地址的识别码进行标识。在网络层,IP地址就是这种识别码。在互连网通信中,必须为每台设备都配备正确的IP地址,否则无法实现正常的通信。

IP(IPV4)地址用32位正整数表示,每8位用"."隔开,再将每组数转换为十进制数,例如,有IP地址

10101100.00000000.00000001.00000001 

对应的十进制表示为

172.0.0.1

一台计算机IP地址的数目是由计算机网卡的数量决定的,一块网卡可以配一个以上的IP地址。

 

网络地址和主机地址

  IP地址由网络地址和主机地址两部分组成,网络地址唯一标识互连网中的一个网段,主机地址唯一标识网段内的一台计算机。通过网络地址和主机地址,可以保证IP地址具有唯一性。区分网络地址和主机地址的方式有IP地址分类和子网掩码两种。

 

IP地址分类

  IP地址可分为五类,其中A,B,C类为主要地址,D类多播地址,E类为保留地址。

  • A类:第一个字节为网络地址,后三个字节为主机地址,网络地址的最高位为“0”,网络号取值位于1~126之间,一般用于大型网络。
  • B类:前两个字节为网络地址,后两个字节为主机地址,网络地址的前两位为“10”,网络号取值位于128~191之间,一般用于中型网络。
  • C类:前三个字节为网络地址,最后一个字节为主机地址,网络地址的前三位为“110”,网络号取值位于192~223之间,一般用于小型网络。
  • D类:多播地址,IP地址前四位为1110,网络号取值位于224~239间。
  • E类:保留地址,IP地址前五位为11110,网络号取取值位于240~247之间。

子网掩码

  另一种区分网络地址和主机地址的手段是子网掩码。子网掩码是IP地址的标识,所以它不能单独存在,必须配合IP地址存在。子网掩码是一个32位的二进制数,它将对应的IP地址的网络地址位置为1,主机地址位置为0。例如上面的IP地址172.0.0.1,假设它前24位为网络地址,后8位为主机地址,则它的子网掩码为:

1111.1111.1111.0000

 

简便的记法是在IP地址后面加上网络地址的长度。

 

                                                                                172.0.0.1 /24 (24代表IP地址的0~23位属于网络地址,其他属于主机地址)

 

私有IP和全局IP

  在A,B,C三类主要的IP地址中,分别保留了一部分IP地址作为私有IP地址。

  A类:10.0.0.0~10.255.255.255

  B类:172.16.0.0~172.31.255.255

  C类:192.168.0.0~192.168.255.255

  包含在这个范围内的IP地址为私有IP,除此之外的IP地址为全局IP地址。全局IP地址是全网唯一的,而在不同的私有网络中,私有IP可以重复。私有IP一般用在局域网中,私网IP不能直接连接互连网,想要连接的话必须要用NAT技术将私网IP转化为公网IP才能正常上网。

 

2. IP数据报

  被IP协议封装的数据叫做IP数据报,和网络层相关的内容主要在数据报头部中。

IPV4头部

 

版本号:指定IP协议的版本,对于IPV4来说,版本号就是4。

首部长:标识IP头部的大小,单位为4字节,如果没有可选项,这个值设为5,即IP首部长度为20字节。

服务类型:用来表明服务的优先权,但是现在因为实现困难,基本被弃用。

总长度:一个IP数据报的总长度,以字节为单位,这个字段长 16比特,因此IP数据报的最大长度为65535字节。但是实际上,长度超过MTU的IP数据报会被分片传输,所以数据报长度基本不会达到上限。

标识:用来唯一标识主机发送的每一个数据报。

标志:由3比特组成,标识包被分片的信息。第一位保留不使用。第二位表示是否进行了分片,0表示可以分片,1表示不能分片。第三位表示是否为最后一个分片,0表示是,1表示否。

片偏移:用来标识每一个分片相对于原始数据报处的偏移,单位为8字节。又因为片偏移占13位,最多可以表示8192个相对位置,所以片偏移最多可以表示8x8192=65536个字节的位置。

生存时间:指数据报到达目的地之前经过的路由器的跳数,每经过一个路由器就会减1。当该值变为0时,路由器丢弃该数据报,并向源端发送一个ICMP差错报文。

协议:是IP数据报上层协议的编号。

校验和:用来校验IP数据报头部在传输过程中是否被损坏。

源地址:发送端IP地址。

目标地址:接收端IP地址。

选项:可变的可选信息,包括路由记录,时间戳等。

填充:在有可选项的情况下,设置填充可以将首部长度调增为32的倍数。

 

IP分片和IP重组

  上面介绍过,当IP数据报的长度超过MTU(Maxmum Transmission Unit)时,它会被分片传输,也就是将大的IP数据报切割为较小的数据报,当数据报到达目的地时,再重组起来。分片可能发生在发送端或者路由器上,重组只可能发生在目标机器出。不同的数据链路有不同的MTU值,例如以太网的MTU是1500字节。


3.IP路由

  IP协议的一个核心是数据报的路由,也就是IP数据报从到发送端到接收端的路径。IP数据包不一定能直接从源端发送到目的端,它需要先经过一个或多个路由器来实现中转。为了实现这种中转,就需要路由控制。

路由控制表

  路由控制表保存着路由信息,具体来说,它保存着网络地址和下一步应该发送到哪个路由器的地址。发送IP数据报时,首先确定IP数据报中的目标地址,然后再根据路由机制确定转发地址。

路由机制

1. 如果路由表中有和目标IP完全匹配的主机IP地址,则使用该路由项,否则转步骤2。

2. 从控制表中找到与该地址有相同网络地址的记录,将IP数据报转发给相应的路由器。如果存在多条相同网络地址的记录,则选择相同位数最多的网络地址转发;如果没找到则转步骤3

3. 选择默认路由项。默认路由为0.0.0.0/0

 

路由更新

  使用route命令可以更新路由。

 

IP协议的工作流程

  总结IP流程之后,可以对IP协议进行一个总结:

 

1. IP模块接收IP数据报,对头部进行检查

2. 如果该数据报TTL(最大生成时间)为0,则丢弃,否则判断它是不是发送给本机的数据报,如果是,则将它转发给上层应用,否则考虑转发它

3. 结合路由机制,得到下一跳的IP地址

4. 处理IP头部选项,如果有必要,进行分片操作

5. 将该数据报转发给下一个路由器