引言

  • 网络层关注的是如何将源数据包一路送到接收方,这一过程可能经过许多路由器,而数据链路层的目标只是将帧从一边传到另一边,因此网络层是处理端到端数据传输的最底层。为了实现这一目标,网络层必须知道网络拓扑结构(即所有路由器和链路的集合),并从中选择出适当的路径;选择路径的同时还要避免某些线路和路由器负载过重。最后,当源端和接收方位于不同网络时,还会出现新的问题,这些问题都需要由网络层来解决。

1、储存转发数据包交换

  • 下图大致勾勒了网络层协议运行的环境。网络中最主要的组件是网络服务商(ISP)的设备(路由器)和客户端设备,图中路由器位于阴影内。主机H1直接连接到ISP的路由器A,通过DSL调制解调器接入;而H2则位于一个局域网内,其上还有一个路由器F,客户拥有这台路由器并负责其运行。路由器F通过一条租用线路连接到ISP的设备上,但本章将把客户端的路由器作为ISP网络的一部分来考虑,因为它们运行的算法与ISP路由器上运行的算法相同。
  • 这种网络配置方法如下所述。如果一台主机要发送一个数据包,它就将数据包传输给最近的路由器,路由器可能在它自己的LAN上,也可能在一条通往ISP的点到点链路上。在该数据包到达路由器,并且路由器的链路层完成了它校检和的验证之后,它先被储存在路由器上;然后沿着路径被转发到下一个路由器,直至目标主机。这种机制即为储存-转发数据包交换。

2、提供给传输层的服务

  • 网络层通过网络层/传输层接口向传输层提供服务。网络层的服务目标如下:(1)向上提供的服务应该独立于路由器技术(2)应该向传输层屏蔽路由器的数量、类型和拓扑关系(3)传输层可用的网络地址应该有一个统一编址方案,甚至可以跨越LAN和WAN。
  • 网络设计者的讨论焦点集中在网络层应该提供面向连接的服务还是提供无连接的服务。一个阵营认为,路由器的任务仅仅是传送数据包,不用再做别的事情。按照他们的观点,不管如何设计网络,从本质上讲它总是不可靠的。因此主机自己需要完成错误控制和流量控制任务。这种观点很快导致了这样的结论:网络服务应该是无连接的,只需要原语SEND PACKET和RECEIVE PACKET,以及其他少量原语就可以了。特别是数据包的排序和流量控制不应该在这里完成,主机将完成这些工作。这种设计理论对Internet形成有很大影响。每个数据包必须携带完整的目标地址,因为每个数据包运送独立于前面的那些数据包。另一大阵营认为,网络应该提供可靠的、面向连接的服务。按照他们的观点,服务质量是最主要的因素,如果网络中没有连接,要实现服务质量非常困难,特别对于诸如语音和视频这样的实时流量。
  • 早期被广泛使用的数据网络都是面向连接的,比如20世纪70年代的X.25和80年代其继任者帧中继。然而,自从有了ARPANET和早期的Internet,无连接网络层得到了突飞猛进的普及。现在IP协议俨然是一个无处不在的成功象征。然而,Internet正朝着面向连接的特性进化,因为服务质量变得越来越重要了。与此相关的两个面向连接技术的例子是多协议标交换(MPLS)和VLAN,这两种技术被广泛应用。

