目录
1. 引言
按分组数量来看约有一半的TCP报文段包含成块数据(FTP、电子邮件和Usenet新闻),TCP使用滑动窗口协议进行流量控制,可以加速数据传输。
2. 正常数据流
注意:
- 使用TCP的滑动窗口协议时,接收方不必确认每一个收到的分组。ACK是累积的,表示接收方已经正确收到了一直到确认序号减1的所有字节。
3. 滑动窗口
- 窗口左边沿向右边沿靠近为窗口合拢 ,该现象发生在数据被发送和确认时。
- 窗口右边沿向右移动时允许发送更多的数据,称为窗口张开,该现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。
- 窗口右边沿向左移动时称为窗口收缩。
- 窗口左边沿不会向左移动,因为窗口左边沿受另一端发送的确认序号的控制,如果接收到一个这样的指示的话会被认为是一个重复ACK被丢弃。
注意:
- 发送方不必发送全窗口大小的数据
- 接收方在发送一个ACK前不必等待窗口被填满
4. 窗口大小
由接收方提供的窗口的大小由接收进程控制,会影响TCP性能。
4.3BSD发送和接受缓冲区的大小为4096个字节。
5. PUSH标志
用途:发送方用该标志通知接收方将所收到的数据(包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据)全部提交给接收进程。
现状:大部分API不向应用程序提供通知其TCP设置PUSH标志的方法,因为一个好的TCP实现能够自行决定何时设置该标志。
6. 慢启动
通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
拥塞窗口(cwnd) 初始化为1个报文段,每收到一个ACK,拥塞窗口增加一个报文段(cwnd以字节为单位,但慢启动以报文段为单位进行增加),发送方取拥塞窗口与通告窗口中的最小值作为发送上限。
7. 成块数据的吞吐量
发送一个分组的时间取决于两个因素:
- 传播时延,由光速、传输设备等待时间引起
- 发送时延,取决于媒体速率(媒体每秒可传输的比特数)
对于给定的两个接点之间的通路,传播时延固定,发送时延取决于分组大小。
7.1 带宽时延乘积
通道容量(bit) = 带宽(b/s) * 时延RTT(s)
7.2 拥塞
会导致拥塞的情况:
- 数据从大管道(如快速局域网)流向小管道(较慢的广域网)
- 多个输入流到达一个路由器,而路由器的输出流小于这些输入流的总和
返回的确认之间的间隔与其在路径中最慢的链路上的间隔一致。如果瓶颈路由器没有足够的缓存就会引起路由器丢弃分组。
8. 紧急方式
紧急方式指的是一端可以告诉另一端有些 “紧急数据” 已经放置在普通的数据流中。
8.1 通知方式
TCP首部中的URG比特置1,并将16位的紧急指针置为一个正的偏移量,该偏移量与TCP首部中的序号字段相加就是紧急数据的最后一个字节的序号。
只要从接收方当前读取位置到紧急数据指针之间有数据,就认为应用程序处于 “紧急方式”,紧急指针通过后回到正常方式。
8.2 用途
- Telnet和Rlogin,当交互用户键入中断键时,因为服务器到客户方向上的数据流很可能要被客户的TCP停止,所以需要使用紧急方式,客户接收到通知就会使数据流动起来。
- FTP,当交互用户放弃一个文件的传输时需要用到紧急方式
注意:
若在接收方处理第一个紧急指针之前发送方多次进入紧急方式,那么紧急指针会向前移动,旧的会被覆盖(所以需要标记字节数据)
9. 小结
- TCP成块数据交换的影响因素有许多,有些可控(发送和接收缓存大小),有些不可控(网络拥塞等)
- 滑动窗口协议。带宽时延乘积衡量管道容量
- PUSH标志,设置与否无法进行控制
- 紧急数据