通讯协议篇(底层TCPUDP;上层MQTT、HTTP、CoAP、DDS、AMQP、
JMS;。。。
通讯协议篇(底层TCP/UDP;上层MQTT、HTTP、CoAP、DDS、AMQP、JMS;实现层RabbitMQ、ActiveMQ、Kafka)
1、TCP/IP⽹络模型介绍
计算机与⽹络设备要相互通信,双⽅就必须基于相同的⽅法。⽐如,如何探测到通信⽬标、由哪⼀边先发起通信、使⽤哪种语⾔进⾏通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这⼀切都需要⼀种规则。⽽我们就把这种规则称为协议(protocol)。
TCP/IP 是互联⽹相关的各类协议族的总称,⽐如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。
TCP/IP模型是互联⽹的基础,它是⼀系列⽹络协议的总称。这些协议可以划分为四层,分别为链路层、⽹络层、传输层和应⽤层。
1. 链路层:负责封装和解封装IP报⽂,发送和接受ARP/RARP报⽂等。
2. ⽹络层:负责路由以及把分组报⽂发送给⽬标⽹络或主机。
3. 传输层:负责对报⽂进⾏分组和重组,并以TCP或UDP协议格式封装报⽂。
4. 应⽤层:负责向⽤户提供应⽤程序,⽐如HTTP、FTP、Telnet、DNS、SMTP等。
在⽹络体系结构中⽹络通信的建⽴必须是在通信双⽅的对等层进⾏,不能交错。 在整个数据传输过程中,数据在发送端时经过各层时都要附加上相应层的协议头和协议尾(仅数据链路层需要封装协议尾)部分,也就是要对数据进⾏协议封装,以标识对应层所⽤的通信协议。接下去介绍TCP/IP 中有两个具有代表性的传输层协议----TCP 和 UDP
2、TCP协议介绍
当⼀台计算机想要与另⼀台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看⽹页或查看电⼦邮件时,希望完整且按顺序查看⽹页,⽽不丢失任何内容。当你下载⽂件时,希望获得的是完整的⽂件,⽽不仅仅是⽂件的⼀部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就⽤到了TCP。
TCP协议全称是传输控制协议是⼀种⾯向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是⾯向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排⽔管中的⽔流。
1. TCP连接过程
如下图所⽰,可以看到建⽴⼀个TCP连接的过程为(三次握⼿的过程):
第⼀次握⼿
客户端向服务端发送连接请求报⽂段。该报⽂段中包含⾃⾝的数据通讯初始序号。请求发送后,客户端便进⼊ SYN-SENT 状态。
第⼆次握⼿
服务端收到连接请求报⽂段后,如果同意连接,则会发送⼀个应答,该应答中也会包含⾃⾝的数据通
讯初始序号,发送完成后便进⼊ SYN-RECEIVED 状态。
第三次握⼿
当客户端收到连接同意的应答后,还要向服务端发送⼀个确认报⽂。客户端发完这个报⽂段后便进⼊ ESTABLISHED 状态,服务端收到这个应答后也进⼊ ESTABLISHED 状态,此时连接建⽴成功。
这⾥可能⼤家会有个疑惑:为什么 TCP 建⽴连接需要三次握⼿,⽽不是两次?这是因为这是为了防⽌出现失效的连接请求报⽂段被服务端接收的情况,从⽽产⽣错误。
2. TCP断开链接
TCP 是全双⼯的,在断开连接时两端都需要发送 FIN 和 ACK。
第⼀次握⼿
若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。
第⼆次握⼿
B 收到连接释放请求后,会告诉应⽤层要释放 TCP 链接。然后会发送 ACK 包,并进⼊ CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
第三次握⼿
B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进⼊ LAST-ACK 状态。
第四次握⼿
A 收到释放请求后,向
B 发送确认应答,此时 A 进⼊ TIME-WAIT 状态。该状态会持续 2MSL(最⼤段⽣存期,指报⽂段在⽹络中⽣存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进⼊ CLOSED 状态。当 B 收到确认应答后,也便进⼊ CLOSED 状态。
3. TCP协议的特点
1. ⾯向连接
⾯向连接,是指发送数据之前必须在两端建⽴连接。建⽴连接的⽅法是“三次握⼿”,这样能建⽴可靠的连接。建⽴连接,是为数据的可靠传输打下了基础。
2. 仅⽀持单播传输
每条TCP传输连接只能有两个端点,只能进⾏点对点的数据传输,不⽀持多播和⼴播传输⽅式。
3. ⾯向字节流
TCP不像UDP⼀样那样⼀个个报⽂独⽴地传输,⽽是在不保留报⽂边界的情况下以字节流⽅式进⾏传输。
4. 可靠传输
对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报⽂传输的可靠,就给每个包⼀个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回⼀个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
5. 提供拥塞控制
当⽹络出现拥塞的时候,TCP能够减⼩向⽹络注⼊数据的速率和数量,缓解拥塞
6. TCP提供全双⼯通信
TCP允许通信双⽅的应⽤程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,⽤来临时存放双向通信的数据。当然,TCP可以⽴即发送⼀个数据段,也可以缓存⼀段时间以便⼀次发送更多的数据段(最⼤的数据段⼤⼩取决于MSS)
3、UDP协议介绍
UDP协议全称是⽤户数据报协议,在⽹络中它与TCP协议⼀样⽤于处理数据包,是⼀种⽆连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上⼀层。UDP有不提供数据包分组、组装和不能对数据包进⾏排序的缺点,也就是说,当报⽂发送之后,是⽆法得知其是否安全完整到达的。
UDP协议的特点
1. ⾯向⽆连接
⾸先 UDP 是不需要和 TCP⼀样在发送数据前进⾏三次握⼿建⽴连接的,想发数据就可以开始发送了。并且也只是数据报⽂的搬运⼯,不会对数据报⽂进⾏任何拆分和拼接操作。
具体来说就是:
在发送端,应⽤层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加⼀个 UDP 头标识下是 UDP 协议,然后就传递给⽹络层了
在接收端,⽹络层将数据传递给传输层,UDP 只去除 IP 报⽂头就传递给应⽤层,不会任何拼接操作
2. 有单播,多播,⼴播的功能
UDP 不⽌⽀持⼀对⼀的传输⽅式,同样⽀持⼀对多,多对多,多对⼀的⽅式,也就是说 UDP 提供了单播,多播,⼴播的功能。
3. UDP是⾯向报⽂的
发送⽅的UDP对应⽤程序交下来的报⽂,在添加⾸部后就向下交付IP层。UDP对应⽤层交下来的报⽂,既不合并,也不拆分,⽽是保留这些报⽂的边界。因此,应⽤程序必须选择合适⼤⼩的报⽂
4. 不可靠性
⾸先不可靠性体现在⽆连接上,通信都不需要建⽴连接,想发就发,这样的情况肯定不可靠。
并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关⼼对⽅是否已经正确接收到数据了。
再者⽹络环境时好时坏,但是 UDP 因为没有拥塞控制,⼀直会以恒定的速度发送数据。即使⽹络条件不好,也不会对发送速率进⾏调整。这样实现的弊端就是在⽹络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求⾼的场景(⽐如电话会议)就需要使⽤ UDP ⽽不是 TCP。
从上⾯的动态图可以得知,UDP只会把想发的数据报⽂⼀股脑的丢给对⽅,并不在意数据有⽆安全完整到达。
5. 头部开销⼩,传输数据报⽂时是很⾼效的。
UDP 头部包含了以下⼏个数据:
1.两个⼗六位的端⼝号,分别为源端⼝(可选字段)和⽬标端⼝
2.整个数据报⽂的长度
3.整个数据报⽂的检验和(IPv4 可选 字段),该字段⽤于发现头部信息和数据中的错误
因此 UDP 的头部开销⼩,只有⼋字节,相⽐ TCP 的⾄少⼆⼗字节要少得多,在传输数据报⽂时是很⾼效的
4、TCP/UDP协议对⽐
以下是两者的对⽐图
5、上层的MQTT、HTTP、CoAP、DDS、AMQP、JMS
1、MQTT
1、MQTT的介绍
MQTT (Message Queuing Telemetry Transport ),消息队列遥测传输,由IBM开发的即时通讯协议,相⽐来说⽐较适合物联⽹场景的通讯协议。MQTT协议采⽤发布/订阅模式,所有的物联⽹终端都通过TCP连接到云端,云端通过主题的⽅式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。
适⽤范围:在低带宽、不可靠的⽹络下提供基于云平台的远程设备的数据传输和监控。
MQTT协议⼀般适⽤于设备数据采集到端(Device-》Server,Device-》Gateway),集中星型⽹络架构(hub-and-spoke),不适⽤设备与设备之间通信,设备控制能⼒弱,另外实时性较差,⼀般都在秒级。
2、HTTP
1、HTTP的介绍
HTTP协议是典型的CS通讯模式,由客户端主动发起连接,向服务器请求XML或JSON数据。该协议最早是为了适⽤web浏览器的上⽹浏览场景和设计的,⽬前在PC、⼿机、pad等终端上都应⽤⼴泛,但并不适⽤于物联⽹场景。在物联⽹场景中其有三⼤弊端:
1. 由于必须由设备主动向服务器发送数据,难以主动向设备推送数据。
2. 安全性不⾼。
通信协议3. 不同于⽤户交互终端如pc、⼿机,物联⽹场景中的设备多样化,对于运算和存储资源都⼗分受限的设备,http协议实现、XML/JSON
数据格式的解析,都是不可能的任务。
REST/HTTP(松耦合服务调⽤)
REST/HTTP其实是互联⽹中服务调⽤API封装风格,物联⽹中数据采集到物联⽹应⽤系统中,在物联⽹应⽤系统中,可以通过开放REST API的⽅式,把数据服务开放出去,被互联⽹中其他应⽤所调⽤。
适⽤范围:REST/HTTP主要为了简化互联⽹中的系统架构,快速实现客户端和服务器之间交互的松耦合,降低了客户端和服务器之间的交互延迟。因此适合在物联⽹的应⽤层⾯,通过REST开放物联⽹中资源,实现服务被其他应⽤所调⽤。
3、CoAP
1、CoAP的介绍
CoAP (Constrained Application Protocol),受限应⽤协议,应⽤于⽆线传感⽹中协议。
适⽤范围:CoAP是简化了HTTP协议的RESTful API,CoAP是6LowPAN协议栈中的应⽤层协议,它适⽤于在资源受限的通信的IP⽹络。
4、DDS
1、DDS的介绍
DDS(Data Distribution Service for Real-Time Systems),⾯向实时系统的数据分布服务,这是⼤名⿍⿍的OMG组织提出的协议,其权威性应该能证明该协议的未来应⽤前景。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论