基于PLC1850平台的传输控制协议TCP实现
一、传输控制协议(TCP)
传输控制协议(TCP)是一种功能完备的面向连接的传输协议,具有流控制、运输确认和重传机制。TCP是为了给应用提供一种可靠的、以字节流的形式发送数据的方法而设计的。使用不可靠的网际协议在Internet上传送报文。
二、TCP特点
①、面向连接:在设备之间发生数据传送之前,必须先建立一个连接。
②、多连接:TCP提供了一种标识连接的方法,允许一个设备有多个连接打开而不会产生冲突,不管是与同一个IP设备还是与不同的IP设备连接。
③、全双工:一旦建立连接,数据可以在两个方向传输。
④、面向流:即使IP以数据块的方式工作,TCP也允许以连续字节流的方式发送数据。TCP必须将数据打包成块后再将其交给IP。
⑤、非结构化数据:由于数据是以字节流的形式传送,所以没有办法在流的内部分割数据元素。因此,应用必须提供一种知道如何处理这种情况的方法。假设应用将3个数据库记录作为一个流传递给TCP,TCP只会将其视为一条信息。目的用户必须知道如何将该数据分割成原始的3个数据库记录。
⑥、可靠:由于TCP保证所有发送的数据项都能到达其目的地,故通讯是可靠的。
⑦、确认:TCP发送的每一个报文都要被接收方确认,这样TCP就知道一个报文是否到达,并可重传丢失的数据。
⑧、流控制:当一个设备以某个速率发送数据而接收设备来不及处理时,TCP提供了一种机制,使接收设备能通知发送设备降低其发送速率,或者完全停止发送数据,直到接收设备能重新开始接收为止。
⑨、进程编址:由于同一设备上可同时运行不同的进程或应用,共享同一个IP地址,故TCP提供了一种标识每个进程和以复用方式将数据传输给IP层的方法。在接收端,TCP必须以分用方式将数据传给目的进程,由端口号来实现。
三、TCP报文格式
源端口(2个字节):源设备上发送报文段的进程16位端口号。一般来说,对于请求报文是一个客户进程,对于应答报文是一个服务器进程。
目的端口(2个字节):目的设备上的接收进程的16位端口号。一般来说,对于请求报文是一个服务器进程,对于应答报文是一个客户进程。
序号(4个字节):由滑动窗口确认系统使用,作为报文段中第一个字节的序号。在SYN位置1的情况下(连接请求报文),它指示初始序号(ISN)。
确认号(4个字节):如果ACK位置1,该字段有效并包含设备用于对接收到的数据进行确认的确认号。
数据偏移(4个字节):指示数据的开始位置与TCP报文段的开始处有多少个32位字的偏移量。该值必须乘以4才能得到字节数表示的偏移量(1字=4字节)。
保留(6位):保留为将来使用,必须为0。
控制位(6位):用于控制信息。URG(紧急位):如果置1,表示该报文段包含紧急数据,由紧急指针字段指示其位置。
ACK(确认位):如果置1,表示该报文段是一个确认报文,并且确认号字段有效。
PSH(推送位):如果置1,该报文段中的数据必须被立即发送并被推送给接收设备上的应用程序。否则,该数据将要等到更
多的数据传给TCP,达到报文段长度后才被发送。
RST(复位位):如果置1,表示发送者检测到一个问题并希望对连接进行复位。
SYN(同步位):如果置1,表示该报文请求对序号同步并建立一个连接。序号字段包含发送者用于该连接的初始序号(ISN)。
FIN(结束位):如果置1,表示该报文段的发送者请求关闭连接。
窗口(2个字节):用于流控制,指示该报文段的发送者在一段给定的时间内能从其他设备接受的字节数。
校验和(2个字节):提供错误检测功能的16位校验和。
紧急指针(2个字节):如果URG位置1,该字段包含紧急数据后面的“正常”数据第一个字节的序号。
选项(可变长度):可以包含在TCP报文段中的一组选项。
填充(可变长度):如果选项字段的长度不是32位的整数倍,则需要用足够的0值字节来填充首部。
数据(可变长度):报文段中要发送的数据字节。
四、TCP报文段首部选项
TCP报文段首部可以包含0个、1个或多个选项,每个选项又可以是1个字节或多个字节。选项的长度是8位的整数倍,选项字段的总长度必须是32位的整数倍。
五、TCP校验和计算
TCP校验和是所计算字段的16位反码和的反码。格式如下:
六、TCP连接:建立、管理和终止
连接状态如下:
CLOSED:代表没有任何连接的初始状态。
LISTEN:代表服务器在等待来自任何客户的连接请求。
SYN-SENT:代表客户在发送了一个连接请求(SYN报文)后等待服务器的确认和SYN报文。
SYN-RECEIVED:代表服务器在接收到客户请求和发送完确认报文及自己向客户的请求后等待客户的确认。
ESTABLISHED:代表打开了一个连接。该状态可以进行数据传送。
FIN-WAIT1:代表正在等待对已发送的终止请求的确认。
FIN-WAIT2:代表设备在已经发送了终止请求并且收到了确认报文情况下,正在等待来自另一设备的终止请求。
CLOSING:代表同时关闭的情况。设备发送了一个终止请求,在接收到其确认之前,收到了来自另一设备的终止请求。
TIME-WAIT:代表正在等待超时,以确保远端设备接收到对其终止请求的确认。
CLOSE-WAIT:代表正在等待来自应用的终止请求。
LAST-ACK:代表正在等待对其已发送的终止请求的确认。
①、建立连接
连接建立过程有3个目标:
启动通信:客户通过发送SYN报文(SYN标志置1的TCP报文段)来发起连接请求,该报文由服务器确认。服务器也发生一个SYN报文(在同一个报文中对客户的请求进行确认),该报文由客户确认。在客户和服务器之间的报文交换过程中,实现下面两个目标的一些信息已经被发送。
序号同步:每个设备都将自己第一次发送要使用的初始序号通知对方。
TCP选项参数交换:设备之间交换在TCP连接期间要使用的一些TCP选项。
②、连接管理
一旦连接建立,两个设备即可开始互相传送数据。如果连接建立期间出现了问题,TCP连接管理功能必须负责。连接的两个设备将一直保持在建立状态,直到下面的条件之一发送:
连接终止:一个设备(在同时终止的情况下是两个设备)发送了终止请求报文。
连接中断:出现了某些问题,使连接被中断。
③、连接终止
七、TCP常见应用