最后更新:2021-12-08 23:21:45 手机定位技术交流文章
TCP议定书的特点是侧重于连接、字节流和可靠的传输。
在开始读写数据之前,使用TCP协议的各方必须建立隐蔽关系,双方必须为连接分配所需的内核资源,以管理连接状态和数据传输。TCP连接是全时的,即双方可以通过单一连接完成数据读和写。一旦数据交换完成,双方必须终止连接,以解放系统的资源。
TCP协议采用了一种回报确认机制,要求发送人提供的每个TCP部分都由接收人答复,以便交易被视为成功。
TCP协议采用一种超期再传送机制,发送者在发送TCP信息后启动计时器,如果在规定时间内没有收到任何答复,该信息就会受到不满。
TCP信息最终是从IP数据报告中传送的,在接收端可能会混淆和重复,因此TCP协议将进一步重新排序和排序,并将收到的TCP信息发送到应用层面。
TCP将把数据存入缓冲区,接收端应用程序可以读取缓冲区内由TCP在一个或母星时间收到的所有数据。 但是,对于UDP提供的每套数据,接收方必须及时完成对每次UDP数据报告的读取操作(使用校正系统),否则软件包将被丢弃。



16 位端口( 端口号) : 通知电文来源于( 源端口) 的主机, 并将电文传送到哪个高级协议或应用程序( 端端口) 。 对于 TCP 连接, 客户通常使用系统选择的临时端口号, 而服务器则使用已知的服务端口号。 所有已知服务的端口号在 / etc/ services 文件 中定义 。
32位元序号:在TCP通信中(从TCP连接到分解)以传输方向以字节表示的每个字节的编号。假设主机A和主机B在发送给B的第一个TCP第1段A中与TCP通信,序号值最初被转换成随机的ISN(初始安全编号,初始序号值)。 在这个传输方向(从A到B),TCP条目中随后的序号将设置在系统中,作为ISN加上输入数据的第一个字节。例如,TCP条目传送的数据是字节流中的1025-2048字节,因此条目的序号是ISN+1025。另一个传输方向(从B到A)的TCP段序号也具有同样的含义。
32位确认编号(承认号):用作对另一方提供的TCP信息的答复。 数值是TCP提交材料中收到的段落的序号加上1.假设主机A和B通过TCP进行互动,A发送的TCP部分不仅包括其本身的序号,而且还包括B提供的TCP部分的确认号。
四个部门主管(标题长度):指定TCP头部的32位(4位元)数。由于四个最大值代表15,TCP头部的最多值为60位元。
六个标记如下:
窗口在此指接收通知窗口( 接收窗口, RWND ) 。 它会通知另一侧 TCP 端有多少字节能够接收缓冲区内的数据, 以便另一方能够控制数据传输的速度 。
16 位校验和( TCP 校验和): 接收端由发件人填充, 接收端使用 CRC 报告 方法测试 TCP 电文在传输过程中是否受损。 请注意, 此校验不仅包括 TCP 头部, 也包括数据部分 。
16个紧急指针(紧急指针):正偏差。它将序列号字段的值加到最后一个紧急数据下个字节的数值。 因此,要准确无误,该字段是紧急指针与当前数字的偏差,可称为紧急偏差。




由于TCP连接是全时的,每个方向都必须独立终止。 前提是当一方完成数据发布工作时, FIN将被发送终止此方向的连接; 获得 FIN 仅表示此方向没有数据流动, 即不会收到进一步的数据, 但是在FIN 向该方向发送数据之前仍然可以传输此TCP连接的数据 。 关闭的第一个当事方将进行主动关闭, 而另一方将执行被动关闭投送, 这将是收到的进一步数据, 但是仍然可以发送此TCP连接的数据, 直到 FIN 向该方向发送。 关闭的第一个当事方将进行主动关闭, 而另一方将执行被动关闭 。
当客户在很长的时间内没有收到回复时,例如当再传送间隔由内核变量/程序/sys/net/ipv4/tcp_syn_retries决定时,他们再发送信息。每次重新输入的时间翻了一番。在5次失败后, TCP 模块放弃连接并通知应用程序。
在任何一个时候,TCP连接的任何终点都处于一个状态,目前的状况可以使用网络状态指令加以审查。

