网络层

网络层

IP 即网际协议TCP/IP 的心脏是互联网层。这一层主要由 IP (Internet Protocol)和 ICMP (Internet Control Message Protocol)两个协议组成。 网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫 “点对点(end-to-end)通信”。

主机和节点

主机的定义应该是指“配置有I地址,但是不进行路由控制”的设备”。既配有IP地址又具有路由控制能力的设备叫做“路由器”,跟主机有所区别。而节点则是主机和路由器的统称。

IP基础知识

IP地址

IP地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址” 不论一台主机与哪种数据链路连接,其IP地址的形式都保持不变。以太网、无线局域网、PPP 等,都不会改变IP地址的形式。 而数据链路的MAC地址的形式不一定必须一致。

在网桥或交换集线器等物理层或数据链路层数据包转发设备中,不需要设置IP地址”。因为这些设备只负责将IP 包转化为0、1 比特流转发或对数据链路帧的数据部分进行转发,而不需要应对IP 协议”

路由控制

路由控制(Routing)是指将分组数据发送到最终目标地址的功能。 image

Hop 译为中文叫“跳”。它是指网络中的一个区间。 一跳(1Hop)是指利用数据链路层以下分层的功能传输数据帧的一个区间。 以太网等数据链路中使用 MAC地址传输数据帧。此时的一跳是指从源MAC地址到目标MAC地址之间传输帧的区间。也就是说它是主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间

多跳路由

IP 包正是在网络中一个个跳间被转发。因此 IP路由也叫做多跳路由。在每一个区间内决定着包在下一跳被转发的路径。 image

多跳路由是指路由器或主机在转发IP 数据包时只指定下一个路由器或主机, 而不是将到最终目标地址为止的所有通路全都指定出来。因为每一个区间(跳) 在转发 IP数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。

路由控制表

为了将数据包发给目标主机,所有主机都维护着一张路由控制表(Routing Table)。该表记录IP 数据在下一步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路上传输。 image

数据链路的抽象化

IP 是实现多个数据链路之间通信的协议,对IP的上一层来说,不论底层数据链路使用以太网还是无线LAN 亦或是PPP,都将被一视同仁。

不同数据链路有个最大的区别,就是它们各自的最大传输单位(MTU:Maximum Transmission Unit)不同。

MTU 的值在以太网中是1500字节,在FDDI 中是4352字节,而ATM则为9180字节。IP 的上一层可能会要求传送比这些 MTU 更多字节的数据,因此必须在线路上传送比包长还要小的MTU。

为了解决这个问题,IP 进行分片处理(IP Fragmentation)。顾名思义,所谓分片处理是指,将较大的IP 包分成多个较小的IP 包”即从 IP 的上次层看,它完全可以忽略数据包在途中的各个数据链路上的MTU,而只需要按照源地址发送的长度接收数据包。 IP 就是以这种方式抽象化了数据链路层,使得从上层更不容易看到底层网络构造的细节。

面向无连接

IP 面向无连接。即在发包之前,不需要建立与对端目标地址之间的连接。上层如果遇到需要发送给IP 的数据,该数据会立即被压缩成 IP包发送出去。

  • 那么,为什么IP 要采用面向无连接呢? 主要有两点原因:一是为了简化,二是为了提速。面向连接比起面向无连接处理相对复杂。甚至管理每个连接本身就是一个相当繁琐的事情。此外,每次通信之前都要事先建立连接,又会降低处理速度。需要有连接时,可以委托上一层提供此项服务。因此,IP 为了实现简单化与高速化采用面向无连接的方式。

IP 提供尽力服务(Best Effort),意指“为了把数据包发送到最终目标地址,尽最大努力。”然而,它并不做“最终收到与否的验证”。IP数据包在途中可能会发生丢包、错位以及数据量翻倍等问题。

  • 那么,有人可能会提出疑问:为什么不让IP 具有可靠传输的功能, 从而把这两种协议合并到一起呢?

    这其中的缘由就在于,如果要一种协议规定所有的功能和作用,那么该协议的具体实施和编程就会变得非常复杂,无法轻易实现。相比之下,按照网络分层,明确定义每层协议的作用和责任以后,针对每层具体的协议进行编程会更加有利于该协议的实现。 网络通信中如果能进行有效分层,就可以明确 TCP 与IP 各自协议的最终目的,也有利于后续对这些协议进行扩展和性能上的优化。分层也简化了每个协议的具体实现。

