2、序列号
TCP将每个字节的数据都进行了编号,这就是序列号。
序列号的作用:
- 保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道);
- 保证数据的按序到达;
- 提高效率,可实现多次发送,一次确认;
- 取出重复数据
- 数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现。
3、确认应答机制(ACK)
TCP通过确认应答机制实现可靠的数据传输,在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确定首部的确认字段有效。
4、超时重传机制
- 第一种情况:数据包丢失,当数据发出后在一定的时间内未收到接受方的确认,发送方就会进行重传(特定时间间隔内)。
- 第二种情况:确认包丢失,当接收方收到重复数据(通过序列号进行识别)的时候将其丢弃,重新发送ACK。
5、连接管理控制
- 三次握手和四次挥手
6、流量控制
接收端处理数据的速度是有限的,如果双方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会导致丢包,继而引起丢包重传等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫流量控制。
在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16位窗口长度,当接收端接受到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接受方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口设置为0,发送方收到后将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。
7、拥塞控制
如果出现拥塞,分组将会出现丢失,此时发送方会继续重传,从而导致网络堵塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同,流量控制是为了让接受方能来得及接受,而拥塞控制是为了降低整个网络的拥塞程度。
拥塞控制方法分为:慢开始、拥塞避免、快重传和快恢复。
1、发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。
- 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但是要网络出现拥塞,拥塞窗口就减少一些。
- 判断出现网路拥塞的依据:没有按时收到应当到达的确认报文(发生超时重传)。
2、方法方将拥塞窗口作为发送窗口,即swnd=cwnd。
3、维护一个慢开始门限ssthresh状态变量:
- 当cwnd=ssthresh时,使用慢开始算法;
- 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
传输过程:
RRT:一个传输轮所经历的时间就是往返时间RRT,一个传输轮次就是发送方给接受方发送数据报文段,接收方给发送方发回相应的确认报文段的过程。
- 在TCP双方建立逻链连接关系时,拥塞窗口cwnd的值被设置为1,还需设置慢开始门限sstresh,然后执行慢开始算法,发送发每收到一个对新报文段的确认时,拥塞窗口的值就增大(指数增长)。
- 当拥塞窗口增长到慢开始门限值时,使用拥塞避免算法,拥塞窗口线性增长(每次+1)。
- 当发生超时重传时,说明可能发生了网络拥塞,将慢开始门限的值更新为发生拥塞是拥塞窗口的一半;将拥塞窗口值变为1,并重新开始执行慢开始算法。
(1)慢开始:从1开始指数增长到限定大小的过程。
一开始cwnd=1,而发送窗口等于拥塞窗口,因此发送方只能发送一个数据报文段,接受方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2。发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文段后,将拥塞窗口的值变为4,发送方此时可以连续发送4个报文段…
当拥塞窗口cwnd的值等于慢开始门限值时,采用拥塞避免算法。
(2)拥塞避免:超过限定大小之后线性增长的过程,以及发现丢包(发生了拥塞)后将拥塞窗口改为1,并把限定大小减半的过程。
每个传输轮次,拥塞窗口cwnd只能线性加1,并非指完全能够避免拥塞,而是只在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。当发生超时重传时,ssthresh=cwnd/2,cwnd=1。重新开始慢开始算法。
慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本),但有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这就导致发送发超时重传,并误认为网络发生了拥塞。发送方错误启动慢开始算法,从而降低传输效率。
(3)快重传:发送方只要一连接收到三个重复确认就应该立即重传对方尚未的接受的报文段,而不必等重传计时器超时后发送。由3个重复应答判断有包丢失,重新发送丢包的信息。