TCP协议是传输层协议的重点协议,对数据的传输进行一个详细的控制,对数据传输提供的管控机制,主要体现在:安全和效率。在保证安全的前提下,尽可能提高传输效率。
TCP协议结构
说明:
(1)源/目的端口号:表示数据时从哪个进程来,到哪个进程去;
(2)32位序号/32位确认号:序号表示给发送的每一个数据,进行编号;确认号是如果当前的报文时一个普通报文,确认序号不生效;如果是应答报文,确认序号表示应答的哪个普通报文;
(3)4位TCP报头长度:TCP头部还有多少个4个字节,最大位15*4;
(4)6位标志位:确定状态。URG,紧急指针是否有效;ACK,确认号是否有效;PSH,读取在TCP缓冲区的数据;RST,对方要求重新建立连接,称为复位报文段;SYN,请求建立连接,称为同步报文段;FIN,通知将要关闭,称为结束报文段;
(5)16位窗口大小:一次最多发送数据量大小;
(6)16位校验和:校验数据是否正确;
(7)16位紧急指针:标记哪些部分是紧急数据。
TCP协议的可靠性机制
TCP协议的几个特点:有连接、可靠传输、面向字节流、全双工。其中,可靠传输是TCP最核心的部分,TCP内的很多机制,都是在保证可靠传输。可靠传输指的是发送方发送过去后,接收方收没收到,自己是清楚的,而不是发送之后,对方一定能收到。UDP协议就是不可靠传输。那么,如何保证可靠性?使用确认应答的模式,发送方发送过去后,接收方如果接收到,就需要回应。
确认应答
当我给女神发消息的时候,如果我收到女神的回信,那么说明对方是一定收到了的;如果我没收到,估计是对方没看到,或者是对方看到了,但是没理我。这就叫确认应答的方式。发送的消息比较少的时候,还好点,但是消息比较多了,可能出现以下的情况。
很明显,女神回复的“可以”是针对“今晚能一起吃个饭吗”的回答,而“滚”是针对能不能做女票的回答。 还有一种情况,就是网络中常说的后发先至,后发的可能先到,先发的可能后到。
这样的情况下,不能通过顺序,来判断当前的应答报文在应答哪个数据。不过,整个过程可以做一个调整,在报文前加一个标记。对于做女票,回复的什么,对于吃饭,回复的什么。更简单的,可以做编号。
可靠性不等于安全性,和安全性没有任何的关系。安全性指的是数据被截获之后,不容易理解内部的意思或者被篡改,是通过加密来做到的。
确认应答,要针对数据进行编号,然后才能明确,应答报文是在应答哪个数据。TCP通过引入“序号”来减少后发先至