TCP(Transmission Control Protocol),传输控制协议
- 可靠传输
- 流量控制
- 拥塞控制
数据格式
TCP报文段 = 首部 + 数据部分
首部
首部 = 源端口(16位) + 目标端口(16位) + 序号 + 确认号 + 数据偏移(4位) + 保留(6位) + URG + ACK + PSH + RST + SYN + FIN + 窗口 + 检验和 + 紧急指针 + 选项 + 填充
数据偏移
- 作用:计算首部长度,也代表数据部分在整个报文段的起始位置
- 占4位,取值范围:0x0101 ~ 0x1111(5 ~ 15)
- 数值乘以4 :首部长度(包含20个字节的固定部分)
保留
- 占6位
- 目前全为0
URG(Urgent)紧急位
- 占1位
- 如果URG=1,当前报文段内有紧急数据,紧急指针有效。
紧急指针
- 占16位
- 紧急数据长度。
- TCP数据部分开始到紧急指针长度位置为紧急数据。
序号(Seq,Sequence Number)
- 占32位(4字节)
- 首先,传输过程中的每一个字节都有一个编号。
- 建立连接后,表示这一次传给对方的TCP数据包分的第一个字节的编号。用在传输数据太长,被切片传输的数据合并。
ACK(Acknowledgment)确认信号
- 占1位
- 当ACK=1,确认号字段才有效
确认号(Ack,Acknowledgment Number)
- 占32位
- 建立连接号,表示期望对方下一次传输过来的TCP数据部分的第一个字节的编号。与序号相呼应。
PSH(Push)
- 占1位
- 交互式网络中使用
RST(Reset)重置信号
- 占1位
- 当RST=1,当前连接中出现严重错误,必须释放连接,再重新建立连接。
SYN(Synchronization)同步信号
- 占1位
- 当SYN=1,且ACK=0,表示这是一个发起建立连接的请求
- 然后对方同意建立连接,SYN=1,ACK=1,表示对方同意建立连接的回复。
FIN(Finish)结束信号
- 占1位
- 当FIN=1,表示数据已经发送完毕,要求释放连接的请求。
窗口 (wnd-window,rwnd-receive window)
- 占16位(最大值65535)
- 用于流量控制,告知对方下一次允许发送的数据大小(以字节位单位),所以最大值为65535byte(4KB)。