概览
计算机科学家解决复杂问题时有两把利刃:一是缓冲技术,二是分层技术。后者的思想是如果直接解决某个问题比较复杂,则可以建立一个“中间层”,中间层在底层的基础上,抽象出一些常用功能,并为上层提供灵活易用的API。
网路通信就是分层技术应用的一个范例。目前网络架构是一个分层结构,从建立通信的对象来看,从底层到最高层依次是:
- 应用程序(Application Programs)
- 进程间的通信(Process-to-process Channels)
- 主机间的通信(Host-to-Host Connectivity)
- 硬件(Hardware)
协议
为了协调不同层次之间以及同一层次不同系统之间的通信,我们需要制定一套通信的规则,这种规则就叫“协议”(protocol)。协议定义了一种“通信机制”,它至少提供了两个方面交互接口:
- 同一系统中层
- 不同系统中的层
前者是一种“服务接口”,例如TCP(传输层)通过不可靠的IP协议(网络层)建立起可靠的服务;后者提供不同系统的层的通信,例如路由器A(网络层)与路由器B(网络层)的通信。
可想而知,如果不同系统采用不同的协议,必然导致系统之间无法互通。因此网络的相关协议就由专门机构IETF(Internet Engineering Task Force)来制定。网络协议不是一成不变的,但是新的协议必须遵循下面两条性质:
- 协议能被精确定义并实现,如伪代码。
- 协议能够通过互通测试。例如,如果协议能够通过两个及以上方法代码实现,它们应该是可以相互通信的。
下图展示了不同层次上的协议:网络层依托IP协议,传输层依托网络层的IP协议建立了TCP,UDP协议,在后者的基础上,又有FTP, HTTP, DNS等应用层的协议。
数据的封装
数据从最高层到最底层传送时,每层协议都会为数据加上自己的头(header),用于该层的通信;当数据达到目的地时,从最底层到最高层,通过每层协议时数据的头会依次被剥离。这个过程叫做encapsulation与decapsulation。
一个简化的粒子如上图中从FTP应用发出的数据,将依次加上FTP、TCP、IP的头,成为
IP hdr || TCP hdr || FTP hdr || Datagram
通过Internet传播到目的地后,头依次被剥离。
OSI架构
ISO组织给网络定义了一个7层的OSI(Open System Interconnection)架构。它们依次是
- Physical Layer
- Datalink Layer(负责把数据送到相邻的目标)
- Network Layer(负责把数据送到终点)
- Transport Layer(只有主机有,一台主机会跑不同应用,它们有不同的传输需求,如UDP,TCP等)
- Session Layer
- Presentation Layer
- Application Layer
这是一张典型的OSI架构图,其中交换机只处理Data Link层的需求,因此交换机没有IP,也不处理数据中的IP header。交换机一般处理含Mac地址的头。
不同层的特点与作用
Physical Layer
物理层考虑的问题是如何将原始资料在link上传输。物理层的传输媒介有同轴电缆、双绞线、光纤、无线方式等。以电缆为例,通过高低点位来传输数据,例如高点位表示1,低电位表示0。
实际情况并不这么简单,关于点位编码数据需要特别的处理才能抵抗干扰。不同的编码方法叫做Signal Coding schemes。
Data Link Layer
数据层考虑的问题是“如何将frame用MAC Protocol传给直接相连的主机或设备”。
数据层将物理层零星的0、1数据收集起来成为一个数据框,一般的组成为
preamble + SFD + DA(dest) + SA(src) + Type + LLC + PAD + FCS
数据层是以MAC地址作为传送目标的。如果一条线路上有多个设备发送数据,可能导致点位过高或抵消,造成数据的丢失与错误,因此有很多协议来协调这个问题,常见的有
- random access。不作任何处理,数据传输成功率在18%左右。
- CSMA/CD:先监听,如果没有检测出冲突则送封包。例如以太网就是采用这种协议。
- CSMA/CA:这个协议不能检测出冲突,但是可以避免冲突。例如无线网络。
Network Layer
网络层主要考虑如何将封包通过Internet送给目的地主机。因此“路由”(routing)显得格外重要。
路由的目的是为数据传输决定一条路径。路由器需要一些协议来让数据往正确的方向传播。通常的做法是路由器之间互相交换信息,每个路由器维护一张路由表,从而达到对于整个网络的了解。
第一代的路由协议如RIP规定路由器每30秒交换一次信息。OSPF协议则是找最短路径。
Transport Layer
传输层考虑“提供不同主机进程之间的资料传送”。两个典型的传输层协议是TCP与UDP,TCP能提供稳定的服务,虽然它是基于不稳定的IP协议。TCP常常用来支持文件传输、HTTP等应用,而UDP则用来处理速度要求高的DNS服务等。
架构的特征
虽然IETF将网络分成了7层,但是在实际使用中,这些层并没有严格的区分。例如应用层可以直接给予网络层的IP协议,跳过TCP或UDP。
另外一个特征是Internet的结构相当于一个“沙漏”。网络层现在几乎只有IP协议,而其它层有五花八门的协议。
一个健康的网络架构应该是可拓展的,未来会有新的协议被添加到网络通信中来。这些新的协议应该遵循在前面提到的协议的特征:
- 有精确的定义
- 协议的多个正确的代码实现的层应该是可以互通的