客户端状态
客户端使用连接系统连接到服务器的有效连接。 Connect 呼叫先向服务器发送同步信件, 以便移动连接到 SYN_ SENT 状态 。 自此以后, 连接呼叫可能因两个原因之一无法返回 :
如果连接呼叫失败, 连接将立即返回到初始的 CLOSED 状态。 如果客户端从服务器收到同步信件和确认, 连接呼叫返回成功, 连接被切换为已建立状态 。
当客户进行主动关闭时, 它会向服务器发送连接 FIN_ WAIT_ 1 状态的关闭信息。 如果客户从服务器收到确认信息, 特别是为了确认目的, 连接将移动到 FIN_ WAIT_ 2 状态。 当客户处于 FIN_ WAIT_ 2 状态时, 服务器将处于 CLOSE_ WAIT 状态, 这可能是半封闭状态 。
服务器状态
服务器通过监听系统拨打 ListEN 状态, 并被动地等待客户端连接, 从而实施所谓的“ 被动打开 ” 。 一旦服务器收到连接请求( 同步信息), 它会将连接放在等待的内核队列中, 并用 SYN 标记向客户端发送确认信息 。 在此点上, 连接处于 SYN_ RCVD 状态 。
当客户自愿退出连接( 通过关闭或关闭系统向服务器发送终端信息) 时, 服务器将返回确认信息, 将连接到 CLOSE_ WAIT 状态。 此状态的含义是明确的 : 等待服务器应用程序停止连接 。 通常, 当服务器检测客户端关闭时, 服务器也会给客户发送关闭信息 。
TCP 提供了滑动窗口的概念, 以解决可靠的传输和包装问题。 在传输过程中, Clit 和服务器同意接受窗口 rwnd, 然后与 cwnd 压缩器控制窗口一起计算幻灯片窗口 swnd 。 在 Linux 内核执行中, 幻灯片窗口 cwnd 是在软件包中, 因此, swnd 是由 mss (最大区块大小) 来决定的 。
![[公式]](http://static.wangsu123.cn/article/image/20211208/9489dd5606a2aad144ccd23dc1edb8a8_8.png)
幻灯片面板分为四个部分:

幻灯片图如下(36和46-51的数据背面):

RRT:RRT-Round Trip时间,一个数据包, 从它被传送回发件人那一刻开始, 所以发件人知道它需要多久。
TCP不能无视网络上发生的事情, 只对数据进行重录, 对网络造成更大的伤害。 TCP背后的理念是TCP不是自私的协议,慢启动算法、拥塞避免算法、快速重传算法、快速恢复算法四部分。
慢启动算法
起步迟缓的目的是加入网络,加快网络速度,而不是像那些有特权的汽车一样挤满道路。我们不要破坏已经在高速公路上的秩序。
慢启动算法如下(cwnnd 全名 Congesion Windows):
(1) 设置 cwnd = 1 表示MMS尺寸的数据可以广播。
(2) 每个ACK, cwnd++;线性增长
(3) 每一RT, cwnd = cwnd *2;按指数排列。
4)还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”
正如我们可以看到的那样,如果网网速度快,ACK会迅速返回,而RRT会很简短,这种缓慢的开始并不缓慢。下面的图形描述了这个过程。

拥塞避免算法
前面说过,还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”。一般来说ssthresh的值是65535,单位是字节,当cwnd达到这个值时后,算法如下:
1 cwnd = 1/ cwnd = 1 cwnd = 1/ cwnd
(2) cwnd = 1 + cwnd = 1 + cwnd
这将避免过度扩张,因为过度扩张会导致网络拥堵,并导致逐步增长,使之适应网络的最佳价值。 显然,这是一种线性升级方法。
拥塞状态时的算法
如前所述,在投下袋子时,有两种可能性:
1) 如果ROTO用完时间,则重新发送数据包。TCP认为这是一个负面条件,反应严重。
2) 快速递解算法,这意味着开始重新传输,而不等到收到三个重复的反包件时,RTO就倒闭。
TCP Reno通过以下方式完成:
上面我们可以看到RTO超时后,sshthresh会变成cwnd的一半,这意味着,如果cwnd<=sshthresh时出现的丢包,那么TCP的sshthresh就会减了一半,然后等cwnd又很快地以指数级增涨爬到这个地方时,就会成慢慢的线性增涨。我们可以看到,TCP是怎么通过这种强烈地震荡快速而小心得找到网站流量的平衡点的。
快速恢复算法
TCP Reno
快速再传输和快速恢复技术经常同时使用。 快速恢复策略是, 您有三只可复制的反弹鼠, 表明网络并不可怕, 所以不需要像 RTO 超时一样强大。 在启动快速恢复方法之前, cwnd 和 sshathresh 已经更新 :
实际快速报告算法如下:
本文由 在线网速测试 整理编辑,转载请注明出处。