《kitex前传》传输协议:如何把信息发出去

1,563 阅读6分钟

前言

最近也是在参与谱写 《Kitex前传:RPC那些你不得不知的故事》的 传输协议:如何把信息发出去 部分内容,所以也是重新复习一遍相关协议并输出笔记

一、什么是传输协议

在电信领域中指的是:在任何物理介质中允许两个或多个在传输系统中的终端之间传播信息的系统标准,也是指计算机通信或网络设备的共同语言。传输协议定义了通信中的语法学、语义学和同步规则以及可能存在的错误检测与纠正。传输协议在硬件、软件或两者之间皆可实现

为了交换大量信息,通信系统使用通用格式(协议)。每条信息都有明确的意义使得预定位置给予响应,并独立实施回应指定的行为,通信协议须参与实体都同意才能生效。为了达成一致,协议必须要有技术标准。编程语言在计算方面也应有相应标准,所以在这个方面可以用编程语言做类比:“编程语言是为了模式化的计算,而传输协议为了更畅通的交流。”

多类别协议构建了单个传输的不同方面,包括同时进行的协议模块,和在软件上实现时的协议栈

可能上述概念稍微有些难以理解,其实通俗点说,就是ReceiverTransporter双方约定的一种信息流通规则。举例来说:其实各种语言,例如中文、英文等,就是约定俗成的传输协议,比如你对你朋友说:“你好,帅哥”,他解读了你说的这句话,信息就通过【中文】这个协议传达到了,当然,假设你朋友旁边现在正在坐着一个不懂【中文】的美国人,那么他就不能解读你说的这句话,讲到这里,其实你应该心里也就明白了,传输协议也分不同类型,那么也就引出了我们下一个问题

二、常见的传输协议有哪些

在谈到这个问题之前,首先要介绍下目前国际上通用的一个概念模型,OSI七层模型

OSI七层模型介绍

OSI 模型(Open System Interconnection model)是一个由国际标准化组织所提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提供抽象良好的接口。

OSI 模型各层间关系和通讯时的数据流向如图所示:

image.png

OSI七层参考模型的各个层次的划分遵循下列原则:

1、同一层中的各网络节点都有相同的层次结构,具有同样的功能。

2、同一节点内相邻层之间通过接口(可以是逻辑接口)进行通信。

3、七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。

4、不同节点的同等层按照协议实现对等层之间的通信。

第一层:物理层(Physical Layer):

物理层的主要功能是利用传输介质为数据链路层提供物理联接,负责数据流的物理传输工作。物理层传输的基本单位是比特流,即0和1,也就是最基本的电信号或光信号,是最基本的物理传输特征。

第二层:数据链路层(DataLink Layer):

数据链路层是在通信实体间建立数据链路联接,数据链路控制子层会接受网络协议数据、分组的数据报并且添加更多的控制信息,从而把这个分组传送到它的目标设备。

第三层:网络层(Network Layer):

网络层是以路由器为最高节点俯瞰网络的关键层,它负责把分组从源网络传输到目标网络的路由选择工作。互联网是由多个网络组成在一起的一个集合,正是借助了网络层的路由路径选择功能,才能使得多个网络之间的联接得以畅通,信息得以共享。

第四层:传输层(Transport Layer):

传输层使用网络层提供的网络联接服务,依据系统需求可以选择数据传输时使用面向联接的服务或是面向无联接的服务。

第五层:会话层(Session Layer):

会话层的主要功能是负责维护两个节点之间的传输联接,确保点到点传输不中断,以及管理数据交换等功能。会话层在应用进程中建立、管理和终止会话。会话层还可以通过对话控制来决定使用何种通信方式,全双工通信或半双工通信。会话层通过自身协议对请求与应答进行协调。

第六层:表示层(Presentation Layer):

表示层的主要功能是处理在两个通信系统中交换信息的表示方式,主要包括数据格式变化、数据加密与解密、数据压缩与解压等。在网络带宽一定的前提下数据压缩的越小其传输速率就越快,所以表示层的数据压缩与解压被视为掌握网络传输速率的关键因素。

第七层:应用层(Application Layer):

应用层采用不同的应用协议来解决不同类型的应用要求,并且保证这些不同类型的应用所采用的低层通信协议是一致的。应用层中包含了若干独立的用户通用服务协议模块,为网络用户之间的通信提供专用的程序服务。

各层常见传输协议介绍

了解完OSI七层模型后,我们现在来看看各层常见的一些传输协议

物理层:EIA/TIA-232, EIA/TIA-499, V.35, V.24, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, B8ZS
数据链路层:Frame Relay, HDLC, PPP, IEEE 802.3/802.2, FDDI, ATM, IEEE 802.5/802.2
网络层:IP,IPX,AppleTalk DDP
传输层:TCP,UDP,SPX
会话层:RPC,SQL,NFS,NetBIOS,names,​AppleTalk,ASP,DECnet,SCP
表示层:TIFF,GIF,JPEG,PICT,ASCII,​EBCDIC,encryption,MPEG,MIDI,​HTML
应用层:FTP,WWW,Telnet,NFS,SMTP,​Gateway,SNMP

个人理解,其实对于我们Go语言开发者来说,更多的关注点其实在于网络层之上的一些例如TCP,IP,UDP,FTP,RPC的协议,关于TCP,UDP,IP等协议的相关内容,这里也就不对其做赘述