计算机网络:网络层 IP协议

概述

网络层属于五层因特网协议栈模型中的第三层,它可能提供的服务包含:

  • 转发:当一个分组到达路由器的一条输入链路时,路由器需要将这个分组移动至合适的输出链路。
  • 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法

当传输层向网络层传递一个分组时,网络层能够提供的服务包括:

  • 确保交付:该服务器能够确保分组到达目的地
  • 具有时延上限的确保交付:该服务不仅确保分组的交付,而且能够在时延上限之内完成交付。
    能够为给定的源和目的地之间的分组流提供下列服务:
  • 有序分组交付:该服务确保分组以它们发送的顺序到目的地
  • 确保最小带宽:只要发送主机以低于特定比特率的速率传输比特,则分组不会丢失。
  • 确保最大时延抖动:位于发送方的两个相继分组之间的时间量等于在目的地接收到它们之间的时间量。
  • 安全性服务:使用仅由源和目的主机所知晓的一个秘密会话密钥,加密其所有的数据报负载。

因特网的网络层提供了单一的服务,称为尽力而为服务,简单的说就是根本无服务的一种委婉说法,它不能保证不丢包、带宽大小及其数据报的到达顺序,也没有拥塞指示信息。

ATM网络相比因特网体系就提供了多重服务模型,比如能够保证带宽,保证不丢包等,这里不再赘述。

网络层协议同样能够提供类似于传输层协议TCP、UDP那样的连接服务和无连接服务。网络层与传输层的连接服务和无连接服务存在以下差异:

  • 在网络层,这些服务是网络层到传输层提供的主机到主机服务。在传输层中,这些服务是传输层向应用层提供的进程到进程的服务。
  • 网络层协议一般不同时提供这两种服务,例如IP协议提供无连接的服务而不提供连接服务,ATM提供连接服务而不提供无连接服务。仅在网络层提供连接服务的计算机网络称为虚电路网络(Virtual-Circuit),仅提供无连接的计算机网络称为数据报网络(Datagram Network)。
  • 网络层的连接服务除了需要端系统支持及维护,也需要路由器的支持及其维护。而传输层协议只需要端系统来支持和维护,路由器是不知道这个传输层协议是不是一个连接服务的。

这里我们不过多阐述虚电路网络了,下面我们重点来讲解因特网的网络层协议——IP协议:
首先IP协议分为两种:IPv4协议和IPv6协议。我们先来看看IPv4协议:


IPv4协议的数据报结构

IPv4协议数据报包含以下字段:

  • 版本(4bit):规定了该数据报的IP协议版本,通过版本号路由器能够知道该如何解析后面的字段。
  • 首部长度(4bit):因为IPv4首部长度是可变的(选项长度可变),所以需要通过首部字段来确定数据部分从哪个地方开始。
  • 服务类型(8bit):该字段方便不同类型的IP数据报能够区分,例如:一些数据报需要低时延、高吞吐量或者具有可靠性。
  • 数据报长度(16bit):该字段为IP数据报的总长度(包含首部),单位字节。虽然理论上最大为65536字节但是一般不会超过1500字节。这是因为以太网帧只能承载长度不超过1500字节的数据,一个链路层能承载的最大数据量叫做最大传送单元(MTU),MTU严格限制了IP数据报的长度
  • 标识、标志、片偏移(32bit):这三个字段用于IP分片(仅IPv4协议)
  • 寿命(TTL,8bit):确保IP数据报不会永远在网络间循环,所以每经过一个路由器时该字段都会减去1,若该值为0时则路由器会丢弃这个报文。
  • 上层协议(8 bit):该字段指示了IP数据报的数据部分应当交给哪个传输层协议(仅在目的端系统中有用)。例如,值为6时表示交给TCP协议,值为17时表示交给UDP协议。
  • 首部检验和(16bit):用于帮助路由器检验该IP数据报的比特错误。
  • 源IP地址、目的IP地址(64bit):两个端系统的IPv4地址,在发送IP数据报时,发送方需要写入自己的IPv4地址和接收者的IPv4地址。
  • 选项:允许扩展IP首部添加一些额外的信息,实际上很少使用,IPv6协议中已经去除此字段。
  • 数据:承载要交付给目的地的传输层报文段(TCP/UDP/ICMP等)

