TCP协议在物联网中实战

一、TCP协议介绍

网上对TCP协议介绍众多,本人按照自己的理解简单介绍一下。

TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输控制层通信协议。

1.1 协议机制

1.1.1 三次握手

(图片来自https://baijiahao.baidu.com/s?id=1790500638479044426\&wfr=spider\&for=pc,侵权删)

TCP三次握手的过程如下:

1.客户端发送SYN(seq=x)报文给服务器端,进入SYN_SENT状态。

2.服务器端收到SYN报文,回应一个SYN (seq=y)ACK(ack=x+1)报文,进入SYN_RECV状态。

3.客户端收到服务器端的SYN报文,回应一个ACK(ack=y+1)报文,进入Established状态。

1.1.2 四次挥手

(图片来自:https://cloud.tencent.com/developer/article/2094245)

第一次挥手: 主动关闭的一方(客户端或服务器)发送一个TCP段,其中包含一个FIN标记(Finish),表示它没有数据要发送给对方,但它仍能接收数据。
第二次挥手: 接收到FIN的一方发送一个ACK(Acknowledgement),确认收到FIN。
第三次挥手: 接收到FIN的一方发送一个FIN,表示它也没有数据要发送了,但它仍能接收数据。
第四次挥手: 主动关闭的一方发送一个ACK,确认收到FIN。

在经过2MSL(Maximum Segment Lifetime,最大报文存活时间)后,TCP连接正式结束

1.1.3 拥塞控制

推荐视频:https://www.bilibili.com/video/BV1L4411a7RN/?spm_id_from=333.999.0.0

(1)慢启动 :在连接刚建立时,发送方将初始拥塞窗口设置为一个较小的值(通常是一个报文段的大小)。然后,每当发送方收到一个确认应答时,拥塞窗口就会加倍(指数增长)。这样,发送方会逐渐增加发送的数据量,从而实现慢慢地探测网络的容量。一但出现丢包,就将拥塞窗口减半,进入拥塞避免阶段。

(2)拥塞避免 :一旦拥塞窗口达到一个阈值(通常是网络的带宽和延迟的函数),发送方将进入拥塞避免阶段。在拥塞避免阶段,发送方每收到一个确认应答时,拥塞窗口的增长将变慢(线性增长),谨慎地增加数据发送量,以防止过度拥塞网络。

(3)快速重传 :发送方连续收到3个重复的确认应答时,它会推断某个报文段丢失,并立即重传该报文段,而不等待超时重传的时间。这样可以更快地恢复丢失的报文段,提高传输效率。

(4)快速恢复:当发送方接收到重复确认应答时,它会将拥塞窗口减半,并进入快速恢复阶段。在快速恢复阶段,发送方每收到一个确认应答时,拥塞窗口的增长将变得更慢,并且不再执行慢启动算法,而是执行拥塞避免算法。

1.2 协议报文


1、端口号: 用来标识同一台计算机的不同的应用进程。

1)源端口:源端口和IP地址的作用是标识报文的返回地址。

2)目的端口:端口指明接收方计算机上的应用程序接口。

TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。
2、序号和确认号: 是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。
3、数据偏移/首部长度: 4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
4、保留: 为将来定义新的用途保留,现在一般置0。
5、控制位: URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。

1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。

2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
6、窗口: 滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。
7、校验和: 奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
8、紧急指针: 只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
9、选项和填充: 最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。
10、数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

(参考:https://cloud.tencent.com/developer/article/2054909)

二、物联网中实战

不同物联网平台对协议中所承载的业务内容均有自己的规范,本文基于中国电信AIoT物联网平台进行实战。

2.1 在物联网平台创建产品设备

具体操作流程可见平台操作手册

2.2 交互流程



2.3 报文格式


2.4 代码

见文章顶部

选择合适的示例,更改参数即可。

相关推荐
糖糖单片机设计9 小时前
硬件开发_基于STM32单片机的电脑底座系统
stm32·单片机·嵌入式硬件·物联网·51单片机
蓝蜂物联网1 天前
边缘计算网关赋能智慧农业:物联网边缘计算的创新应用与实践
人工智能·物联网·边缘计算
TDengine (老段)1 天前
TDengine 转化类函数 TO_CHAR 用户手册
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
蓝蜂物联网1 天前
边缘计算网关与 EMCP 物联网云平台:无缝协作,共筑智能生态
人工智能·物联网·边缘计算
远创智控研发五部1 天前
C200H以太网通道服务监控、人机交互与驱动
物联网·数据采集·以太网模块·工业自动化·欧姆龙plc
绿蕉1 天前
中国5G RedCap基站开通情况及2025年全年计划
物联网·5g redcap·蜂窝通讯
熬夜的猪仔2 天前
第五章 Freertos物联网实战 微信小程序篇
物联网·freertos·微信小程序开发
熬夜的猪仔3 天前
第四章 Freertos物联网实战DHT11温湿度模块
物联网·freertos·dht11温湿度模块
WIZnet3 天前
第二十七章 W55MH32 Interrupt示例
物联网·以太网·wiznet·中断·高性能以太网单片机·w55mh32·toe
时序数据说3 天前
时序数据库主流产品概览
大数据·数据库·物联网·时序数据库·iotdb