计算机网络--TCP可靠传输的实现(无拥塞)

TCP报文的格式
计算机网络--TCP可靠传输的实现(无拥塞)

三次握手四次挥手

  • 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流。
  • 确认号:Ack序号,占32位,只有ACK标志位为1时,Ack序号才有效。Ack=Seq+1。
  • 标志位(Flags):URG、ACK、PSH、RST、SYN、FIN
    URG:紧急指针有效;
    ACK:确认序号有效;
    PSH:接收方应尽快移交报文给应用层;
    RST:重置连接;
    SYN:发起一个新连接;
    FIN:释放一个连接。

注意:确认序号Ack和标志位ACK不一样

三次握手即TCP连接的建立

计算机网络--TCP可靠传输的实现(无拥塞)

第一次握手
  • 客户端设置标志位SYN;
  • Seq=j;
  • 发送TCP报文,客户端进入SYN_SENT状态,等待服务器确认;
第二次握手
  • 服务器收到TCP报文;
  • 设置标志位SYN+ACK;
  • Ack=j+1,Seq=k;
  • 发送TCP报文,此时服务器进入SYN_RECV状态;
第三次握手
  • 客户端收到服务器的TCP报文;
  • 设置标志位ACK;
  • Ack=k+1;
  • 发送TCP报文, 客户端服务器进入ESTABLISHED,成功建立TCP连接。

四次挥手即TCP连接的释放

计算机网络--TCP可靠传输的实现(无拥塞)

第一次

客户端设置标志位FIN=1;
Seq=X;
发送TCP报文;

第二次

服务器设置标志位ACK=1;
Ack=X+1;
发送TCP报文给客户端;

第三次

服务器询问上层应用数据传输是否完毕;
传输完毕后,设置标志位FIN=1;
Seq=Y;
发送TCP报文;

第四次

设置标志位ACK=1;
Ack=Y+1;
发送TCP报文给服务器,服务器客户端断开连接。

TCP基于以字节为单位的滑动窗口实现可靠传输(无拥塞)

三次握手建立连接后,服务器客户端开始发送数据。

从一个例子入手:
发送方向接收方发送数据报文,接收方回复确认报文
计算机网络--TCP可靠传输的实现(无拥塞)此时,接收方回复一个确认报文,表明自己的窗口大小20,接收序号31
计算机网络--TCP可靠传输的实现(无拥塞)接收方构建自己的发送窗口,序号31之前是已经接收到并确认的数据,可以从缓冲区删除

计算机网络--TCP可靠传输的实现(无拥塞)计算机网络--TCP可靠传输的实现(无拥塞)若发送方发送31-33的数据,31数据丢失,接收方只收到32-33的数据,此时接收方确认报文只确认最高位数据31,发送方收到确认报文,再次从31号数据开始传输,发送窗口不移动
计算机网络--TCP可靠传输的实现(无拥塞)若31-33号数据发送成功,接收方发送确认报文,并将已确认数据交付主机,接收窗口前移
计算机网络--TCP可靠传输的实现(无拥塞)发送方删除已确认数据,发送窗口前移;
计算机网络--TCP可靠传输的实现(无拥塞)若数据未按序到达、丢吧造成发送窗口耗尽,此时未收到接收方的确认报文,到达一定时间后,触发超时重传机制,重新发送窗口内数据
计算机网络--TCP可靠传输的实现(无拥塞)