IPv4地址结构

IPv4地址采用点分四组法,由四个用点分隔的十进制数组成,每个数字的范围在0~255,例如192.168.1.1。它本质上是一个32位的数字。

IPv4地址分为以下几种类型:

  • A类地址:首位为0,网络号为前8位,主机号24位。范围在0.0.0.0~127.255.255.255,占所有IPv4地址空间的50%。
  • B类地址:前两位为10,网络号为前16位,主机号16位。范围在128.0.0.0~191.255.255.255,占所有IPv4地址空间的25%。
  • C类地址:前三为110,网络号为前24位,主机号8位。范围在192.0.0.0~223.255.255.255,占所有IPv4地址空间的12.5%
  • D类地址:前四位为1110,用来作为组播地址。范围在224.0.0.0~239.255.255.255,占所有IPv4地址空间的6.25%。
  • E类地址:前四位为1111,保留地址。范围在240.0.0.0~255.255.255.255,占所有IPv4地址空间的6.25%。
    在这里插入图片描述
    A、B、C类地址用于单播,D类用于组播,E类地址保留。

有些IP地址是用于特殊用途的,例如:
0.0.0.0:用于代表网络上的任意一台主机,它并不是一个真正意义上的IP地址。
127.0.0.1:环回地址,表示当前主机。
255.255.255.255:限制广播地址,不能被路由器转发。
10.0.0.0~10.255.255.255:A类局域网地址。
172.16.0.0~172.31.255.255:B类局域网地址。
192.168.0.0~192.168.255.255:C类局域网地址。

子网掩码

子网掩码是由一台主机或路由器使用的分配位,以确定如何从一台主机的IP地址获取网络和子网信息。利用子网掩码,我们可以把大的网络划分为一个个子网。子网掩码长度和IP地址相同。

对于A类地址,默认的子网掩码为255.0.0.0,B类地址默认为255.255.0.0,C类地址为255.255.255.0

如何利用子网掩码算出一个IP地址的网络号和主机号?
首先将子网掩码转换为二进制格式,例如255.255.255.0转换为二进制是:
1111 1111 1111 1111 1111 1111 0000 0000
左边连续的1的数量等于网络号的长度,右边连续的0就是主机号。

为什么路由器需要子网掩码?
当路由器转发IP数据报时,首先需要判断这个IP数据报的目的IP地址是否处于同一网段(也就是判断网络号是否相同),如果相同,那么可以直接把数据报发送给目标主机,如果不相同,就需要将数据报发送给网关,由网关尝试将其转发给目标主机。

每个IPv4子网中都有一个特殊的地址作为广播地址,子网广播地址的构建方式是:对子网掩码按位取反,并与子网中任意一台计算机的地址进行按位或运算。例如IP地址192.168.1.1,子网掩码为255.255.255.0的设备,其广播地址为192.168.1.255


IPv6数据报结构

IPv6包含以下字段:

  • 版本(4 bit):和IPv4协议类似,规定了该数据报的IP协议版本,通过版本号路由器能够知道该如何解析后面的字段。
  • 流量类型(8 bit):类似于IPv4的服务类型字段。
  • 流标签(24 bit):该字段用于给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流。
  • 有效载荷长度(8 bit):该字段给出了数据报首部后面的字节数量。
  • 下一个首部(8 bit):该字段标识了这个数据报中的数据部分需要交付给哪个传输层协议,和IPv4的上层协议字段一样。
  • 跳限制(8 bit):类似IPv4的寿命字段,防止数据报在网络中无限传输。
  • 源地址和目的地址(16 Byte):两个端系统的IPv6地址,在发送IP数据报时,发送方需要写入自己的IPv6地址和接收者的IPv6地址。

我们可以发现有一部分IPv4的字段被IPv6协议取消了:

  • 分片/重新组装:IPv6不允许在中间路由器上进行数据报的分片与重新组装,只允许在发送方和接收方上执行。如果路由器因为IPv6数据报太大不能转发到出链路,那么路由器只需要丢弃该数据报。
  • 首部检验和:常用的传输层和链路层协议都实现了检验操作,所以没必要再进行检验操作了。
  • 选项:选项字段不再是IPv6首部的一部分了。但是并没有完全取消,而是有可能出现在”下一个首部“字段上。

