各字段意义

序号

如果报文数据部分长度为0,则默认增加1个字节

  • 占4字节
  • 首先,在传输过程的每一个字节都会有一个编号
  • 在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号

确认号

当标志位中的ACK为1时,确认号才有效

  • 占4字节
  • 确认收到前面的包
  • 在建立连接后,期望对方下一次发送的TCP数据部分第一个字节的开始序号

数据偏移

  • 占4个bit(取值范围为5~15)
  • Header Length乘5等于TCP首部长度(也等于数据偏移)
  • 首部长度范围(20~60)

保留

  • 占6个bit,一般情况下全为0

U/A/P/R/S/F

URG(Urgent)

URG = 1时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送

ACK(Acknowledgment)

ACK = 1时,确认号字段才有效

PSH(Push)
RST(Reset)

RST = 1时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接

SYN(Synchronization)

SYN = 1ACK = 0 时,表明这是一个建立连接的请求
若对方同意建立连接,则回复SYN = 1ACK = 1

FIN(Finish)

FIN = 1时,表明数据已经发送完毕,要求释放连接

窗口

检验和

  • 伪首部+首部+数据部分

    伪首部不会传输给下一层

紧急指针

可靠传输

ARQ(Automatic Repeat-reQuest)

  • 理想情况

  • 意外情况

    1. 确认丢失

    2. 确认迟到

  • 缺点:效率非常低

连续ARQ+滑动窗口

  • SACK(selective 选择性确认)

    包含于TCP首部可选部分

  • 意外情况

流量控制

拥塞控制

建立连接 && 释放连接

三次握手

  • 第一次握手
  • 第二次握手
  • 第三次握手

四次挥手

将2,3次挥手合并