TCP滑动窗口杂陈
2016-04-23 19:26
435 查看
查阅相关资料整理如下,以便以后方便查看。
滑动窗口协议
滑动窗口通过序列号来进行控制,对于tcp流式数据包,每个字节都对应一个序列号,体现在tcp头部信息中就是,序列号以及选项中的MSS来体现:
比如:PSH1:1025(1024)就是一个数据类型,由于通告窗口为4096,所以窗口大小为4(4*1024=4096)
![](http://s3.sinaimg.cn/mw690/001JAT05gy6DE1Zv8eSf2&690)
上图中发送数据如seq=101 win=3 就是将数据段101发送至发送缓冲区,即PUSH 101:101(1) ack(1),win=3
1.窗口滑动形式
1.1窗口合拢
1.2窗口张开
1.3窗口收缩
1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。(通告窗口大小控制)
3) 当右边沿向左移动时,我们称之为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但T C P必须能够在某一端产生这种情况时进行处理。第2 2 . 3节给出了这样的一个例子,一端希望向左移动右边沿来收缩窗口,但没能够这样做。
图2 0 - 5表示了这三种情况。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的A C K,则它被认为是一个重复A C K,并被丢弃。
如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。(使用零窗口控制无法发送数据)
文件传输控制发送数据以及接受数据的缓冲区大小可以提高下效率,4096不是最高效的,使用16384可以提升40%的效率
PUSH标志的作用:
发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与P U S H一起传送的数据以及接收方TC P已经为接收进程收到的其他数据。
对于一个客户端设置此标志的tcp,向服务端发送数据,等待响应,设置此标志,将告诉tcp,不要因为等待服务端的响应而不去处理其他缓冲区的数据。同样在服务端,收到此标记的链接,它将立即将数据交付给上层,而不会考虑是否还会有数据到达。
滑动窗口协议
滑动窗口通过序列号来进行控制,对于tcp流式数据包,每个字节都对应一个序列号,体现在tcp头部信息中就是,序列号以及选项中的MSS来体现:
比如:PSH1:1025(1024)就是一个数据类型,由于通告窗口为4096,所以窗口大小为4(4*1024=4096)
上图中发送数据如seq=101 win=3 就是将数据段101发送至发送缓冲区,即PUSH 101:101(1) ack(1),win=3
1.窗口滑动形式
1.1窗口合拢
1.2窗口张开
1.3窗口收缩
1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。(通告窗口大小控制)
3) 当右边沿向左移动时,我们称之为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但T C P必须能够在某一端产生这种情况时进行处理。第2 2 . 3节给出了这样的一个例子,一端希望向左移动右边沿来收缩窗口,但没能够这样做。
图2 0 - 5表示了这三种情况。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的A C K,则它被认为是一个重复A C K,并被丢弃。
如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。(使用零窗口控制无法发送数据)
文件传输控制发送数据以及接受数据的缓冲区大小可以提高下效率,4096不是最高效的,使用16384可以提升40%的效率
PUSH标志的作用:
发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与P U S H一起传送的数据以及接收方TC P已经为接收进程收到的其他数据。
对于一个客户端设置此标志的tcp,向服务端发送数据,等待响应,设置此标志,将告诉tcp,不要因为等待服务端的响应而不去处理其他缓冲区的数据。同样在服务端,收到此标记的链接,它将立即将数据交付给上层,而不会考虑是否还会有数据到达。
相关文章推荐
- Android网络之数据解析----SAX方式解析XML数据
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
- Android系列之网络(二)—-HTTP请求头与响应头
- HttpClient4.5.2请求时出现Cookie rejected警告的解决方法
- HttpWebRequest 请求PDF文件,并下载到本地
- http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html
- Android网络开源库-Retrofit(三) 批量上传及上传进度监听
- 深入浅出——搞懂卷积神经网络误差分析(一)
- TCP/UDP 伪首部
- linux下安装Apache(https) 服务器证书安装配置指南
- 配置整理——ubuntu下配置网络抓包库libpcap
- HttpClient + Jsoup 网页数据抓取
- iOS手机信号网络监听
- 什么是HTTP协议??
- iOS网络编程 - 4
- 计算机网络自顶向下方法之一一一第二章之一
- 网络制式(Duplex Mode)
- iOS网络编程 - 3
- swift 网络请求&json解析