ch20: TCP Bulk Data Flow
TCP
Last updated
TCP
Last updated
从svr发送8192个字节的数据到bsdi:
bsdi每次ack都会通知一个win,其中segment 8的win大小是3072,说明还有1024个字节的数据在TCP的缓冲区中,还没有被应用层读取。
其中segment 9和15都是更新win的大小,叫做window update。
滑动窗口:
滑动窗口有三种动作:
close
open
shrink
每种动作的含义如下:
窗口大小
默认4096字节,还可以通过设置接收缓存大小来控制窗口大小,因为接收缓存的大小就是滑动窗口的上限。
大多数实现不同通过API来设置这个PUSH标志,而是TCP自己根据情况来设置。
如果待发送数据将清空发送缓存,大多数Berkeley实现会设置PUSH,但是直接忽略掉接收到的PUSH。
当通知窗口大小是0之后,需要额外发送一个ack来更新这个窗口。
当窗口变为两个segment大小或最大窗口的50%时,也会发送一个ack来更新窗口大小。
慢启动
连接开始后一点点发送数据。
第一次一个数据报,收到ack后,发送两个。
相关的参数是congestion window,即cwnd,以字节为单位,但是增长幅度是segment的大小。
虽然是慢启动,但是是按照指数增长的。
capacity(bit) = bandwidth(b/s) * round-trip time(s)