OSI/RM模型的编址方案与TCP/IP编址方案的对比

还是抛出老问题,IP地址到底是属于主机的还是属于网卡的?理解了这个看似无聊的问题,可以帮助你增强各种动态路由协议,IPv6等技术的理解深度。
        请看我在2013年的一篇文章《闲聊计算机IP网络》,此文从技术的角度解释了该问题,本文将从另外一个角度来解释。
...
        这个问题是在帮朋友设计一个IS-IS和IP Anycast相关模块时一起聊到的,由于朋友不想透露更多的细节,我也就不再说过多。仅仅针对问题而解释问题。
        其实这个问题现在非常好回答,我们把IP地址换成别的说法,叫做网络层标识,那么问题就变成了“设备的网络层标识到底是属于主机的还是属于网卡的?
        答案很简单,在OSI模型下,它是属于主机的,在TCP/IP模型下,它是属于网卡的。
     Why?这要从OSI模型以及TCP/IP模型的编址说起了。
        我们在学习网络的时候,不管是上课还是看书自学,几乎第一节课都是OSI分层模型,然后其实这个模型就没啥用了,后面所有的内容都是围绕着TCP/IP展开,即便是IS-IS,也不是纯的OSI模型的版本,而是兼容IP协议的集成IS-IS...所以对于大多数人来说,OSI分层模型仅仅停留在概念阶段,并且这个概念还是十分模糊的。
        但是其实,OSI模型和TCP/IP模型的差异十分巨大!这种差异体现在我们对一些基本概念的理解上,哦,对了,跟IPv6也有关系...

网络层编址

先来看看TCP/IP模型是怎么来划分网段的:

所以说,一个路由器会属于不同的网络中,比如我们常见的默认网关,它就属于内网和外网,在内网和外网均有一个角色。因此它有至少2个IP地址,内网网卡上的IP地址标识其内网的角色,而外网的IP地址标识其外网的角色。
        对于更加复杂动态路由域的划分,也是如此。以OSPF为例,Area的边界在路由器。
        这种编址方式直接影响了转发动作中的路由查找。路由器收到一个数据包之后,如果数据包的目标地址属于自己的一个网络,那么将会匹配到一种特殊的路由,即链路层路由。这种链路层路由不需要配置,是根据网卡所配置的IP地址自动生成的,也叫做自动发现的路由。比如路由器的一个网卡eth0配置了IP地址192.168.1.20/24,数据包的目标IP为192.168.1.30,那么将会配置到下面的一条路由项,我以Linux为例:
192.168.1.0/24 dev eth0  proto kernel  scope link
这个项中proto kernel以及scope link的含义就是内核自动发现的链路层路由。线缆两端只要不跨越三层设备,且配置同一个网络标识(即IP地址与掩码的按位与)的IP地址,就可以通过这个链路层路由通信,无需任何配置。不过如果你非要配置一个两端属于不同网段的IP地址,然后靠配置静态路由的方式来保证两边的互通,那谁也拦不住你。
        总的来讲,在IP网络中,链路层路由几乎总是数据包的最后一跳采用的路由,后面提到OSI模型时,我们就会知道OSI采用了另一种完全不同的方式处理最后一跳。
        因此,IP地址的编址方式实际上是与MAC地址对应的,它标识的是一块网卡所延伸出去的那条链路。之所以不直接使用网卡的MAC地址而引入一个IP地址,是因为IP地址在MAC地址上增加了逻辑含义,表现为以下几个方面:

1.屏蔽底层差异,统一操作接口

由于网卡类型各异,MAC地址的格式并不统一,甚至有些网卡根本就没有MAC地址的概念,只有类似设备序列号的概念。提供一个抽象的IP层,可以屏蔽掉这些差异,这也是分层模型中网络层的首要任务。以IPv4为例,其地址格式是统一且规整的。
        如果全世界所有的设备均安装以太网卡,统一为48位MAC地址,请接着看第2点和第3点。

2.层次化

