其他层次和协议

315 阅读3分钟

传输层

传输层主要有TCP和UDP两个协议我们需要知道,这一层传输的是报文段。顾名思义,传输层的协议就是用来把应用层报文从一个端传送到另一个端。应用层的报文,比如http报文,可以通过TCP或UDP来传输。

其区别是: TCP协议是面向连接的服务,它能确保报文被传送到目的地,如果目的地没收到,会重新传。

UDP协议是无连接的服务,它不管三七二十一,只把报文发出去,不管到底有没有被目的地接收到。

以TCP为例,它有自己的报文段格式,前面应用层的整个报文,作为它的报文段里的业务数据来传输。我们可以想象一个快递包裹,它里面装的是真实业务数据,然后从应用层开始,每一层都会在这个包裹外面再包一层包裹,并在包裹皮上写上这一层自己定义的一些数据。

扩展阅读:TCP的三次握手建立链接 了解TCP是如何通过三次握手建立连接的。另外,感兴趣的话可以去搜索TCP的报文段组成格式,进一步了解TCP协议。

网络层

网络层负责传输数据报,同样,数据报里的主要内容就是传输层的报文段。

网络层的主要协议是IP协议,其他还有一些路由选择协议。

链路层

链路层传输的数据称为帧。链路层的例子包括以太网、WiFi、电缆接入网的DOCSIS协议等。

物理层

物理层的作用是把链路层的帧,一个bite一个bite地从一个节点传输到另一个节点。物理层协议与链路层相关。

其他协议

前面也说了,大部分应用层程序的接口测试是使用http协议的,但是,还有一些是其他协议,包括自定义的协议。比如Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,它支持一些协议:dubbo,rmi,hessian,webservice,thrift,memcached,redis,http

这里可以看到http只是其中一个协议,如果你的项目组使用Dubbo之类的支持多种协议的框架来做开发,那么你的接口测试也可能需要支持不同协议。虽然这些协议看上去很多,很复杂,但实际上,我们做接口测试的原理都是一样的,参考对http接口的接口测试原理,不同协议的区别只是封报文的格式不同,或加了一些特殊限制,又或者是所基于的传输协议不同。

请看下图示例: image.png 在这张图里,我们看到,一个IP协议的报文的数据不问包含了完整的TCP报文。而TCP协议的报文数据部分又包含了完整的HTTP报文。同样在这个HTTP报文的数据部分也可以再包含其他协议的完整报文,比如webservice协议报文。

对于这么多协议要怎么在接口测试的脚本中处理,我们按照以下原则来做:

  1. 先找现成的实现了这个协议的第三方库 2.没有第三方库时使用它下一层的协议的库来实现一个库。

举个例子,我在洛基亚公司时,我们做一个内部自制协议的工具的测试开发,没有现成的库给我调用。因为这个协议是由TCP协议来传输的,我们就基于TCP协议的库来实现了一个这个协议的库。感兴趣的同学可以在搜索引擎里搜索关键字socket套接字自行查阅相关资料。