如果发送方把数据发送的太快,接收方可能会来不及接收,这就会造成数据的丢失。
流量控制就是让发送方的发送速率不要太快,利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
发送方的发送窗口不能超过接收方的接收窗口的数值。TCP窗口单位是字节,不是报文段。
image.png设A向B发送数据,建立连接时,B告诉A:“我的接收窗口是rwnd=400”(rwnd:receiver window)。因此,发送方A的发送窗口不能超过接收方B的接收窗口。假设每一个报文段长度为100字节,而报文段序号的初始值设为1。大写ACK表示首部中的确认ACK,小写ack(假设值为201)表示接收方希望接收编号从201开始的字节。
从图中可以看出,B进行了三次流量控制。第一次把窗口减少到rwnd=300,第二次又减少到rwnd=100,第三次减少到rwnd=0,0表示不允许发送方再发送数据。这种使发送方暂停发送的状态将持续到接收方B重新发出一个新的窗口值为止。
TCP为每一个连接设置了一个持续计时器。当TCP连接的发送方收到接收方的零窗口通知时,发送方就启动持续计时器。若持续计时器设置的时间到期,发送方就发送一个零窗口控测报文段(携带1字节数据)给接收方。如果接收方可以接受数据,就重新开始发送数据;如果接收方不能接受数据,就重新设置持续计时器。
以上内容参考自: https://github.com/hadyang/interview/blob/master/basic/net/tcp.md
《TCP/IP协议族》第四版
网友评论