MAC地址空间是平坦的(各个厂商的厂商编号根本就没有规律,网卡的出厂批次编号也不是按照寻址意义编码的,它们可能更看重维修和淘汰),无法利用局部性原理进行汇聚寻址。而IP地址和前缀(即掩码)的组合可以对地址空间进行分层,将其组织成一棵32层的二叉树。在这棵树上执行最长前缀匹配即可精确寻址到每一个节点。起初的设计为分类IP地址,后来逐步被无类编址取代。这种层次化方式可以通过地址规划,路由汇聚等操作大大减少路由查找的开销,不然如果直接使用MAC地址寻址,则最好的方案也就是哈希查找了。

3.多重命名

一块网卡只能有一个MAC地址,但是如果逻辑上需要将一个物理网络分为多个逻辑网络呢?多个IP地址可以配置在同一个网卡上。
--------------
IP地址的编址方法极其意义基本就是以上这些了,下面看下OSI模型的编址方案
--------------
OSI模型的网络层编址方案彻底与链路层脱离一切关系。
        不管是NSAP还是NET,名称不重要,我把它们统称为NSAP,这就是OSI模型的网络层地址。与IP地址配置在网卡上不同,NSAP地址配置在主机(包括终端机,路由器等)上,典型情况下一台设备不管有多少块网卡,只有一个NSAP地址,在需要“多重命名”的环境,会有多个NSAP地址,但并不多见。因此OSI划分网络的方式如下:

你应该知道为什么IS-IS和OSPF的Area划分边界不同了吧。IS-IS的Area边界在链路上而非路由器接口。
        现在看一下OSI模型如何三层寻址。
        在中间网络,跟IP寻址几乎是一样的,NSAP地址虽然在结构上更加复杂,但是与IP地址拥有一致的特性,也是逻辑层次化,可以规划,汇聚的,路由算法IS-IS也如OSPF一样基于SPF算法,所不同的是下一跳寻址。IP网络是依靠的是ARP(仅限以太网链路),而OSI则是采用了邻居发现协议。对于最后一跳寻址,IP网络依靠链路层路由用来寻址最后一跳,而OSI网络则是依靠ES-IS协议完成类似的事情。
        ES-IS也是几乎自动运行的,不需要任何配置。比较有意思的是,虽然与IP协议的最后一跳寻址不同,IPv6采用了OSI模型ES-IS的风格。IPv6针对端节点也有一个类似的自动配置协议,来无人干预自动配置其IPv6地址,在寻址最后一跳目的地时,不再使用ARP协议,而是采用了类似ES-IS的方式路由数据包。这是不是从侧面说明OSI模型的下一跳寻址方案比IPv4的ARP更加优越呢?
        本质上,ES-IS更像是一个下一跳寻址协议而不是一个路由协议。所有的终端主机(End-System,简称ES)会向路由器(简称IS)发送ESH报文,这样路由器就会采集到所有与之相连的端主机,同样,路由器会泛洪ISH报文,这样所有与之相连的端主机也就知道了路由器的存在极其配置。是不是很像IPv6的邻居发现和自动配置呢?

下一跳寻址

关于下一跳寻址,IP网络会更简单一些,由于IP地址在配置时已经与某个网卡接口有了关联,所以在路由查询得到下一跳之后,只需要在对应的接口发出询问即可,比如ARP协议就是干这个事情的。
        与IP网络不同的是,OSI网络解除了NSAP地址与网络接口的关联,所以不再知道该从哪个网卡接口发送询问解析下一跳,所以就需要独立的邻居发现协议来建立下一跳,网卡接口以及MAC地址之间的关联。这与IPv6非常类似...
        其实话不能这么说,应该是IPv6与OSI非常类似。难不成OSI是更合理的模型?虽然在实用性上TCP/IP胜利了,但是在下一代TCP/IP中,模型回归了...
        关于这个话题,我以我觉得比较酷的IPv6自动配置来结束本节,IPv6的自动配置可以在不需要类似DHCP协议的前提下实现自动配置IP地址,无需任何干预,只要上电开机即可:

(我当然知道链路本地地址,全局单播地址这类概念,只是我不明说,我希望能为IPv4找到一个这样的协议,而不套用任何IPv6的概念)

服务编址

