TCP基本几个属性简介
- ACK Number: 接收到的字节序号
- Sequence Number: 发送的字节序号
- Data Offset: 数据偏移量
- window: 窗口的字节容量,最大为65535字节
另外,在TCP的选项字段中还包含了一个TCP窗口的扩大因子,Option-kind为3,Option-length为3个字节,Option-data取值范围是0-14. 窗口扩大因子用来扩大TCP窗口,可以把最大为16bit的窗口扩大为31bit。
滑动窗口基本原理
发送窗口
对于TCP会话的发送方,任何时候在其发送缓存中的数据都可以分为4类, 已经发送并收到ACK的
, 已经发送但还没收到ACK的
, 未发送但允许发送的
, 未发送且对端不允许发送的
。 其中, 已经发送但还没收到ACK的
和 未发送但允许发送的
被称为发送窗口。
当收到接收方的新的ACK,则对发送窗口中的后续字节的确认 导致了 发送窗口的滑动。滑动原理如下图。
接收窗口
对于TCP的接收方,在某一时刻在它的接收缓存中有3种状态。 已接收
, 未接收准备接收
,未接收并未准备接收
。其中,未接收准备接收 称为接收窗口。
发送窗口与接收窗口的关系
TCP是双工的协议,会话的双方都可以同时发送和接收。TCP会话的双方都各自维护一个发送窗口和接收窗口。 其中各自的接收窗口大小取决于应用、系统、硬件的限制。 各自的发送窗口则取决于对端通告的接收窗口。