在TCP连接中,数据流必须以正确的顺序传送给对方。TCP的可靠性是通过顺序编号和确认(ACK)实现的。
TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中,同时启动时钟。然后,如果收到了接收端对该段的ACK信息,就将该段从队列中删去。
如果在时钟规定的时间内,ACK未返回,那么就从发送队列中再次送出这个段。TCP在协议中就对数据可靠传输做了保障,握手与断开都需要通讯双方确认,数据传输也需要双方确认成功,在协议中还规定了:分包、重组、重传等规则;而UDP主要是面向不可靠连接的,不能保证数据正确到达目的地。
TCP通过以下具体方式保证可靠传输
1.确认和重传
接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
TCP是怎么保证错误重传的?
1)接收方受到错误的分组,就直接丢弃,而不做任何操作。
2)发送方在规定的时间(比平均往返时延大一些)没有收到分组的确认分组,就会自动重传。
3)为了让对方知道哪个分组出现了问题,就为分组也编了序号。
2.数据校验
TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分。
但是UDP的检验和字段为可选的,而TCP中是必须有的。
计算方法为:
在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。
3.数据合理分片和排序
TCP会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
4.流量控制
利用滑动窗口实现流量控制,如果发送方把数据发送的过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方降低发送速率,让接收方来得及接收。
时机:目的主机缓冲区变小而不能接收源主机更多的数据时,就要流量控制。
改变接收窗口:可随时改变窗口大小。目的主机在确认时,还向源主机告知目的主机接收缓冲区的大小。
滑动窗口机制:TCP协议里窗口机制有2种,一种是固定的窗口大小、一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。
5.拥塞控制
当网络拥塞时,减少数据的发送。
1)原理:在某段时间,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种情况叫做拥塞。
2)方法:因特网建议标准RFC2581定义了进行拥塞控制的四种算法,即慢开始、拥塞避免、快重传和快恢复。
3)拥塞:交换节点(如路由器)数据报负载国中的现象。ICMP源站抑制报文,是一种被动机制。
4)必要性:在TCP层,拥塞造成时延增加,这又会造成超时重传,控制不当会进一步加重拥塞。TCP采用了一种主动控制机制。