您现在的位置是:首页 >技术教程 >【网络原理】TCP协议如何实现可靠传输(确认应答机制)网站首页技术教程
【网络原理】TCP协议如何实现可靠传输(确认应答机制)
?作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。
本篇主要讲解:TCP协议段格式,TCP的序列号,SYN、ACK标志位,确认应答机制。
目录
1、TCP协议段格式
1.1 TCP格式段
TCP协议段(Segment)是在数据传输层中,用于实现两个进程之间可靠的数据传输。
源端口/目的端口:源端口为数据的发送者,目的端口为数据的接受者。
32位序号/确认号:TCP将每个字节的数据都进行了编号即为序列号。
TCP标志位:TCP的6位标志位默认为0,当返回相应的报文时,会把该报文位设置位1。
URG(Urgent):表示是否包含紧急数据。
ACK(Acknowledgment):表示确认号是否有效。
PSH(Push):表示是否立即推送。
RST(Reset):表示连接是否复位。携带RST标识的称为复位报文段。
SYN(Synchronize):表示同步请求/应答。携带SYN标识的称为同步报文段
FIN(Finish):表示传输结束。携带FIN标识的为结束报文段。
了解到 TCP 的协议格式段后,我们来模拟观察网络通信过程:
通过上图,我们观察到 主机A 向 主机B 传输数据时,提供了以 1000 为单位的编号。这些编号称为 序列号。
我们可认为 主机A 向 主机B 发送数据为一个请求 即 SYN。TCP给这个请求随机分配一个序列号。
并且 主机B 在收到 主机A 的数据后会作出回应,这个回应称之为 即 ACK。只有接收方返回 ACK 后,这样的通信才算完成。
确认序列号 的是序列号的下一个字节数。当 SYN 请求序列号为 1000,则 ACK 确认序列号为 1001,对照上图、下图进行理解。
注意,当ACK=1时,表示TCP报文段中确认号字段有效,因此需要对它进行确认应答。ACK的应答是 TCP 可靠传输 机制的关键。
1.2 TCP协议段格式
TCP协议段格式如下所示:
16位源端口号 16位目的端口号
--------------------------------
32位序列号
--------------------------------
32位确认号
--------------------------------
4位数据偏移 6位保留 6位标志位
--------------------------------
16位窗口大小
--------------------------------
16位校验和 16位紧急指针
--------------------------------
选项(可选,长度不定)
源端口号和目的端口号:分别表示发送方和接收方的端口号。
序列号:表示发送方发送数据的序列号,用于接收方确认收到的数据是否完整。
确认号:表示期望接收到的下一个数据的序列号。
数据偏移:表示TCP头部长度占多少个32位字长。
保留:用于将头部填充到32位字长的长度。
标志位:包括6个标志位,分别为URG、ACK、PSH、RST、SYN和FIN,用于控制TCP连接的建立、维护和关闭等操作。
窗口大小:表示接收方缓存区的大小。
校验和:用于检查TCP头部和数据的完整性。
紧急指针:表示数据中包含的紧急数据在数据流中的位置。
选项:可选的TCP头部选项,用于支持一些额外的功能。
2、确认应答机制
TCP 在通信过程中,TCP认为发送方发送的数据为: SYN ,即发出一个请求。接受方返回的数据为:ACK,即确切请求有效。
当我们进行信息传输时,我发信息给张三:“你吃饭了吗?”,张三回复:“吃了,你呢?”。
网络应当是以下场景:
但网络通信的过程中由于特殊情况难免会出差错,则会造成 先发后至 的情况,即先发的消息被后返回的消息回应。
2.1 后发先至
有以下通信场景:
我:“一起吃个饭吗,我请客?”,张三回复:“好啊,好啊”。
我:“你借我 500 块钱”,张三回复:“滚蛋”。
正常情况如下所示:
由于先发后置:
由于先发后至,导致:
我:“一起吃个饭,我请客?”,张三回复“滚蛋”。
我:“你借我 500 块钱”,张三回复“好啊,好啊”。
这样就会造成数据不可靠传输。因此,TCP协议在网络通信中会将信息传输的过程引入一个 确认序号 来保证数据传输可靠性。
2.2 确认序号
TCP 在网络通信过程中,会根据信息的发送顺序来引入相应的确认号。即发送方序列号,接受方为确认序列号,确认序列号为序列号下一个字节数。
在上图中,1000序列号对应的消息只会被1001确认序列号回复,2000序列号的消息只会被2001确认序列号回复。
注意,TCP在通信的过程中会 随机 给发送方提供序列号,接收方根据序列号来返回确认序列号这样在传输过程中就相对安全了。
以上TCP通信过程中,引入了序列号来保证数据可靠传输,但还有在网络通信中由于网络不好(丢包,网卡等)会造成数据传输不了,因此TCP还会通过 超时重传 机制来保证数据安全传输。在下期博文我会详细讲解。
本编博文到这里就结束了,感谢点赞、评论、收藏、关注~