TCP 传输控制协议
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP 传输控制协议相关的知识,希望对你有一定的参考价值。
TCP 传输控制协议
传输层中最重要的两个协议是TCP和UDP,也是我们接触最多且熟悉的,本文将对TCP协议做一个概括性分析。
TCP与UDP的区别
我们都知道 IP 包是没有任何可靠性保证的,一旦发出去,不论是否丢失都只能随它去。在IP层之上,UDP作为一种简单、高效的协议继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。但是TCP(Transmission Control Protocol, 传输控制协议)作为一种可靠的,面向连接、基于字节流的协议,在可靠通信的实现方面提供了许多有效的机制。
TCP提供的保障可靠传输的机制主要有:把应用程序数据组包成报文段,发送数据时设置超时,确认被其他端点接收到的数据,给次序杂乱的数据进行重新排序,丢弃重复的数据,提供端到端的校验和等。
重传
通信媒介可能会丢失或改变被传递的消息,一个直接处理分组丢失(和比特差错)的方式是重发分组直到它被正确的接收。这需要一种方法来进行判断:
- 接收方是否已经收到分组
- 接收方收到的分组是否与之前发送方发送的一样
我们知道TCP使用确认ACK机制,即接收方给发送方发信号以确定自己已经接收到一个分组。最基本的形式是,发送方发送一个分组,然后等待一个ACK;当接收方接收到这个分组时,它发送对应的ACK,当发送方接收到这个ACK,它再发送另一个分组。这个过程就这样继续。这里需要考虑几个问题:1)发送方对一个ACK应该等待多长时间?2)如果ACK丢失了怎么办?3)如果分组被接收到了,但是里面有错怎么办?
正如我们看到的,对于第一个问题,等待多长时间以判定一个分组已丢失并将它重发对性能有很大影响。若这个时间过短会引起不必要的重传,过长的话又会使性能下降。直观上看,发送方在重发一个分组之前应等待的时间大概是几个时间的总和:发送分组所用的时间,接收方处理它和发送一个ACK所用的时间,ACK返回到发送方所用的时间,以及发送方处理ACK所用的时间。TCP协议实现尝试去估计这些时间,即RTT(round-trip-time estimation, 往返时间估计)。根据采样的RTT 进行加权得到重传时间。
对于第二个问题,如果ACK丢失了,发送方可以再次发送原分组,当然接收方可能收到重复的分组,因此必须处理这种重复的情况。对于这种情况,TCP使用序列号来处理,基本上,在被源端发送时,每个唯一的分组都有一个新的序列号,接收方可以使用这个序列号来判断它是否已经见过这个分组,若见过则丢弃它。
对于第三个问题,如果分组中存在错误,可以使用校验和的方式检测分组中的差错;当一个接受方接受到一个含有差错的分组时,它不发送ACK,最后发送方重发完整的无差错的分组。
以上是关于TCP 传输控制协议的主要内容,如果未能解决你的问题,请参考以下文章