网络协议是分层的,分层的概念类似于函数封装,不断提供更高级更抽象的接口,最后提供给客户使用。对于分层协议而言,整个协议共同完成一件事情,每个层次基于本层或低层接口完成本层次的功能并对更高级的层次提供接口,即对于每个层次而言,有以下两个主要功能:
举一个例子,若要实现计算器计算的功能,我们实现一个计算器协议,其分为以下几个层次:
假设厂商基于计算器协议构建了一个手写计算器,当用户需要进行1+1
的运算时,以手写的方式输入计算需求,即一张手写图片,随后用户输入层将这个手写图片转换为逻辑语言R=1+1
,调用逻辑编译层进行实现;逻辑编译层将其转换为汇编代码ADD R 1 1
,调用硬件层进行实现;硬件层运行汇编代码得出结果R为2,并将结果反馈给逻辑编译层;逻辑编译层接收硬件层的结果并将其返回给用户输入层;用户输入层将结果转为手写数字2反馈给用户。
level.png
这种分层协议的好处在于分层之间相互独立,仅有接口上的联系,可以进行方便的替换。以上述计算器协议为例,用户输入层可以使用触屏,也可以使用键盘,只需要将输入(触屏输入或键盘输入)转为统一格式的逻辑语言即可;在逻辑编译层也可以使用不同的编译软件,只需要输入和输出格式接口相同即可;硬件层亦然,可以使用AMD的cpu也可以使用Intel的cpu,只需要提供给逻辑编译层相同的接口即可。层与层之间相互独立,层层抽象。
TCP/IP分层脱胎于OSI分层,以上两个分层如下图所示:
tcpip_level.png
OSI分层共分为7层,TCP/IP模型共分为5层,首先考虑OSI分层,并以联机对战中的一个操作为例,即控制某个人物向指定的方向释放出一个指定的技能(实际游戏会不同):
对于TCP/IP的分层,将OSI中的应用层、表示层和会话层统一为应用层,因此5层分组和对应的协议举例有:
对于数据链路层和物理层,其功能为将数据从一个节点发送到一个相邻的节点;对于网络层,其功能为将数据从一个主机发送到另一个主机(可能跨越很多个节点,不关心是否出错);对于传输层,要保证数据无错误的从一个主机发送到另一个主机,传输层协议一次传输可能调用网络层传输多次;应用层位用户最终接触到的协议,实现具体功能,例如HTTPS实现网页访问,FTP实现数据传输,如下图所示:
tcpip_level_stream.png