博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

TCP的流量控制

Posted on 2011-10-28 10:36  bug yang  阅读(717)  评论(2编辑  收藏  举报

TCP协议通过'''滑动窗口(SlidingWindow)'''机制解决这一问题。

1. 发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6K。发送端应答,三方握手结束。

2. 发送端发出段4-9,每个段带1K的数据,发送端根据窗口大小知道接收端的缓冲区满了,因此停止发送数据。

3. 接收端的应用程序提走2K数据,接收缓冲区又有了2K空闲,接收端发出段10,在应答已收到6K数据的同时声明窗口大小为2K。

4. 接收端的应用程序又提走2K数据,接收缓冲区有4K空闲,接收端发出段11,重新声明窗口大小为4K。

5. 发送端发出段12-13,每个段带2K数据,段13同时还包含FIN位。

6. 接收端应答接收到的2K数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2K。

7. 接收端的应用程序提走2K数据,接收端重新声明窗口大小为4K。

8. 接收端的应用程序提走剩下的2K数据,接收缓冲区全空,接收端重新声明窗口大小为6K。

9. 接收端的应用程序在提走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。


 

syn是该协议中的一个标志位。如果该位被置为1,则表示这个报文是一个请求建立连接的报文。
ack也是该协议的一个标志位。如果该位被置为1,则表示这个报文是一个用于确认的报文。