IPv4

IP 地址(IPv4 地址)由32位正整数来表示,将32位的IP地址以每8位为一组,分成4组,每组以“.”隔开,再将每组数转换为十进制数”

实际上,IP地址并非是根据主机台数来配置的,而是每一台主机上的每一块网卡(NIC)都得设置IP 地址”。通常一块网卡只设置一个 IP 地址,其实一块网卡也可以配置多个 IP 地址。此外,一台路由器通常都会配置两个以上的网卡,因此可以设置两个以上的IP地址。 image

IP 地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成”

网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。

究竞从第几位开始到第几位算是网络标识,又从第几位开始到第几位算是主机标识呢?关于这点,有约定俗成的两种类型。最初二者以分类进行区别。而现在基本以子网掩码(网络前缀)区分。 image

IP地址的分类

IP 地址分为四个级别,分别为A类、B类、C类、D类”。它根据 IP 地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。 image

关于分配IP 主机地址的注意事项

在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为只有。在表示对应的网络地址或IP 地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。

广播地址

广播地址用于在同一个链路中相互连接的主机之间发送数据的目的主机地址部分全部设置为1,就成为了广播地址。

以太网中如果将 MAC地址的所有位都改为1,则形成FF:FF: FF: FF: FF: FF 的广播地址。因此, 广播的IP包以数据链路的帧的形式发送时,得通过 MAC 地址为全 1 比特的 FF:FF: FF: FF: FF: FF转发。

本地广播

在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24 的情况下,广播地址是192.168.0.255。因为这个广播地址的 IP包会被路由器屏蔽,所以不会到达192.168.0.0/24 以外的其他链路上。

直接广播

在不同网络之 的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向 192.168.1.255/24 的目标地址发送IP 包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~ 192. 168.1.254 的主机都能收到这个包”

image

IP多播

多播用于将包发送给特定组内的所有主机。由于其直接使用IP 协议,因此也不存在可靠传输。 image

多播使用D类地址。因此,如果从首位开始到第4位是“1110”,就可以认为是多播地址。而剩下的28 位可以成为多播的组编号。 image

从224.0.0.0到 239.255.255.255 都是多播地址的可用范围。其中从224.0.0.0到224.0.0.255 的范围不需要路由控制,在同一个链路内也能实现多播。而在这个范围之外设置多播地址会给全网所有组内成员发送多播的包。

利用IP多播实现通信,除了地址外还需要IGMP’等协议的支持。 image

子网掩码

例: A类 255.0.0.0 B类255.255.0.0 C类 255.255.255.0

网络标识相同的计算机必须同属于同一个链路。例如,架构B类IP 网络时, 理论上一个链路内允许6万5千多台计算机连接。然而,在实际网络架构当中, 一般不会有在同一个链路上连接6万5千多台计算机的情况。因此,这种网络结构实际上是不存在的。

因此,直接使用A类或B类地址,确实有些浪费。随着互联网的覆盖范围逐渐增大,网络地址会越来越不足以应对需求,直接使用A类、B类、C类地址就更加显得浪费资源。为此,人们已经开始一种新的组合方式以减少这种浪费。

对于子网掩码,目前有两种表示方式。以172.20.100.52的前26位是网络地址的情况为例,以下是其中一种表示方法,它将IP地址与子网掩码的地址分别用两行来表示。 image

另一种表示方式如下所示。它在每个 IP 地址后面追加网络地址的位数”用“/”隔开 image

CIDR

采用任意长度分割 IP 地址的网络标识和主机标识。这种方式叫做CIDR 根据 CIDR,连续多个C类地址”就可以划分到一个较大的网络内。CIDR 更有效地利用了当前 IPv4地址,同时通过路由集中“降低了路由器的负担。 image

VLSM

在CIDR被应用到互联网的初期,网络内部采用固定长度的子网掩码机制。也就是说,当子网掩码的长度被设置为/25以后,域内所有的子网掩码都得使用同样的长度。然而,有些部门可能有500台主机,另一些部门可能只有50台主机。如果全部采用统一标准,就难以架构一个高效的网络结构。为此人们提出组织内要使用可变长度的、高效的IP地址分配方式。

