最后更新:2022-07-24 13:16:46 手机定位技术交流文章
这图很重要!这图很重要!这图很重要! 重要的事说三遍,之后的TCP机制都是依靠这张图讲解。


该机制与序列号SN、认证序列号ASN、以及认证号是否有效ACK有关。
因为TCP协议即需要扮演了发送者(send Segment)的角色,同时还需要扮演接收者(acknowledge segment)的角色,为了TCP身兼两种不同的角色,在TCP设计之初就有一个 标志位(ACK), 在角色需要转换时扮演一个角色.
ACK == 1开关打开 ACK == 0开关关闭
ASN表示确认响应序列,假设A发送100数据给B,而B的确认响应始于该数据的下一个字母。 如果100数据是1到100,确认答案应以1001开始。 ASN只有在ACK==1上才有意义。
以下图示了具体的响应过程:
为什么ISN不设置从O开始,而是使用随机值?
从安全的角度来看,如果ISN设计开始为O,那么恶意用户很容易推导合法SN的价值
伪造TCP SN的成本很低,使用随机值可以相对避免这种情况。
关于重传
没有收到答复可能有两个原因。
1.收件人没有收到,所以没有答复。
数据还在路上,但还没有到达一段时间(可能是由于网络延迟)
数据在途中丢失了,而且永远不可能到达那里。
2.收件人收到了,但没有收到答复。
答复仍在进行中,但目前尚未收到
b.应答丢失。
上面的1.b和2.b这种麻烦不需要,直接重发就可以了。因为有SN的存在,即使你重复了一遍, 就把它扔掉.同里,有ASN的存在,不管你是否再次得到ACK。这里需要强调的ACK是一个国家,无论收到多少次,ACK只有两个状态的开关,如果你收到太多, 扔掉它不会影响你的反应.
但1.A和2.a超时重复机制需要解决。


1.作为服务器上的TCP,它需要:每个TCP有一个内部网络来维护数据集:它们至少由ISN、当前SN、当前ASN、发送缓冲区、接收缓冲区和五元组信息组成。
2.TCP互交换一些信息
在正式的数据通信之前,需要和对方(TCP)进行一定的同步(synchronize)操作。A把主机的一些初识重要信息告诉了B,收到应答对于A而言也就知道了B的存在。
由于以上两点原因,所有就有了TCP连接(Connection)的概念,以及连接管理整个寿命周期。
基于TCP连接的概念,提取了著名的鼎鼎的三个手!
逻辑上,连接管理机制需要四个通知,这比两个人自我介绍好。
首先介绍(一次),听完之后说你好(第二次),
B再次引入(三次),B完成后,A再次问好(四次)。

在实际生活中自我介绍,A介绍完,B可以同时完成问好和自我介绍,这就做到了合并。在网络中为了减少发请求的次数提高效率,会把第二步和第三步合并发送,TCP 的 Segment 中本身就包含了SYN和ACK标记位置,可以实现联合发送。

1.无法为第一个同步传输数据(不能确认连接已成功建立)
2.第二 syn + ack,不能传输数据(如果传输数据增加发送费用,但失败,所以在协议设计时禁止传输数据)
第三个问题:可以携带数据(但不是强制性)
注意:
尽管没有数据,SYN也占有序列数。

假设A的ISN 初始序列号 为 a; B的ISN初始序列号为 b
第一次发送:syn len=0 SN=a ASN=0
第二次发送:syn + ack len=0 SN=b ASN=a+1
第三次发送:ack len>=0 SN=a+1 ASN=b+1
数以千计的词语不能真实,只有实践才能知道真相。

以上为TCP的分段协议格式化部分,接下来,比较TCP协议格式化图来写数据。 这里,使用科学计算机可转换16位数字系统为2位数字和10位数字系统。
| 十六进制 | 十进制 | 二进制 |
| 源端口号 | 0xe542 | 58690 |
| 目的端口号 | 0x22b8 | 8888 |
| SN | 0xb1e9b0e0 | 这个数不等于获得相对值。 |
| ASN | 0x00000000 | 0 |
| 首部长度 | 0x8 | 8*4 = 32 |
| 保留位置 (6) + 签名位置 (6) | 0x002 | 0b000000 0 0 0 0 1 0 |
找到相应的TCP协议格式 SYN = 1并不困难。
然后看看后问题022*16=32的数据 字节,与第一个部长级完全相同(整个分区为32字节),可以在没有传输数据的情况下获得。
接收器处理数据的速度是有限的,如果发送器发送太快,接收器缓冲区就会被填满,如果发送器继续发送,一个数据包就会丢失,导致一系列链路反应,如数据包重传输。
因为TCP存在于缓存中,设想一下,如果TCP发送器一直在发送,超过接受缓冲区的最大容量,这时很明显,它已经满了,但发件人仍然发送,这将导致TCP的性能下降。就像一个物体粘在传输带上一样。但货物的后部仍然很难运输,所以除了增加传送带的拥挤,没有一点好处。提出了流程控制的概念。
流量控制(广义):TCP的发送端会根据对方接收能力和网络承载能力,动态地调节自己的发送流量。——提高到达率
流量控制(狭义):Flow Control ——根据对方的接收能力来调节
这里Flow Control流量控制来举例子如果你想解决这个问题,你只需要解决以下三个问题:
1.你需要了解对象的接收能力,最好是实时。
我们需要有人告诉我们。 在议会标题中,把接收器的能力传递给发送者。
在文章开头的TCP协议分段格式图中,有一个头条 窗口字段。 发送segment 的时候,就已经把自己的接收能力(接收窗口)填写到segment header 的窗口字段中,发送给对方。
接收窗口≈接收缓冲大小-使用大小(接收数据目前未被应用程序层读取)
e.g.
2.怎末拿到对方的接收能力? --> 发送流量
最大发送者=另一方接收窗口
在上面的例子中,对于最大20k,发送者发送最大20k
3.用于控制传输数据的数量的哪些机制?-滑窗机制
1)应用层发送的数据首先放在接收缓冲区,接收器返回响应并接收应用层发送的数据。
2)但是接收窗口是一定的,而且应答发送的数据接收也不是一次性的,这就会有一种情况:应用层传入的数据(这一次的数据 + 上一次没有处理完的的数据)大于窗口大小。
3)此时会发生拥挤和性能会发生变化,它还需要上面提到的流量控制,此时窗口会向右移动,并且窗口的大小将改变到以前没有发送的数据大小。
4)需要注意的是:滑动窗口的大小 一定小于原本接收方的窗口大小。
具体流程如下图。

TCP接收缓冲区接收数据转换图

拥塞控制Congestion Control ——根据网络的承载能力来调节
本文由 在线网速测试 整理编辑,转载请注明出处。