计算机网络之网络层
计算机网络之网络层
网络层为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或数据报封装成分组或包进行传送。
1. 网络层的两种服务
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
关于网络层提供通信的两种思路:有人认为应当借鉴电话网的成功经验,网络应该提供面向连接的,可靠的数据传输。这样可以有效的提供很好的服务质量;但现互联网的先辈门则主张网络层只向上提供无连接的、灵活的、尽最大努力交付的数据报服务。因为端系统比电话机智能的多,差错检测的功能完全可以交给上层去做。
- 第一种即是虚电路服务
当两台计算机进行通信时,先建立连接(在分组交换网中是建立一条虚电路VC),以预留双方通信的一切网络资源。然后双方就沿着已经建立的虚电路传送分组。这样的分组不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少分组的开销。在通信结束后要释放建立的虚电路。
虚电路表示这只是一条逻辑上的连接,而并不是真正建立了一条物理连接。所有的分组都沿着这条逻辑连接按照存储转发方式传送,而且每个分组独占这条链路的全部带宽。
虚电路的通信过程分为三步:呼叫建立(call setup)→数据传输→拆除呼叫。
呼叫建立后,会唯一确定一条传输的链路,这条链路会有一个标识,随后每个分组携带的不是目的地址,而是这条链路的标识。每个分组携带虚电路标识(VCID),而不是目的主机地址,虚电路经过的每个网络设备( 如路由器),维护每条经过它的虚电路连接状态。通信结束要拆除这条链路。
PS:电路交换的电话通信是先建立了一条真正的连接。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
- 第二种即是数据报服务
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网络在发送分组时不需要先建立连接,每一个分组(也就是IP数据报)独立发送,与其前后分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所传送的分组可能出错,丢失,重复,失序(即不按顺序到达终点),当然也不保证分组交付的期限。
虚电路服务与数据报服务的对比
2. 网际协议IP
网际协议IP是TCP/IP体系中两个最主要的协议之一,也是最重要的互联网标准协议之一。与IP协议配套使用的还有三个协议:
- 1.地址解析协议ARP
- 2.网际控制报文协议ICMP
- 3.网际组管理协议IGMP
还有一个逆地址解析协议RARP,现在已经淘汰不用了。因为现在的DHCP协议已经包含了RARP协议的功能。
IP协议经常使用ARP协议,而ICMP和IGMP协议要使用IP协议。因此在网络层图中,ICMP和IGMP位于IP上,ARP位于IP下。
2.1 虚拟互联网络
从一般的概念来讲,将网络互相连接起来需要用到一些中间设备,根据中间设备所在层次可分为四种:
- 物理层使用的中间设备叫做转发器
- 数据链路层使用的中间设备叫做网桥或桥接器
- 网络层使用的中间设备叫做路由器
- 在网络层上使用的中间设备叫做网关。用网关连接两个不兼容的系统需要在高层进行协议转换
转发器或者网桥仅仅是把一个网络扩大了,从网络层的角度看则仍然是一个网络,一般不称之为网络互连。我们讨论网络互联,都是指路由器进行网络互连和路由选择。
虚拟互联网也是指逻辑互联网,它的意思是互连起来的各种物理网络的异构性是客观存在的,但我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像就是一个统一的网络。
使用IP协议的虚拟互联网可简称为IP网,如果这个网络覆盖全球,且在上层使用TCP协议,即是现在的互联网。
2.2 分类的IP地址
2.2.1 IP地址的编址方法共经历了三个历史阶段:
- 分类的IP地址
- 子网的划分
- 构成超网
这里的IP地址都是指IPv4中的地址,即32位的IP地址。
2.2.2 分类的IP地址
是指将IP地址划分为若干个固定类,每一类地址都由两个固定长度的字段组成,其中第一个是网络号,它标志主机或路由器所连接到的某个网络,一个网络号必须在整个网络范围都是是唯一的。第二个是主机号,它标志某台主机或路由器本身。一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。
IPV4简单粗暴地把IP地址分为五类。分类方法如下图所示:
也就是说,分为以下几类:
A类: 0.0.0.0-127.255.255,可指派网络号126个(2^7-2个),网络号全0和网络号127不可用。可指派主机号2^24-2个,主机号全0和全1这两个不可用。
B类: 128.0.0.0-191.255.255.255,可指派网络号2^14-1个,128.0.0.0不可指派。可指派主机号2^16-2,因为主机号全0和全1不可用。
C类: 192.0.0.0-223.255.255.255,可指派网络号2^21-1个,192.0.0.0不可用,可指派主机号2^8-2,因为主机号全0和全1不可用。
D类: 224.0.0.0-239.255.255.255,是多播地址,用于多播(一对多通信)
E类: 240.0.0.0-255.255.255.255,保留为以后所用。
这其中除了段0和段127之外,还有一些IP地址因为有其他的用途,是不可以用作普通IP的。还有一部分被用作私有IP地址。
(1)环回地址:127.x.x.x
如127.0.0.1 等效于localhost或本机IP。 一般用于测试使用。
例如:ping 127.0.0.1来测试本机TCP/IP是否正常。http://127.0.0.1:8080 等效 http://localhost:8080
(2)私有IP
与私有IP地址对应的是公有地址(Public address),由Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
私有IP的出现是为了解决公有IP地址不够用的情况。从A、B、C三类IP地址中拿出一部分作为私有IP地址,这些IP地址不能被路由到Internet骨干网上,Internet路由器也将丢弃该私有地址。如果私有IP地址想要连至Internet,需要将私有地址转换为公有地址。这个转换过程称为网络地址转换(Network Address Translation,NAT),通常使用路由器来执行NAT转换。
范围如下:
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
2.3 IP地址与硬件地址
从层次的角度看:
- 硬件地址(或物理地址、MAC地址)是数据链路层和物理层使用的地址。
- IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧首部中。
通信链路上的设备(主机或路由)收到MAC帧后,根据MAC帧首部中的MAC地址决定收下还是丢弃。在剥去MAC帧的首部和尾部后,将剩下的信息部分(也就是IP数据报)上交给网络层,网络层才能在IP数据报的首部中找到缘IP地址和目的IP地址。
所以,IP地址在IP数据报中,硬件地址在MAC帧中,整个IP数据报是MAC帧的数据,不能直接从帧中读取到IP地址,在数据链路层看不见数据报的IP地址。
- 在IP层抽象的互联网上只能看到IP数据报
- 路由器只根据目的地的IP地址的网络号进行路由选择
- 在局域网的链路层只能看见MAC帧
IP数据报被封装在MAC帧中,MAC帧在不同的网络上传送时,经过路由转发时,MAC帧需要去掉当前首部和尾部重新换首部和尾部,进而首部中的源地址和目的地址也就发生了变化,如上图。
- IP 层抽象的互联网屏蔽了下层很复杂的细节。在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信 。
2.4 地址解析协议ARP
通信时使用了两个地址:
- IP 地址(网络层地址)
- MAC 地址(数据链路层地址)
在实际应用中,有这样一个问题:已经知道了一个机器(主机或路由器)的IP地址,如何找出其相应的硬件地址?
答案是地址解析协议ARP
2.4.1 ARP 的两个要点:
- 网络层使用的IP地址,但在实际网络的链路上传送数据帧时,必须使用硬件地址。
- 每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。这个映射表经常动态更新(新增或超时删除)
ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间(如10~20分钟),凡是超过生存时间的映射项目就会从高速缓存中删除掉。
2.4.2 ARP工作步骤:
举例:
注意:
- 虽然ARP请求分组是广播发送的,但是ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。如上图所示。
- ARP 用于解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
- 如果所要找的目的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络(可能是直接交付给目的主机,也可能是间接交付给下一个路由器)。剩下的工作就由下一个网络来做。这里就会有对MAC帧的首部和尾部重新封装。
- 从 IP 地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
- 只要主机或路由器要和本网络上的另一个已知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所需要的硬件地址。
2.4.3 四种典型情况:
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机,这时用ARP找到目的主机的硬件地址
- 发送方是主机,要IP数据报发送到其他网络的主机,这时ARP找到本网络上某个路由器硬件地址,剩下工作由这个路由器完成
- 发送方是路由器,要把 P数据报转发到本网络上的一个主机,这时用ARP找到目的主机的硬件地址
- 发送方是路由器,要把IP数据报转发到另一个网络上的一个主机,这时用ARP找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成
2.5 IP数据报格式
一个 IP 数据报由首部和数据两部分组成。
最高位在左边,记为0 bit;最低位在右边,记为31 bit
首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
在首部的固定部分的后面是一些可选字段,其长度是可变的。
2.5.1 首部固定长度字段解释:
版本:
占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)首部长度:
占4位,可表示的最大数值是15个单位(一个单位为 4 字节)因此IP 的首部长度的最大值是 60 字节区分服务:
占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过,1998 年这个字段改名为区分服务,只有在使用区分服务(DiffServ)时,这个字段才起作用,一般的情况下都不使用这个字段总长度:
占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节(2^16-1),总长度必须不超过最大传送单元 MTU标识:
占16位,它是一个计数器,用来产生数据报的标识标志(flag):
占3位,目前只有前两位有意义
- DF:标志字段中间的一位(第3位)是 DF (Don't Fragment)
只有当 DF=0 时才允许分片
- MF:标志字段的低位(第3位)是 MF (More Fragment)
MF=1 表示后面“还有分片”,MF=0 表示最后一个分片
生存时间:
占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送端初始设置一个 8 bit字段,推荐的初始值由分配数字 RFC 指定,当前值为 64,发送 ICMP 回显应答时经常把 TTL 设为最大值 255协议:
占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程,1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议
首部检验和:
占16位,只检验数据报的首部不检验数据部分,这里不采用 CRC 检验码而采用简单的计算方法源地址和目的地址:
都各占 4 字节,分别记录源地址和目的地址
2.5.2 首部可变部分:
- IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
- 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
2019.5.11 待更新........