IP网络中,服务体现在传输层,由以下的标识组成:IP地址+协议号+端口号。其中协议号区分了有连接服务(TCP)与无连接服务(UDP),而端口号标识具体的服务进程,这是很容易理解的,因为几乎所有的网络程序都是这么写的,socket,bind,listen,accept已经被标准化。
        对于OSI网络,服务直接体现在网络层,由以下的标识组成:CONP|CLNP+NSAP地址。其中在网络层就已经区分了服务的类型,CONP面向连接,而CLNP则类似IP,无连接。NSAP地址结构比较复杂,本文不讨论,在这个NSAP地址中有一个组成部分,即最后一个字节,它叫NSAP selector,它标识了具体的服务进程,类似IP网络的端口号。对于路由器而言,显然这个字节的值为0。

总结:

TCP/IP模型的IP地址标识的是链路,OSI网络的NSAP地址标识的是设备,显然后者更合理??

运营商为什么倾向于选用IS-IS

首先,我觉得这个问题不要一味的尝试从纯技术的角度去分析为什么,因为对于运营商而言,技术因素本来占据的份额就不多,这种问题应该从历史的发展角度去分析。
        虽然TCP/IP最终赢了OSI成了事实上的标准,但是这仅仅意味着TCP/IP在“全网”得以部署,这个“全网”有多大决定了路由要怎么配置!所以说两条线都很重要,其中一条线是TCP/IP在全网的部署,另外一条线则是“全网”规模的扩大。当网络规模扩大到一定规模的时候,动态路由才会派上用场。
        在上世纪80年代末到90年代初,TCP/IP模型(1983年出世)已经赢得了全网,但是网络规模尚不足以扩大到必须使用比较复杂的动态路由协议,这意味着OSPF这种复杂的协议并没有太大的吸引力,充其量只是RIP大行其道。现在说说IS-IS。
        IS-IS一开始是DEC开发的。在其部署的时候,TCP/IP正方兴未艾。IS-IS的目的很明确,是要替代RIP,这意味着网络规模已经变大了。等到TCP/IP意识到需要支持动态路由的时候,IS-IS已然成为了一个现成可用的东西,而此时的OSPF才刚刚起步。
        当网络达到需要专门的运营商这个实体才可运营的规模时,运营商迫切需要一种新的动态路由协议来替代复杂的人工配置以及RIP协议之前完成的工作,然而此时成熟的方案只有IS-IS,此时的OSPF尚不足以稳定运行,运营商唯一的选择几乎就是IS-IS。
        上学的时候,教科书上讲到IS-IS都是运营商使用,而企业会用OSPF...这也是有原因的。一般而言,运营商的生命周期比企业要久,其设备的更新换代周期也更长,更重要的是,运营商的竞争压力比企业要小很多,所以说运营商往往选用稳妥的方案,不求变而求稳,既然上世纪90年代已经接受了IS-IS,那么换成OSPF并不会显得有所收益。就这样,IS-IS至今为止依然是运营商的首选。
        不要说什么IS-IS比OSPF灵活可以无缝承载IPv6,地址消耗比IP要小,最小生成树计算代价要比OSPF高等等,基本都是为技术而技术,很多技术不考虑历史因素就完全想不通。类似的例子还有Intel和AMD的x86处理器架构之间的PK,很明显很多人都能看出AMD的架构更加先进,但最后赢的还是Intel,原因何在,只因为人们最初选择了Intel。还有以太网的成功,也不是技术上有多么牛逼,而是恰好可以满足需求,又恰好便宜到足以推动整个产业的扩张。

后记:

这个话题是一个比较古老的话题,感兴趣的人相信不会太多,中文社区论坛以及各个博客站点,知乎,微博上几乎没有人讨论这种话题,但相反在国外却有很多人关注。国内的圈子似乎只对Howto感兴趣,对Whyto丝毫无感...我常说,Howto是给学习中的人看的,而Whyto是帮人突破瓶颈的,是这样吗?

时间: 2024-10-06 00:40:21

OSI/RM模型的编址方案与TCP/IP编址方案的对比的相关文章

OSI的七层网络结构图和TCP/IP的结构图

   一.OSI参考模型和TCP/IP协议模型的定义         OSI(Open System Interconnection),开放式系统互联参考模型 ,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路由器是三层交换设备,常规的交换机是二层交换设备.这7层是:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层.         TCP/IP协议(Transmission Control Protocol/Internet Protocol),传输控制

计算机网络七层协议模型 “开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)