3、无连接服务的实现

  • 如果提供的是无连接的服务,那么,所有的数据包都要被独立地注入到网络中,并且每个数据包独立路由,不需要提前建立任何设置。在这样的环境中,数据包通常称为数据报,它类似于电报,对应的网络称为数据报网络。如果使用了面向连接服务,那么在发送数据包之前,必须建立一条从源路由器到目标路由器之间的路径,这个连接称为虚电路(VC),对应的网络称为虚电路网络。
  • 现在讨论数据报网络。假设图中的进程P1有一个很长的消息要发送给P2。它将消息递交给传输层,并指示传输层将消息传送给主机H2上的进程P2。传输层代码运行在H1上,通常在操作系统内部。它在消息的前面加上一个传输头,然后将结果交给网络层,网络层可能是操作系统内部的另一个进程。
  • 假设消息的长度是最大数据包长度的4倍,那么网络层必须将消息拆分成4个数据包:1、2、3和4,然后用某种点到点协议(如PPP)将这些数据包一次发送给路由器A。每一台路由器都有一个内部表,它指明了针对每一个可能的目标地址应该将数据包送到哪里去。每个表由两个部分数据组成:目标地址和通往目标地址所使用的出境线路。例如,图中A有两条出境线路——A和C,所以每一个入境数据包必须转发给其中一个,即使它的目标地址是其他机器。
  • A的初始化路由表如图中标识的“初始化(initially)”。在路由器A,数据包1、2和3分别到达入境线路并且经过校检和之后,被路由器暂时保存起来,然后根据A上的表,每个数据包被放在一个新帧中,并且被转发到通往C的出境链路;之后数据包1被转发给E,进一步又被转发给F。当它到达F时,它被封装在一个帧内通过连有H2的LAN被发送出去,数据包2、3遵循同样的路径。数据包4的情形有所不同,当它到达A时,尽管它的目标地址也是指向F,但它被转发给了路由器B,出于某种原因,A决定采用不同于前三个数据包的路径来发送数据包4。或许它了解到在ACE路径上发生了流量拥塞,因而更新了路由表,如图中的“稍后(later)”,管理这些路由表并作出路由选择的算法称为路由算法。IP协议是整个Internet的基础,它是无连接网络的重要范例,每个数据包携带一个目标IP地址,路由器使用该地址来单独转发每一个数据包。IPv4数据包的地址是32位,IPv6数据包的地址是128位。

4、面向连接服务的实现

  • 对于面向连接的服务,我们需要一个虚电路网络。隐藏在虚电路背后的思想是为了避免为每个要发送的数据包选择一条新路径。所有,当建立一个连接时,从源机器到目标机器之间的一条路径就被当做这个连接的一部分确定下来了,并保存在这些中间路由器的表中。所有需要在这个连接上通过的流量,都使用这条路径,这与电话系统的工作方式完全一致。当连接被释放之后,虚电路也随之消失。在面向连接的服务中,每个数据包包含一个标识符,指明它属于哪一条虚电路。
  • 如图。主机H1已经建立了一条与主机H2吹健的连接1。这条连接被记录在每个路由表中的第一项中。A路由表的第一行说明如果一个标示了连接标识符1的数据包来自H1,那么它将被发送到路由器C,并且赋予连接标识符1。类似的,C路由表中的第一项将该数据包路由到E,也被赋予连接标识符1。
  • 现在考虑如果H3也希望与H2建立连接则情形会怎么样。H3选择连接标识符1(因为这是它发起的连接,而且是它唯一的连接),并告诉网络要建立虚拟电路。因此路由表增加了第二行。但会有一个冲突,因为尽管A很容易区分标识连接1的数据包是来自H1还是来自H3,但是C无法区分。基于这个原因,A给第二个连接的出境流量分配一个不同的连接标识符。这种避免冲突的说法说明了为什么路由器需要具备替换出境数据包中连接标识符的能力。
  • 在有些上下文中,这个过程称为标签交换。一种面向连接的网络服务例子是多协议标签交换(MPLS),它主要被用在Internet的ISP网络,IP数据包被一个有20位连接标识或标签的MPLS头包裹着。MPLS往往对客户端是隐藏的客户看不到这些标签,ISP用它来为超大流量建立长期的连接;但是,当服务质量变得很重要而且还需要协助其他ISP完成流量管理任务时,MPLS的作用越来越突出。

5、虚电路与数据报网络的比较

