Home

TCP/IP详解卷一 第一章

30 Mar 2013 by LelouchHe

分层协议

有一张图很好的表达分层协议的地位和作用

分层协议

从下自上分别为:

其实看来,就解决的通讯问题而言,链路层是”物理网络相邻两点”, 网络层是”逻辑网络相邻两点”,传输层是”逻辑网络任意两点”,应用层则是”通讯内容和通讯方式”

tcp/ip协议族

逻辑上的分层协议,在实现上同样有类似的结构,将各个分层一一匹配,有下图:

协议族

自下而上对应的协议有:

  1. ARP/RARP: 这两个协议负责将抽象的ip地址和具体的物理地址的映射.这个很好理解,因为抽象的网络节点,必须在真正物理传输的时候映射到具体的物理节点才可以进行,这个是保证抽象ip协议可以正常使用的关键,仍然处理的是底层物理细节,不同的物理网络,实现肯定不一样,映射的物理地址方式也有区别
  2. IP/ICMP/IGMP: IP主协议用于抽象相邻物理节点的通讯,ICMP则是IP的附属协议,用于在抽象网络中进行控制(C = Control),IGMP则是分组管理协议
  3. TCP/UDP: 传输层的标准协议
  4. 应用层协议: 各种网络应用实现自定义的协议

ip地址分类

ip地址的分类方式有很多种,比较古老而经典的分类是网络/主机分类法,见图:

网络/主机分类

这种方式将ip地址分成两级,一级是网络地址(即图上的网络号),用以标明一个主机群所在的网络编号,二级是主机地址,即真正通信用主机地址.这样进行分层的一个目的是简化ip分配工作,上层顶级分配服务商只需要负责合理划分网络地址,主机地址可交由下级分配来处理,网络地址的不同,就明确保证了ip地址的不同,这样有助于各种分工和合理化利用

另一种分类方式是网络/主机的增强版,在主机地址内部,再进行划分(驱动力和上面的一样),在主机地址内部,再次区分成子网地址和主机地址,这样进一步细化,更加灵活的匹配的ip的使用场景(也增加了我们的学习负担..唉..)

封装

协议的作用主要体现在协议对于应用数据的包裹与整合,下图展示了协议和应用数据的结构关系:

协议封装

可以看到,自上而下,每经过一层,上层数据就会被当作一个整体,添加一些下层协议的部件(比如协议头,比如校验尾之类的),下层协议不会处理上层协议封装好的任何数据(否则就不叫封装了)

而自下而上的时候,每经过一层,本层协议就会对本层协议添加的部件进行处理(包括最重要的校验,删除额外的协议头等),然后把上层协议需要的数据向上传递,整个过程对上层协议完全透明

这其实就是分层的最大优势,我们可以无限数量的添加层数,而不影响任何一层的逻辑(当然,也不能无限,而是要视处理问题的情况而定),这种透明性是非常重要的.

反观我们的服务协议,就有些严重的问题了.拿us为例,为了判断一个结果是否需要入cache,竟然需要深入到返回结果内部来探究,这样不仅增加了服务间的耦合,同样也增加的问题处理的复杂度(比如io线程就需要很仔细的解析结果,然后很多业务逻辑就存在于纯io中了)

这样不是好的协议方式,在以后重构我们服务的时候,需要仔细的考虑和设计了

总结

tcp/ip协议是网络连接事实上的标准,同样也是分层协议的经典代表,不论是从协议的设计,还是协议的实现,都有非常多的地方值得借鉴.这个协议与OSI7层协议之间的竞争结果,也凸显了一个道理,即互联网或者IT行业,能工作,已经工作的东西,远远比理想的东西要好.先要跑起来,然后再想着怎么改进,这是快速开发快速迭代快速上线的互联网的特征,在迭代中前进,而不是在完美中退出.