计算机网络七层协议模型 作者:Ryan    时间:2013年10月7日 一.物理层(Physical Layer) OSI模型的最低层或第一层,规定了激活.维持.关闭通信端点之间的机械特性.电气特性.功能特性以及过程特性,为上层协议提供了一个传输数据的物理媒体. 在这一层,协议数据单元为比特(bit). 属于物理层定义的典型规范代表包括:RS-232.RS-449.RS-485.USB2.0.IEEE-1394.xDSL.X.21.V.35.RJ-45等. 在物理层的互联设备包括:集线器(Hu

OSI七层网络模型与TCP/IP四层模型

1.OSI七层结构图: 2.TCP/IP四层结构图: 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 OSI网络模型和TCP/IP网络模型对应关系: 5.交换机工作在OSI的哪一层 如果有人问这个问题,我的回答是 :二层交换机工作在OSI的第二层数据链路层,,由于它们要对帧解码并使用帧信息将数据发送到正确的接收方,所以它们是工作在数据链路层的.三层交换机是工作在OSI的网络层,因为三层交换机有路由功能. 6.路由器工作在OSI的哪一层 路由器工作在OSI七层模型的第3层,网络层.由于

linux OSI七层模型、TCP/IP协议栈及每层结构大揭秘

学习Linux,就算是像小编我这样的小萌新,也知道OSI模型.什么?!你不知道!!! 好吧,这篇秘籍拿走,不谢~~~ 一.两个协议 (1)OSI 协议模型(7层)国际协议    PDU:协议数据单元对等层次之间传递的数据单位 OSI协议(7层) 国际协议 PDU 单位 功能 实例 7   应用层 application message 为应用程序进程(例:mail.终端防伪)提供网络服务:提供用户访问界面 提供用户身份验证 HTTP Telnet 6   表示层 presention messa

Linux网络知识学习1---(基础知识:ISO/OSI七层模型和TCP/IP四层模型)

以下的内容和之后的几篇博客只是比较初级的介绍,想要深入学习的话建议看书<TCP/IP详解 卷1:协议> 1.ISO/OSI七层模型    下四层是为数据传输服务的,物理层是真正的传输数据的,数据链路层.网络层.传输层主要是写入对应数据的传输信息的        物理层:比特            设备之间的比特流的传输.物理接口.电气特性        数据链路层:帧            保存的最主要的信息是网卡的 mac 地址,mac 地址负责局域网通信的,发件人和收件人的mac 地址  

osi 七层模型与tcp/ip 四层参考

一.七层?四层? OSI模型(Open System Interconnection Reference Model,缩写为OSI),全名"开放式系统互联通信参考模型",是一个试图使各种计算机在全世界范围内互联为网络的标准框架.1983年,国际标准组织(ISO)发布了著名的ISO/IEC 7498标准,它定义了网络互联的7层框架,也就是开放式系统互联参考模型 1.为什么需要协议? 什么是协议(protocol)?通俗的来讲,协议是一种双方都明白或者必须遵守的事先约定,比如说长城上放狼烟

TCP/IP分层模型

TCP/IP共分四层,分别是:网络连接层,网络层,传输层,应用层 他和OSI/RM模型的对应关系是: 网络连接层--物理层,数据链路层 网络层--网络层 传输层--传输层 应用层--会话层,表示层,应用层

OSI 七层模型和 TCP/IP 协议比较

OSI (Open System Interconnection), 开放式系统互联参考模型.从下到上七层模型功能及其代表协议: 物理层(Physical) :规定了激活.维持.关闭通信端点之间的机械特性.电气特性.功能特性以及过程特性.该层为上层协议提供了一个传输数据的物理媒体.Bit,比特.典型协议代表:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, IEEE 802.3x(以太网) 物理层, FDDI(Fiber Distribu

【程序猿笔试面试复习】之中的一个 网络与通信篇(一) 几大网络模型:OSI、TCP/IP、B/S与C/S、MVC结构

9.1网络模型 9.1.1. OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式网络互联參考模型.其为国际标准组织指定的一个指导信息互联.互通和协作的网络规范. 开放是指仅仅要遵循OSI标准,位于世界上不论什么地方的不论什么系统之间都能够进行通信,开放系统是指遵循互联协议的实际系统,如电话系统. 从逻辑上能够将OSI开放系统互联分为七层模型,由下至上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 当中.上三层称