传输层 使用滑动窗口实现流量控制

滑动窗口机制


流量缓冲:解决速度不匹配问题(客户端和服务器,这两端的速度是完全不一致的,机器性能不一致,这个时候处理的速度是不配的

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。

TCP会话的双方都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制。发送窗口则取决于对端通告的接收窗口。

接收方发送的确认报文中的window字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将接收方的确认报文window字段设置为 0,则发送方不能发送数据。

TCP头包含window字段,16bit位,它代表的是窗口的字节容量,最大为65535。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。接收窗口的大小是约等于发送窗口的大小。

流量控制是指发送端给接收端发的太快了,接收端可以告诉它发慢点。(滑动窗口实现流量控制,流量控制是接收方控制发送方)

接收端设置窗口,发送端根据接收端的窗口来设置发送窗口,在整个通信过程当中窗口是可以调整的。

在上面建立连接的时候就有窗口字段64240个字节,最大的数据段为1460,网卡的最大传输单元MTU数据链路层的最大传输单元是1500个字节,网络层的首部为20个字节,传输层的首部是20个字节,那么数据就变为1460个字节。那么滑动窗口64240/1460就可以连续发44个数据包。

同时还可以支持选择性确认SACK_PERM=1。

在建立TCP连接的时候就可以协商这些参数,接收窗口是多大,MSS是多少,然后支持选择性确认。

确认里面数据的长度都是为0的,在给确认的时候就指定了窗口的大小,可以看到窗口是可以调整大小的。接受窗口变小那么发送窗口也随之变小,发送端发的就不那么快了。

 b告诉a,它的接受窗口是400,段最大为100个字节,在发的时候1 2到了 3丢了,给它确认,让它发送第三个数据包,然后窗口开始移动,然后发第4 5个再发第3个,收到之后给它确认。。。。。。。。

窗口变为0之后就不再发了,发送端就停止了,处理之后再发确认,窗口再调整为400。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/125535103