问题 数据报网络 虚电路网络
电路建立 不需要 需要
寻址 每个包包含全部的源和目标地址 每个包包含简短的VC符号
状态信息 路由器不保留连接信息 针对每个连接,每条VC都需要路由器保存其状态
路由方式 每个数据包被单独路由 建立VC时选择路由,所有包都遵循该路由
路由器失效的影响 无影响,除了那些路由器崩溃期间丢失的包 穿过故障路由器的所有VC都将中断
服务质量 困难 容易,如果在预先建立每条VC时有足够的资源可分配
拥塞控制 困难 容易,如果在预先建立每条VC时有足够的资源可分配
  • 在网络内部,数据包和虚电路之间存在着几个方面的权衡。一个权衡在于建立时间和地址解析时间。使用虚电路需要一个建立阶段,这个阶段既花费时间也消耗资源。然而,一旦付出了这个代价,处理一个数据包的方法却非常简单:路由器只要使用电路号作为索引,在表中找到该数据包的去向即可。在数据报网络中,不需要建立电路,但路由器需要执行一个更为复杂的查找过程以便找到目标表项。
  • 与此相关的一个问题是数据报网络所用的目标地址比虚电路所用的电路号要长,因为数据报网络的目标地址具备全局意义。如果数据包相当短,在每个数据包中都包括完整的目标地址可能意味着大量的协议开销,因而造成带宽资源的浪费。另一个问题是路由器内存所要求的表空间的数量。在数据报子网中,针对每一个可能的目标地址都要去有一个表项,而在虚电路中,只要为每一条虚电路提供一个表项即可,然而这种优势有点虚幻并非绝对,因为虚电路网络在建立连接阶段所用的数据包也需要被路由,并且它们也使用目标地址,如同数据报网络的做法一样。
  • 从保证服务质量以及避免网络拥塞的角度来看,虚电路有一定的优势,因为在建立连接时,资源可以提前预留(比如缓冲区空间、带宽和CPU周期)。一旦数据包开始到来,所需要的带宽和路由器容量都已经准备好,而对于数据报网络,避免拥塞更困难一些。
  • 对于事物处理系统(比如商场购物时通过电话验证信用卡的有效性),用于建立和清除虚电路所需要的开销可能会降低虚电路的优势。如果系统中的大部分流量都是这种类型,那么在网络内部使用虚电路就毫无意义。另一方面公司的两个办公楼之间长期运行诸如VPN流量,这种情况下永久性的虚电路或许更加有用(可手工建立虚电路,并且持续使用几个月或几年)。
  • 虚电路也存在脆弱问题。如果一台路由器崩溃并且内存中的数据全部丢失,那么即使它一秒钟之后又重新启动,所有从它这里经过的虚电路都不得不中断。相反,如果一台数据报路由器宕机,只有那些当时尚保留在路由器队列中的数据包用户会受到影响(甚至不会受到什么影响,因为发送方可能很快重传这些数据包)。数据报还允许路由器平衡网络流量,因为一个长序列数据包的传输路径可以在序列传输的中途改变。

