TCP的流量控制就是TCP接收端对发送端发送多少字节的数据进行控制,防止接收端处理不及而丢失数据。差错控制就是保证接收端接收的数据是完整未受损伤的,是可靠性的重要保证。
这里以TCP连接的建立过程说明流量控制,则流量控制的过程如下:
- TCP发送端向接收端发送一个SYN=1、seqNo=100的连接请求。这里的SYN=1表示一个建立连接的标志位,seqNo表示发送端发送数据的起始字节的编号是100
- 接收端收到SYN=1、seqNo=100的报文后,给客户端发送ACK=1、seqNo=1000、ackNo=101、rwnd=800的响应报文,告诉发送端,我如果向你发送数据则我这边的数据的字节起始编号是1000,而且你刚才发送的连接请求我已经收到了,我下一个希望接收编号是101的字节,还告诉发送端发送窗口是800,并且接收端的接收窗口也是800字节
- 发送端收到后,发送端的连接就建立了,于是给接收端发送ackNo=1001、ACK=1的报文,接收端收到后知道发送端已经收到刚才自己发的报文,所以接收端的连接也建立了。
- 当两边的连接建立后就可以发送数据了,首先发送端发送seqNo=101,Data=200bytes的数据。
- 接收端收到这200字节的数据后,接收窗口由800变为600(因为窗口缓存是800字节),并向发送端发送ACK=1、seqNo=301、rwnd=600的报文,告诉发送端你发送的200字节我已经收到了,下次发送的字节的起始编号是301,你的发送窗口要变为600了
- 发送端收到后,知道刚才发送的200字节一杯确认了,于是把发送窗口向右移动20