IPv6地址结构

IPv6地址长度为128位,其传统表示方法是采用称为块或字段的四个十六进制数,用冒号隔开。此外,IPv6地址可以按照下列规则进行简化:

  • 一个块中的前导0可不用书写。例如,3d00:2000:53ad:12:800:5800:2d20:3a21
  • 全零的块可以省略,用符号::代替,例如0:0:0:0:0:0:0:1可简写为::1,为避免歧义,::在一个IPv6地址中仅可使用一次。
  • 在IPv6格式中嵌入IPv4地址可以使用混合符号形式。例如,IPv6地址::ffff:10.0.0.1可表示IPv4地址10.0.0.1
  • IPv6地址的低32位通常采用点分四组表示法。例如:IPv6地址::0102:f001相当于::1.2.240.1。它被称为IPv4兼容的IPv6地址。

IPV6地址分为了三类:单播地址、组播地址、任播地址,没有IPv4的广播地址:

  • 单播地址:前三比特为001,范围在2000::~3fff::
  • 组播地址:前8比特均为1,也就是ff00::
  • 任播地址:任播地址是IPv6独有的,没有独立的地址空间,使用单播的地址格式,使用时需要指定为任播。

一个单独的IPv6地址具有三个部分:

  • 全局路由前缀:用于识别特殊地址
  • 子网ID:用于识别站点内的链接
  • 接口ID:用于识别链接上的接口

特殊地址:

  • :::未指定的地址,对应IPv4的0.0.0.0
  • ::1:回环地址,对应IPv4的127.0.0.1

IPv6和IPv4一样存在子网掩码,不过IPv6的子网掩码是128位的。


DHCP协议

DHCP协议允许一个主机在接入网络时自动获取一个IP地址。它是一个客户端-服务器协议,客户端是新接入的主机,服务器一般是路由器。
DHCP协议分为4个步骤:
在这里插入图片描述

  1. DHCP服务发现:客户端组装一个源地址为0.0.0.0,目的地址为广播地址255.255.255.255DHCP发现报文,通过UDP协议向端口67发送。DHCP客户端将这个UDP报文传递给网络层,网络层传递给链路层,链路层将这个帧广播道所有与该子网相连接的子网。
  2. DHCP服务器提供:DHCP服务器收到发现报文后,组装一个源地址为当前服务器的IP地址,目的地址为广播地址255.255.255.255DHCP提供报文。该报文包含了该发现报文的事务ID、向客户端提供的IP地址子网掩码租赁期。需要注意的是,子网当中可能存在多个DHCP服务器,这些DHCP服务器都会响应客户端的请求并向客户端发送报文。
  3. DHCP请求:客户端从一个或多个DHCP提供报文中选择一个,并向这个服务器进行响应,回显其配置参数。
  4. DHCP ACK:服务器用DHCP ACK报文响应该客户端,证实参数。

客户端收到DHCP ACK后,便可以在租赁期内使用这个IP地址。


ICMP协议

ICMP协议,即因特网控制报文协议,被主机和路由器用来沟通网络层信息,其典型用途是差错报告(例如在连接服务器时收到一个目的网络不可达的提示)。我们经常执行的ping命令就是通过这个协议完成的。

ICMP协议被认为是IP协议的一部分,从体系结构上来看它是承载于IP协议上的。ICMP报文包含以下几个字段:
在这里插入图片描述
其中类型字段编码字段是最重要的,其含义如下:

类型字段编码字段用途
00回显回答(对ping命令的回答)
30目的网络不可达
31目的主机不可达
32目的协议不可达
33目的端口不可达
36目的网络未知
37目的主机未知
40源抑制(拥塞控制),在实践中很少使用
80回显请求
90路由器通告
100路由器发现
110TTL损坏
120IP首部损坏

ping命令发送的就是类型字段为8,编码字段为0的ICMP报文到指定的主机,目的主机收到后发送一个类型字段为0,编码字段为0的回显回答。

参考资料

《计算机网络 自顶向下方法》(原书第6版)
《TCP/IP详解 卷1:协议》(原书第2版)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值