TCP协议详解

本文详细介绍了TCP协议的特点,包括TCP头部的固定结构、选项、实验观察,以及TCP连接的建立与关闭过程。重点讨论了三报文握手、四报文挥手、半关闭状态和TIME_WAIT状态。此外,还涵盖了复位报文段的作用、TCP数据流的交互和成块传输,以及带外数据和超时重传机制。最后,简要概述了TCP的拥塞控制策略。
摘要由CSDN通过智能技术生成

1、TCP服务的特点

在这里插入图片描述

2、TCP头部结构

2.1 固定头部结构

在这里插入图片描述

  • ① 16位源端口号:告知目标主机该报文段来自哪里(哪个源端口)。客户端通常使用系统自动选择临时端口号
  • ② 16为目的端口号:告知目标主机传给哪个上层协议或应用程序(目的端口)的。服务器使用特定端口号。
  • ③ 32位序号(ISN初始序号):一次TCP连接中 某一个传输方向的 某个报文的数据部分第一个字节的序号。第一个报文的第一个字节的序号是随机值,后面各个字节的序号逐个+1,增加到最大值,回到0重新加。
  • ④ 32位确认序号:期望收到对方的下一个字节的序号。任意一方发送的TCP报文段不仅携带自己的序号,还携带对 对方发送来的报文段的确认序号。
  • ⑤ 4位头部长度:指出TCP报文头部的长度,单位是4字节,头部最长60字节。
  • ⑥ 6位标志位:
    • ——URG:紧急指针是否有效
    • ——ACK:确认号是否有效。携带ACK标志的TCP报文段为确认报文段
    • ——PSH:提示接收端应用程序应立即从TCP接收缓冲区中读走数据,为接受后续数据腾出空间。
    • ——RST:要求对方重新建立连接。称携带RST标志的TCP报文段为复位报文段
    • ——SYN:请求建立一个连接。称携带SYN标志的TCP报文段为同步报文段
    • ——FIN:通知对方本段要关闭连接了。称携带FIN标志的TCP报文段未结束报文段
  • ⑦ 16位窗口大小:发送该报文段的一方的接收窗口大小,用于流量控制。
  • ⑧ 16位校验和:发送端填充,接收端利用其进行CRC算法以检验传输中是否损坏。校验包括头部和数据部分。
  • ⑨ 16位紧急指针:是个正的偏移量。他和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,准确的说,这个字段是紧急指针相对当前序号的偏移。称为紧急偏移更好。TCP的紧急指针是发送端向接收端发送紧急数据的方法。

2.2 TCP 头部选项

TCP头部的最后一个选项字段是可变长的可选信息。这部分最多包含40字节。典型的TCP头部选项结构如下图所示:
在这里插入图片描述

  • 选项的第一个字段kind说明选项的类型。有的TCP没有后面两个字段,仅包含1字节的kind字段。
  • 第二个字段length(如果有的话)指定该选项的总长度,该长度包括kind字段和length字段,共占2字节。
  • 第三个字段info是选项的具体信息。常见的TCP选项有7种,如下图所示:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 实验:使用tcpdump观察TCP头部信息

抓包结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、TCP连接的建立和关闭

3.1 三报文握手,四报文挥手

在这里插入图片描述

3.2 半关闭状态

在这里插入图片描述
在这里插入图片描述

3.3 连接超时

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 TCP状态转移

TCP状态转移是指,TCP连接从建立到关闭的整个过程中,通信两端的状态变化。下图描绘了所有的TCP状态 以及可能的状态转换:
在这里插入图片描述
上图中,粗虚线表示典型的服务器端连接的状态转移;粗实线表示典型的客户端连接的状态转移。CLOSED 是一个假想的起始点,并不是实际的状态。

① 服务器的典型状态转移

在这里插入图片描述在这里插入图片描述

② 客户端的典型状态转移

在这里插入图片描述
在这里插入图片描述

③ TIME_WAIT状态

在TIME_WAIT状态,客户端连接要等待一段长为2MLS(Maximum Segment Life,报文段在网络中最大生存时间)的时间才能完全关闭。标准文档RFC1122的建议值是2min。

原因:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、复位报文段

在某些特殊条件下,TCP连接的一端会向另一端发送携带RST标志的报文段,即 复位报文段,以通知对方关闭连接重新建立连接。本节讨论产生复位报文段的3种情况。

4.1 访问不存在的端口

当一个主机访问一个不存在的端口时,目标主机将给他发送一个复位报文段。

下面进行一个实验来验证:
在这里插入图片描述

4.2 异常终止连接

发送复位报文段终止连接就是异常终止。
在这里插入图片描述

4.3 处理半打开连接

考虑下面的情况:服务器(或客户端)关闭或者异常终止了连接,而对方没有接收到结束报文段,此时,客户端(或服务器)还维持着原来的连接,而服务器(或客户端)即使重启,也已经没有该连接的任何信息了。我们把这种状态称为版打开状态,处于这种状态的连接称为半打开连接。

一句话概括就是:一方已经终止连接了,另一方还处于正常接受数据的状态。

如果服务器(或客户端)往处于半打开状态的连接写入数据,则对方将回应一个复位报文段。

下面进行实验验证:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、TCP 交互数据流

TCP报文段所携带的应用程序数据 按照长度分为两种:

  • 交互数据。交互数据仅包含很少的字节,使用交互数据的应用程序(或协议)对实时性要求高,比如telnet、ssh等。
  • 成块数据。成块数据的长度通常为TCP报文段允许的最大数据长度。使用成块数据的应用程序对传输效率要求高,比如ftp。

5.1 交互数据流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 TCP 成块数据流

直接上实验:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、带外数据

某些传输层协议具有带外(Out Of Band,OOB)数据的概念,用于迅速通告对方本端发生的重要事件。因此,带外数据比普通数据有更高的优先级,他应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据。带外数据的传输可以使用一条独立的传输层连接也可以映射到传输普通数据的连接中。实际应用中,带外数据的使用很少见,已知的仅有telnet、ftp等远程非活跃程序。

在这里插入图片描述

TCP发送带外数据的过程

在这里插入图片描述
在这里插入图片描述

7、TCP 超时重传

从本节往后都是讨论,异常网络状况下(出现超时或丢包),TCP如何控制数据传输以保证其承诺的可靠服务。

TCP模块为每个TCP报文段都维护一个重传定时器,定时器在TCP报文段第一次发送时被启动。如果超时时间内未收到接收方应答,TCP模块重传TCP报文段并重置定时器。下面通过实验研究Linux下TCP的超时重传策略。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、拥塞控制

8.1 概述

在这里插入图片描述
先明确几个变量的含义:

  • CWND拥塞窗口
  • SWND发送窗口:发送端向网络一次连续写入的数据量
  • RWND接收(通告)窗口
  • SMSS:报文段数据部分最大长度

拥塞控制的最终受控变量发送端向网络一次连续写入的数据量,我们称为SWND。但发送端最终以TCP报文段来发送数据,所以SWND限定了发送端能连续发送的TCP报文段数量。
接受方可通过其接收窗口RWND控制发送端的SWND。但这显然不够,所以发送端引入了一个称为拥塞窗口的状态变量。实际的SWND值是RWND和CWND中的较小者。

8.2 慢启动 和 拥塞避免(未发生拥塞)

在这里插入图片描述
在这里插入图片描述

当发生拥塞时:

在这里插入图片描述

8.3 快速重传 和 快速恢复

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值