TCP传输的特点
- 面向连接
- 可靠传输
- 面向字节流
- 流量控制
- 拥塞控制
面向连接
-
数据传输开始之前,需要建立连接:三次握手
为什么三次握手?
主要解决的是超时的场景,防止建立多次连接。
client发送的SYN若是超时,client基于超时重传机制,会重新发送SYN;server收到SYN,回复SYN/ACK,若是两次握手连接立成功,那么先前超时的SYN到达server后,server就会认为需要建立一条新的连接。若是三次握手的话,client就需要给server再发送一条ACK。server收到ACK后,才会建立连接。client收到超时产生的SYN/ACK,由于已经发送过ACK了,就不再发送,因此不会再建立一条新的连接。
-
数据传输结束之后,需要释放连接:四次挥手
TCP建立的连接是全双工的,client可以给server发送数据,server也可以给client发送数据。因此,在关闭连接的时候,需要双方面的释放。
可靠传输
可靠传输的特点
- 无差错
- 不丢失
- 不重复
- 按序到达
可靠传输,是通过停止等待协议实现的
-
无差错情况
-
超时重传
-
确认丢失
-
确认迟到
面向字节流
图中10、11、12为发送方TCP缓存,2、3、4为接收方TCP缓存。
面向字节流,就是不论发送方发送多少字节的数据,TCP都会根据自己的实际情况,对数据进行拆分或合并进行发送
流量控制
流量控制,是基于滑动窗口协议实现的
比如发送方通过一个高速网络向处于低速网络的接收方发送数据,由于接收方数据传输速率低,缓存很容易堆满。接收方返回确认报文的时候,通过头字段告诉发送方还可以接收的数据大小。发送方根据这个值,动态调整发送窗口,以达到流量控制的目的。
拥塞控制
- 慢开始(慢启动)、拥塞避免
- 快恢复、快重传