一、简单 vs 复杂
这个的焦点聚焦在网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)?争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
电信网使用的面向连接的方式(虚电路服务)。电信网提供的端到端可靠运输的服务对电话业务无疑是合适的,因为电信网的终端(电话机)非常简单,没有智能,也没有差错处理能力。因此电信网必须负责把用户电话机产生的语音信号可靠地传送到对方的电话机,使还原后的语音质量符合技术规范要求。
但计算机网络的端系统是有智能的计算机。计算机有很强的差错处理能力(这点和传统的电话机有本质的区别)。因此因特网的设计思路:网络层向上提供简单灵活的、无连接的、尽最大努力交付的数据报服务。由于传输网络不提供端到端的可靠服务,这就使网络中的路由器可以做的比较简单,而且价格低廉(和电信网的交换机相比较)。网络的造价大大降低,运行方式灵活,能够适应多种应用。
这里面有两个思想:
1.当设计新的东西需要参考已有东西的时候,需要看到相似点,更要发现不一样的地方,而不能不进行思考就照搬。
2.简单的设计,低廉的成本,往往具有更为强大的生命力
二、抽象分层
协议本身的分层次就是最好的证明。
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
为了实现不用异构的网络之间的通信,TCP/IP体系在网络互连上采用的做法是在网络层(即IP层)采用了标准化协议IP协议。利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。整个因特网就是一个单一的、抽象的网络。
抽象分层在计算机领域应用非常广泛:
例如操作系统中系统调用层次;VFS;以及本质上有点类似的机器翻译(一门语言 抽象到语义 在具体到另一门语言);编译器(一种编程语言 抽象到语义 在翻译为具体的机器语言)
抽象的本质就是提取出共同点,将不同的地方限制在局部,限制在抽象层与下一层各模块的转换之间。
三、协议的本质
网络的本质就是共享资源和共享信息。
共享的前提是连接和交换——也即通信。
为了实现通信——有条不紊地交换数据,就必须遵守事先约定好的规则。因此,网络协议的定义为:为进行网络中的数据交换而建立的规则、标准或约定。网络协议的三要素:
1.语法,即数据与控制信息的结构或格式
2.语义,即需要发出何种控制信息,完成何种动作以及做出何种响应
3.同步,即事件实现顺序的详细说明
除了上面说的协议的控制部分,关于协议的数据部分,一般情况下携带的数据都有如下特征:
1.携带的格式都是 操作码 + 参数,操作码一般在大型系统中可以是消息号
2.双方必须都知晓传输的数据类型,以便上层解析
四、映射的广泛使用
路由表:目的网络 映射到 下一跳地址
转发表:MAC地址 映射到 接口
NAT: 旧IP地址 映射到 新IP地址
ARP: IP地址 映射到 MAC地址
计算机网络本质就是信息的转发,所以这四个都是跟转发相关的映射。其中前三个(路由表、转发表、NAT)算是同一层的映射,而ARP是上一层到下一层的映射。从另一个角度来看,转发表实现中也是上一层到下一层的映射。