23、网络层设计问题(网络层)相关推荐

  1. ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...

    2.delegate效率高,delegate只是保存了一个对象指针3.在多个通信事件的时候,delegate显得直观也易维护. delegate缺点:1.因方法的声明和实现分离开来,代码的连贯性不是很 ...

  2. 计算机网络 | 网络层 | 什么是网络层 | 详解

    本博客为个人笔记,篇幅较长,内容较多,因时间原因,内容中的重点部分没有重点标出,望谅解.如有错误,欢迎各位前来纠正. 目录 一.网络层提供的两种服务 1.虚电路服务 2.电话机与现代计算机的区别 3. ...

  3. 架构学习01- 03基本原则和23个设计模式分类

    对接口编程而不是对实现编程. 优先使用对象组合而不是继承. 六大原则 单一职责原则 前端写页面,后端写逻辑. 即: 只负责自己分内之事,让单个模块更简单且复用,高内聚. 开闭原则 实现一个热拔插的效果 ...

  4. 渲染层网络层错误_网络层IP报文详解和IP的类别?

    在tcp/ip 体系结构中,当传输层的pdu送到网络层时,需要对传输层s的数据段进行下一步的ip报头的封装.下面我们就来看看ip报文头部的具体内容. version:占4位,版本号,标识这个报文时采用 ...

  5. 23种设计模式分析(7):行为型模式

    1.1.21 Strategy策略模式 Strategy(策略)模式又称Policy模式.GOF<设计模式>一书对Strategy模式是这样描述的: 定义一系列的算法,把他们一个个封装起来 ...

  6. 23种设计模式分类+SOLID设计原则+从设计模式角度看MVC框架

    目的:设计模式旨在帮助使用者设计可维护.可扩展.可复用.灵活性好的系统 1.  23中设计模式分类 1.1 创建型模式(5个) 工厂方法模式(Factory Method) 抽象工厂模式 (Abstr ...

  7. 23种设计模式分析(4):结构型模式

    1.1.9 Composite复合模式 Composite(复合.合成.组合)模式是一种结构型模式,定义:将对象组合成树形结构以表示"部分-整体"的层次结构,它使得客户对单个对象和 ...

  8. 6大设计原则与java 23种设计模型之单例,工厂,装饰,观察者,责任链,代理,适配器,策略

    设计原则 设计模式的6大原则,单一职责原则,开放封闭原则,里式替换原则,依赖导致原则,迪米特原则和接口隔离原则. 单一职责原则: 一个类只负责一个功能领域中的相应职责.高内聚,低耦合. 开闭原则: 对 ...

  9. php 23种设计模型 - 装饰模式

    装饰器模式(Decorator) 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. ...

最新文章

  1. Windows Small Business Server 2003 意外关闭 ; 1001, 1013 和 1014 事件记录
  2. 【Elasticsearch】第2篇:Elasticsearch分布式安装
  3. ImageView宽度填满屏幕,高度自适应
  4. 在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  5. 开源PagerSlidingTabStrip的使用Tab与ViewPager的完美结合
  6. python中、函数定义可以不包括以下_python函数定义精讲
  7. 廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar
  8. VS2013密钥(所有版本)
  9. [Leetcode] 158. Read N Characters Given Read4 II - Call multiple times 解题报告
  10. ROS编译ORB-SLAM2或其各种变种的算法遇到的编译问题
  11. 华为荣耀20和x10比较_华为畅享20plus和荣耀x10对比哪个好?入手哪一款更香
  12. hystrix 配置了较大的核心线程数导致wating线程过多的问题
  13. java华容道代码_用java编程 华容道游戏
  14. 老哥教你如何将springboot打包成exe程序
  15. 将java对象存储到redis数据库(两种实现方式)
  16. 模仿新浪微博雷达搜索动画效果
  17. finally、catch和return,你真的会用吗?
  18. WordCount单词统计笔记
  19. unity塔防游戏怪物转向_一款塔防+第一人称射击的混合类游戏
  20. 前端学习从入门到高级全程记录之12 (CSS高级技巧)

热门文章

  1. QLExpress脚本语言技术讲解(3) -----QL的性能描述
  2. 在PHP里QRcode的参数详解,简单明了!
  3. Django 启动时报错: RuntimeError: populate() isn‘t reentrant
  4. iOS:蓝牙通讯开发快速上手
  5. 一台服务器虚拟交换机,虚拟化架构下虚拟交换机和分布式虚拟交换机解析
  6. Hostapd中DPP的概念
  7. 论文解析:Capsule Network
  8. 微信小程序hidden不生效原因及解决方法
  9. CCRC资质证书的维护方法
  10. 计算机毕业设计ssm糖果礼品销售系统rv0w0系统+程序+源码+lw+远程部署