ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-02-17 11:44:07  阅读:278  来源: 互联网

标签:编址 网卡 IP TCP OSI 地址 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是帮人突破瓶颈的,是这样吗?

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

标签:编址,网卡,IP,TCP,OSI,地址,IP地址,路由
来源: https://www.cnblogs.com/ksiwnhiwhs/p/10390516.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有