TCP的段结构

源端口 目标端口
***
确认号
头长度 标志 窗口
校验和 紧急数据指针
选项(可变长度)
数据
  1. 源端口:16 byte,源节点进程端口

  2. 目标端口:16 byte,目标节点端口

  3. ***: 32 byte,TCP对字节流中的每个字节都编号。假设每个数据段包含1000个数据字节,第一个字节的编号为X,则对于字节流中各段的第一个字节的***分别为:X,X + 1000,X + 2000等。

  4. 确认号: 32 byte,为准备接受的字节***,即意味着该字节***前的字节都已经正确接受。

  5. 头长度:4 byte,随可变长度的选项的改变而改变,接收方可根据该数据确定TCP的数据的起始位置。

  6. 标志:6 byte,字段包含对其他字段的说明或对控制功能的标示。具体设置如下:

    ACK : 说明确认字段中的数据有意义。

    URG:说明紧急数据指针字段中的数据有意义。

    FIN :标志是最后的TCP数据段(也成为完成)。

    PSH:指出接收方不必等待一定量的数据再向应用提供数据(一般情况是等待一定数据量再提供),而是立即提供该数据段,PSH也称“推”。

    RST:在有异常情况发生时,发送方通知接收方暂时终止连接,释放与连接有关的缓冲区,中断TCP传输, RST也称为“复位”。

    SYN:在建立初始连接时,允许双方共同确定初始***,SYN也称为“同步”。

  7. 窗口:16 byte,通知接收方还可以发送的数据字节数,接收方可以根据该值改变其发送窗口的大小。

  8. 检验和:16 byte,进行传输层的差错校验,具体算法是将TCP段的内容转换成一系列的16 byte的整数,并相加。

  9. 紧急数据指针:16 byte,当标志字段中的值为URG时,表示有紧急数据,紧急数据位于段的开始,紧急数据指针向紧挨着紧急数据后的第一个字段,以区分紧急数据和非紧急数据。对于紧急数据接收方必须尽快发送给高层应用。

  10. 选项:可变长度。

  11. 数据:可变大小,用户提供的数据。

TCP连接建立

TCP连接的建立采用三次握手协议,SYN为请求建立连接的标志,如下图所示:

TCP数据传输机制
在T1时刻,A向B发送请求建立段,***为X。

在T2时刻,B发送应答A的X***的请求建立连接的段,该应答的***为Y。

在T3时刻,A发送对B的应答段的应答,应答号为Y+1,表明应答号为Y的段已接收。

至此,连接建立成功,A,B分别发送数据,***分别为X + 1、Y + 1,应答号分别为Y + 1、X + 1.

TCP连接的释放

TCP是全双工通信,一方的数据段发送完毕要终止连接时,另一方有可能有未发送完的数据,所以TCP的连接释放采用对称释放方式(4次挥手),如下图:
TCP数据传输机制
在上图中,FIN为终止标志,释放连接的过程如下:

  • A在T1时刻接收到应用层的终止请求,发送释放连接段。
  • B在T2时刻接收到应用层的终止请求,发送应答段,确认已经接收到该段,并通知应用层A已经无数据发送,请求四方连接。
  • 此后B仍然可以发送数据,但在T3时刻收到无数据传输的通知,向A发送释放连接段。
  • A在T4时刻收到B的释放连接段,A向B发送应答段,确认已经收到该段,并中断连接
  • 在T5时刻B收到A的确认,也中断连接。

TCP滑动窗口

TCP的滑动窗口协议中的接受窗口随着已经接受的数据量的变化而变化,如下图所示:
TCP数据传输机制
在上图中,假定接收方有4096字节缓冲区。ACK为将要确认的字节号,即在此前的字节已经被确认接受,WIN为可以接受的窗口大小,SEQ为发送数据段的起始字节号。运行步骤如下:

  • 在T1时刻,发送方的应用写入2048字节的数据,发送方的起始字节号为0.
  • 在T2时刻,接收方接收到发送方的数据段后,在没有交给应用层前,缓冲区被占用2K,还剩下2k,接收方发送确认段,ACK=2048,WIN=2048。
  • 在T3时刻,发送方收到应用层写入3k字节的数据,但因接收方的缓冲区只剩下2k,因此发送2k的数据段,SEQ=2048.
  • 在T4时刻,接收方接收到发送方的数据段后,在没有交给应用层前,缓冲区被占满,接收方向发送方发确认段,ACK=4096,WIN=0,此时发送方被阻塞。
  • 在T5时刻,接收方向应用层上传一个数据段,缓冲区被释放2k字节,接收方向发送方发送确认段,通知接收方有2048字节缓冲区,即WIN=2048.
  • 在T6时刻,发送方发送余下的1k字节数据段,SEQ=4096,此时,接收方缓冲区还剩下1k。

TCP重传策略

​ TCP协议用于控制数据段是否需要重传的依据是设定重发定时器。在发送一个数据段的同时启动一个重发定时器,如果在定时器超时前收到确认,就关闭该定时器,如果定时器超时前没有收到确认,则重传该数据段。对定时器初值的设定,目前采用较多的算法是一种不断调整超时时间间隔的动态算法。其工作原理是:对每条连接TCP都保持一个变量RTT,用于存放当前到目的端往返所需时间最接近的估算值。当发送一个数据段时,同时启动连接的定时器,如果在定时器超时前确认到达,则记录所需的时间(M),并修正RTT的值,如果定时器超时前没有收到确认,则将RTT的值增加1倍。

相关文章:

  • 2022-12-23
  • 2021-04-03
  • 2022-12-23
  • 2021-10-19
  • 2022-12-23
  • 2021-11-07
  • 2021-09-16
猜你喜欢
  • 2021-10-09
  • 2021-07-09
  • 2022-12-23
  • 2021-07-23
  • 2021-07-07
  • 2021-07-16
  • 2021-06-23
相关资源
相似解决方案