于是产生了一种可以随机修改组织内各个部门的子网掩码长度的机制VLSM(可变长子网掩码)。它可以通过域间路由协议转换为 RIP2 以及 OSPF实现。根据 VLSM 可以将网络地址划分为主机数为500个时子网掩码长度为/23,主机数为50个时子网掩码长度为/26。

有了 CIDR 和 VLSM技术,确实相对缓解了全局IP地址不够用的问题。但是IP 地址的绝对数本身有限的事实无法改变。

全局地址与私有地址

出现了一种新技术。它不要求为每一台主机或路由器分配一个固定的IP 地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址。 尤其对于那些没有连接互联网的独立网络中的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址。

私有网络的IP 地址。它的地址范围如下所示: image A类~C类范围中除去0/8、127/8。 包含在这个范围内的IP地址都属于私有 IP,而在此之外”的IP地址称为全局IP。 全局 IP地址基本上要在整个互联网范围内保持唯一’,但私有地址不需要。只要在同一个域里保证唯一即可。在不同的域里出现相同的私有IP 不会影响使用。

在世界范围内,全局 IP 由ICANN‘进行管理。对于 FTTHADSL 的服务,网络提供商直接给用户分配全局 IP地址,并且用户每次重连该IP地址都可能会发生变化。这时的IP 地址由提供商维护,不需要用户亲自申请全局 IP 地址。

不过现在,普遍采用的一种方式是,在LAN 中设置私有地址,通过少数设置全局IP 地址的代理服务器结合 NAT的设置进行互联网通信。这时 IP地址个数就不限于LAN 中主机个数而是由代理服务器和 NAT的个数决定。

NAT

私有IP 最早没有计划连接互联网,而只用于互联网之外的独立网络。然而, 当一种能够互换私有 IP 与全局IP 的NAT’技术诞生以后,配有私有地址的主机与配有全局地址的互联网主机实现了通信。 私有IP 地址结合NAT技术已成为现在解决 IP地址分配问题的主流方案。它与使用全局 IP 地址相比有各种限制。 image

WHOIS

互联网中从很早开始就可以通过网络信息查询机构和管理人联系方式。这种方法就叫做 WHOIS。WHOIS 提供查询IP地址、AS编号以及搜索域名分配登记和管理人信息的服务。

路由控制

发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(Routing Table)

该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫静态路由控制,而后者叫做**动态路由控制

IP协议始终认为路由表是正确的。然而,IP 本身并没有定义制作路由控制表的协议。即 IP没有制作路由控制表的机制。该表是由一个叫做“路由协议”(这个协议有别于IP)的协议制作而成。 image

路由控制表

路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP 包时,首先要确定IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。所谓最为吻合是指相同位数最多的意思”

如果路由表中下一个路由器的位置记录着某个主机或路由器网卡的IP地址,那就意味着发送的目标地址属于同一个链路

默认路由

如果一张路由表中包含所有的网络及其子网的信息,将会造成无端的浪费。这时,默认路由(Default Route)是不错的选择。默认路由是指路由表中任何一个地址都能与之匹配的记录。

默认路由一般标记为 0.0.0.0/0或 defaul ‘。这里的0.0.0.0/0并不是指 IP 地址是0.0.0.0。由于后面是“/0”,所以并没有标识 IP 地址。它只是为了避免人们误以为0.0.0.0是IP地址。有时默认路由也被标记为 default,但是在计算机内部和路由协议的发送过程中还是以0.0.0.0/0进行处理。

主机路由

IP 地址/32”也被称为主机路由(Host Route)。例如,192.168.153.15/32就是一种主机路由。它的意思是整个 IP地址的所有位都将参与路由。 主机路由多被用于不希望通过网络地址路由的情况。

环回地址

环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。计算机使用一个特殊的IP地址127.0.0.1作为环回地址。与该地址具有相同意义的是一个叫做localhost 的主机名。使用这个 IP 或主机名时,数据包不会流向网络

路由控制表的聚合

利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。这样可以更好地构建网络,通过路由信息的聚合可以有效地减少路由表的条目”。 image